日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Tekton CICD Demo

這是一個演示 Tekton CICD 的 demo。下面我們將從搭建本地 k8s 集群開始,同步鏡像至國內并部署 Tekton,一步一步實現一個 CICD 流水線。實現更新代碼自動觸發流水線,構建鏡像推送到目標倉庫,并更新 deployment 鏡像滾動更新應用,最后釘釘機器人通知到群聊。

源碼:https://github.com/win5do/tekton-cicd-demo

[TOC]

前言

我心目中理想的CICD工具應該包含以下特性:

  • 聲明式配置,新增配置不需要在UI上操作,便于遷移,可使用git版本控制
  • 配置與項目代碼解耦,統一集中管理
  • 靈活易擴展

Gitlab 和 Github 的 CICD 都是在當前 repo 中存放配置,對于開源項目一般就一個 repo 倒也沒什么,但是在公司內部往往有很多服務很多 repo,配置散落在各個 repo 中,不方便統籌管理。

Jenkins 雖然可以將 Jenkinsfile 腳本集中管理,但針對每個項目還需要在 UI 上配置。Jenkins 也有相關插件 configuration-as-code-plugin,沒用過就不評價了。

而 Tekton 所有配置都是以 k8s 詩 Yaml 文件形式存在,即使換了一個集群,只需要應用 Yaml 配置即可無縫遷移。

執行步驟

閱讀須知

  • 完成以下步驟需要 k8s 基礎使用能力
  • k8s server version >= v1.15
  • 以下命令中 alias kc=kubectl
  • Tekton 的一些概念和資源在此不再贅述,請查閱官方文檔:https://tekton.dev/docs/pipelines/
  • 以下步驟在 macOS 10.15 上測試通過,一些命令在 windows 上可能沒有。
  • registry.cn-huhehaote.aliyuncs.com/feng-566/ 旗下鏡像均可公開訪問,但是推送鏡像需要認證。所以需要一個鏡像倉庫用于推送制品鏡像,推薦阿里云鏡像倉庫注冊賬號即可免費使用。
  • 接收 github webhook 需要一個擁有公網 IP 的服務器。如果沒有,可使用 pull 模式替代。
  • 出現問題請先查看 問題排查

創建 kind 本地集群

使用 kind 創建測試集群。如果你已有 k8s 集群可跳過此步。

cat <<EOF >kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
EOF

kind create cluster --config ./kind-config.yaml
復制代碼

安裝 Tekton

同步鏡像

由于 Tekton 鏡像都是在 gcr.io 上,需要 VPN 才能拉取,所以第一步需要將鏡像同步至國內。這里我寫了腳本(./script/sync.go)將鏡像都同步至阿里云鏡像倉庫,并設為公開訪問,如無必要可跳過此步。

make sync
復制代碼

部署 Tekton

部署 pipeline、trigger、dashboard 三個組件。

kc Apply -f ./src/sync/dst
復制代碼

check:

kc get po
復制代碼

部署 demo app

測試 demo,用于后面流水線滾動更新。

kc apply -f ./demo/go-echo/deploy/deploy.yaml
復制代碼

配置 pipeline

創建 Task 和 Pipeline 資源,每個 Task 為一個獨立任務,Pipeline 則是將多個 Task 串成流水線。

更多 Task 例子可以在官方倉庫找到:https://github.com/tektoncd/catalog

配置 github 和 鏡像倉庫 access token

./manifests/pipeline/sercret.yaml 配置 github 和 Docker registry。

將其中url, username, password 修改為你自己的 access token。

配置目標集群 kubeconfig

./manifests/resource/cluster-kind.yaml 配置部署時 kubectl 使用的配置*。

將其修改為你本地 kind 集群的 kubeconfig。

配置機器人通知

./manifests/pipeline/notify.yaml 配置執行成功后聊天機器人通知地址,可接入釘釘或企業微信。

釘釘機器人文檔:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

大家可自行創建團隊測試機器人,不需要真實企業認證。

成功后釘釘會收到機器人通知:

教你本地k8s集群搭建云原生 Tekton CICD 流水線

 

應用 pipeline 配置

kc apply -f ./manifests/pipeline
kc apply -f ./manifests/resource
復制代碼

test pipeline run

