用 Tekton 在 Kubernetes 中編寫你的第一條 CI/CD 流水線
Tekton 是一個用于創建持續集成和持續交付(CI/CD)系統的 Kubernetes 原生開源框架。通過對底層實施細節的抽象,它還可以幫助你在多個云供應商或企業內部系統中進行端到端(構建、測試、部署)應用開發。
Tekton 介紹
??Tekton?? 最初被稱為 ??Knative Build??,后來被重組為獨立的開源項目,有自己的 ??治理組織??,現在是屬于 ??Linux 基金會?? 的項目。Tekton 提供了一個集群內的容器鏡像構建和部署工作流程,換句話說,它是一個 持續集成continuous integration(CI)和 持續交付continuous delivery(CD)服務。它由 Tekton 流水線和幾個支持組件如 Tekton CLI、Triggers 和 Catalog 等組成。
Tekton 是一個 Kubernetes 原生應用。它在 Kubernetes 集群中作為擴展被安裝和運行,由一套Kubernetes 定制化資源組成,定義了你為流水線創建和復用的構建塊。由于 Tekton 是一種 Kubernetes 原生技術,所以它非常容易擴展。當你需要增加你的工作負載時,你只需向你的集群添加節點就可以了。由于其可擴展的設計和社區貢獻的組件庫,它也很容易定制。
對于需要 CI/CD 系統來開展工作的開發人員,和為其組織內的開發人員建立 CI/CD 系統的平臺工程師,Tekton 是理想選擇。
Tekton 組件
構建 CI/CD 流水線的過程非常復雜,因此 Tekton 為每一步都提供工具。以下是 Tekton 提供的主要組件:
- 流水線Pipeline: 定義了一組 Kubernetes ??自定義資源??,作為你用來組裝 CI/CD 流水線的構建塊。
- 觸發器Triggers:一種 Kubernetes 自定義資源,允許你根據從事件有效載荷中提取的信息來創建流水線。例如,你可以在每次創建 Git 倉庫的合并請求時,觸發流水線的實例化和執行。
- 命令行CLI:提供一個名為 ?
?tkn?
? 的命令行界面,你可以使用它從終端與 Tekton 進行交互。 - 儀表盤Dashboard:是 Tekton 流水線的一個基于網頁的圖形界面,顯示流水線的執行信息。
- 目錄Catalog:是一個高質量的、由社區貢獻的 Tekton 構建塊(任務、流水線等),可在你自己的流水線中使用。
- 中心Hub:是一個基于網頁的圖形界面,用于訪問 Tekton 目錄。
- 操作員Operator:是一種 Kubernetes ??操作員模式??,你可以在 Kubernetes 集群中安裝、更新、升級和刪除 Tekton 項目。
- 鏈Chains:是一個 Kubernetes 自定義資源定義Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中處理供應鏈安全的問題。正在開發中。
- 結果Results:旨在幫助用戶對 CI/CD 工作負載歷史進行邏輯分組,并將長期結果的存儲從流水線控制器中分離出來。
Tekton 術語
Tekton terminology
- 步驟Step:是 CI/CD 工作流程中最基本的實體,例如為 Python 網絡應用程序運行一些單元測試或編譯一個 Java 程序。Tekton 使用容器鏡像執行每個步驟。
- 任務Task::kissing:* 是按特定順序排列的步驟的集合。Tekton 以 ??Kubernetes 容器莢?? 的形式運行任務,其中每個步驟都成為 容器莢pod
- 流水線Pipelines:是按特定順序排列的任務的集合。Tekton 把所有任務連接成一個 有向無環圖directed acyclic graph(DAG),并按順序執行圖。換句話說,它創建了一些 Kubernetes 容器莢,并確保每個容器莢按預期成功運行。
Tekton pipelines
- 流水線運行PipelineRun:顧名思義,是一條流水線的具體執行。
- 任務運行TaskRun:是一個任務的具體執行。你可以選擇在流水線外運行一次任務運行,可以通過它查看任務中每個步驟執行的具體情況。
創建你的 CI/CD 流水線
開始使用 Tekton 的最簡單方法是自己編寫一個簡單的流水線。如果你每天都在使用 Kubernetes,那你可能對 YAML 很熟悉,這正是 Tekton 流水線的定義方式。下面是一個克隆代碼庫的簡單流水線的例子。
首先,創建一個 ??task.yaml?
? 文件,用你喜歡的文本編輯器打開它。這個文件定義了你要執行的 步驟Step。在這個例子中,就是克隆一個倉庫,所以我把這個步驟命名為 “clone”。該文件設置了一些環境變量,然后使用一個簡單的 shell 腳本來執行克隆。
接下來是 任務Task。你可以把步驟看作是一個被任務調用的函數,而任務則設置步驟所需的參數和工作空間。
創建第二個文件 ??pipeline.yaml?
?,并用你喜歡的文本編輯器打開它。這個文件通過設置諸如可以運行和處理任務的工作區等重要參數來定義流水線。
最后,創建一個 ??pipelinerun.yaml?
? 文件,用喜歡的文本編輯器打開它。這個文件真正的運行流水線。它調用流水線中定義的參數(繼而調用任務文件中定義的任務)。
把不同工作分在不同的文件中的好處是,??git-clone?
? 任務可以在多條流水線中復用。
例如,假設你想為一個流水線項目做端到端的測試。你可以使用 ??git-clone?
? 任務 來讓每一次測試都基于最新的代碼。
總結
只要你熟悉 Kubernetes,那 Tekton 對你來說就像其他 Kubernetes 原生應用一樣簡單。它有很多工具可以幫助你創建流水線并與之交互。如果你喜歡自動化,不妨試試 Tekton!