前言
Tekton 作為一款開源的雲原生 CI/CD 框架,前身是 Knative 的 build-pipeline 項目。作為 CI/CD 框架,其本身並不是一個 CI/CD 產品,所以不應拿 Tekton 與 Jenkins 或者 Drone 這樣的 CI/CD 產品進行比較,Tekton 本質是一個強大而靈活的 CI/CD 框架,開發者可以基於它開發自己的 CI/CD 工具或產品,一些有能力的團隊可以使用 Tekton 做為底座開發出更適合自己團隊使用的 CI/CD 工具。
而 Tekton 的可視化組件 Tekton Dashboard 則為用戶提供了可視化界面,使 Tekton 的體驗更接近與 Jenkins 這樣的 CI/CD 產品,同時開發者可以在使用 Tekton Dashboard 時也會對 Tekton 的一些概念進行更深入的瞭解。
本文將會使用 Tekton Dashboard,通過 UI 界面在 K8S 集群中部署一個 Java 項目:pipeline-example-maven
交互式學習
本文還提供 [katacoda] 交互式學習版本,用戶可以直接訪問 katacoda 頁面:https://katacoda.com/guoxudong/scenarios/tekton-dashboard ,使用 [katacoda] 在瀏覽器端學習使用 Tekton Dashboard。
該教程屬於官方教程的漢化版,並得到了許可。
Tekton Dashboard
安裝
這是所有步驟中最麻煩的一步,由於官方提供的 Tekton 鏡像都在 gcr.io
上,在國內並不能直接拉取,所以在測試的時候著實花費了不少時間。
我特意將這些鏡像轉儲到 dockerhub 上,如果官方版無法使用,可以使用克隆版:
# 官方
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.10.1/release.yaml
# 克隆版
$ kubectl apply -f https://raw.githubusercontent.com/sunny0826/tekton-local/v0.10.1/tekton-pipeline.yaml
# 官方
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.5.3/tekton-dashboard-release.yaml
# 克隆版
$ kubectl apply -f https://raw.githubusercontent.com/sunny0826/tekton-local/v0.10.1/tekton-dashboard.yaml
安裝成功之後需要配置 Tekton Dashboard 的訪問地址,可以使用 ingress 或 Nodeport 暴露端口,這裡採用 port-forward
的形式將端口映射到本地:
$ kubectl port-forward svc/tekton-dashboard 8097:9097 -n tekton-pipelines
Forwarding from 127.0.0.1:8097 -> 9097
Forwarding from [::1]:8097 -> 9097
...
訪問 Tekton Dashboard
打開瀏覽器訪問訪問 http://localhost:8097
導入資源
點擊 Import Tekton resources
進入資源導入頁面,導入資源:
- Repository URL:
https://github.com/sunny0826/pipeline-example-maven
- Namespace:
default
- Repository directory:
tekton/
- Service Account
tekton-dashboard
輸入內容如下:
點擊 Import and Apply
按鈕,之後 Dashboard 會創建一個 PipelineRun 來導入指定的 Tekton 資源。
點擊頁面底部的 View status of this run
鏈接,查看 MyApp 導入 Tekton 資源的狀態。
PipelineRun 完成後,Tekton 資源已導入成功。
創建 PipelineResource
選擇 default
命名空間,並點擊 PipelineResource
按鈕。
點擊頁面右上方的 Create +
按鈕,將彈出一個創建 PipelineResource 的表單。
我們要在 default
命名空間中為 pipeline-example-maven 的 master
分支創建一個 git PipelineResource,故在彈出的表單中填寫以下信息:
- Name:
pipeline-example-maven
- Namespace:
default
- Type:
Git
- URL:
https://github.com/sunny0826/pipeline-example-maven
- Revision:
master
該表單內容應如下:
點擊 Create
按鈕,創建 PipelineResource。
創建 PipelineRun
選擇 default
命名空間,並點擊 PipelineRuns
按鈕。
點擊頁面右上方的 Create +
按鈕,將彈出一個創建 PipelineRun 的表單。該表單是動態的,會根據所選的 Pipeline 提供 PipelineResource 和 Param 字段。
我們需要 default
命名空間中使用 pipeline-example-maven
的 Pipeline 和 PipelineResource,創建一個 PipelineRun,故在彈出的表單中填寫以下信息:
- Namespace:
default
- Pipeline:
pipeline-example-maven
- PipelineResources source:
pipeline-example-maven
- 其餘字段保留默認值。
該表單內容應如下:
點擊 Create
按鈕,創建 PipelineRun。
查看 PipelineRun 日誌
點擊頁面頂部創建通知中的鏈接或在 PipelineRun 列表中對應的 PipelineRun,查看 pipeline-example-maven PipelineRun 的日誌。
deploy 步驟中,有時會出現權限錯誤,需要給 default:default 綁定上 admin 的 clusterrole 權限:
$ kubectl create rolebinding default-admin --clusterrole=admin --serviceaccount=default:default
確認 build
和 deploy
任務均已成功。
注意:這裡為了方便,使用的是單節點的 Kubernetes,構建完並沒有推送到鏡像倉庫,鏡像拉取策略為
imagePullPolicy: Never
,所以啟動時候也沒有從遠程倉庫拉取鏡像,而是啟動的本地鏡像。
查看構建結果
$ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
example-greenhouse 1/1 1 1 5h2m
總結
Tekton Dashboard 將 Tekton 的資源進行了可視化展示,指導用戶快速理解 Tekton pipeline 流程以及配置方式,快速上手 Tekton。但是由於鏡像的原因,導致新手體驗不佳,所幸官方還提供了 [katacoda] 交互式教程,該教程我已漢化完成並獲得了官方的許可,可以在瀏覽器端快速體驗從安裝 Tekton 到部署應用的整個過程。