手動執行 PipelineRun,測試 pipeline 流程。

kc apply -f ./manifests/test/pipeline-run-demo.yaml
復制代碼

check:

kc get pr
復制代碼

Tekton dashboard

通過 dashboard 我們可以查看流水線執行狀態。由于 kind 網絡隔離的原因,此處我們使用 kc port-forward 將端口暴露出來。

kc port-forward svc/tekton-dashboard 9097

# new terminal session
# 打開瀏覽器
open http://localhost:9097/#/namespaces/tekton-pipelines/pipelineruns
復制代碼

流水線執行成功實例:

教你本地k8s集群搭建云原生 Tekton CICD 流水線

 

[Option 1: push 模式] 配置 Tekton triggers

前面的步驟中,我們用手動的方式執行了 pipeline,下面我們配置 Tekton triggers,通過 webhok 的方式自動執行。

Tekton trigger 組件是用來接收 webhook,做一些 校驗,過濾,參數綁定等前處理,然后幫你自動創建 PipelineRun 等資源執行流水線。

kc apply -f ./manifests/triggers
復制代碼

config webhook in github repo

接收 webhook 需要一個擁有公網 ip 的服務器,首先在 github repo 中配置 webhook。

webhook 地址為 http://<your-remote-host>:9080/tekton-el,勾選 Pull requests,Pushs events,token 為 ./manifests/triggers/webhook-token.yaml中的值。

webhook 配置參考文檔: docs.github.com/en/free-pro…

webhook playload 數據結構: docs.github.com/en/free-pro…

利用 ssh 將 webhook 轉發到本地

將 kind 中 eventLister 端口暴露出來:

kc port-forward svc/el-demo-listener 9080:8080
復制代碼

服務端監聽 0.0.0.0 需要 sshd 配置中包含 GatewayPorts clientspecified,詳見: serverfault.com/questions/8…

將服務器 9080 端口轉發到本地 9080 端口:

ssh -N -R 0.0.0.0:9080:localhost:9080 <user>@<your-remote-host> -p 22
復制代碼

check port connected:

nc -v <your-remote-host> 9080
復制代碼

debug webhook

部署成功后參考 測試 CICD 中步驟進行測試。

可通過查看 eventLister 日志進行 debug:

kc logs -l eventlistener=demo-listener
復制代碼

./manifests/triggers/print.yaml print task 將 webhook head 及 body 打印出來。

[Option 2: pull 模式] 配置 CronJob

Tekton 官方并沒有提供類似 Jenkins 那種輪詢 pull 檢測 git repo,有新的 commit 則觸發構建。理由是 pull 模式會對 git 造成較大壓力。

但借助 k8s CronJob,自己實現 pull 模式。./src/pull 我實現了一個簡單的 pull 程序,定期檢查對應倉庫和分支有沒有新的 commit,自動創建 PipelineRun。

./src/pull/deploy/configmap.yaml 為 PipelineRun 模板,修改 params 部分目標 IMAGE,NAME 等參數。

./src/pull/deploy/cronJob.yaml 為 Pull 腳本定時任務, 修改 args 部分需監聽的 repo,branch 等參數。

應用:

kc apply -f ./src/pull/deploy
復制代碼

部署成功后參考 測試 CICD 中步驟進行測試。

測試 CICD

提交 commit 進行測試:

git commit -a -m "build commit" --allow-empty && git push
復制代碼

后記

問題排查

build-image 卡主

build-image 使用 kaniko,不依賴 docker daemon,所以 Dockerfile 中如果使用 golang:1.14 等體積很大的 dockerhub 鏡像,因網絡問題下載很慢甚至失敗,會導致 build 超時,最好將鏡像同步至內網。

git clone auth err

檢查 secret git-auth 是否配置正確。

push image auth err

檢查 secret docker-auth 是否配置正確。pipeline 中推送鏡像地址是否改為你個人鏡像倉庫地址。

run on openshift

部分任務配置了 securityContext.runAsUser: 0,在 openshift 運行需要配置 scc=anyuid。 參考: docs.openshift.com/container-p…

TODO

  • pipeline 中途失敗無法發送機器人通知


作者:win5do
鏈接:https://juejin.im/post/6893701305173442567
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

分享到:
標簽:k8s
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定