本文介紹流水線相關概念,包括流水線和流水線模板、任務和工作範本以及執行內容。
背景介紹
應用中心提出了流水線和流水線模板的概念。流水線通過引用流水線模板,提供執行內容,描述了一次流水線執行以及執行結果。而流水線模板通過描述任務,以及任務之間的依賴關係,描述了一個確定的流程。
應用中心提出了任務(Task)以及工作範本(TaskTemplate)的概念,用於描述流水線中某個具體任務以及它的執行。任務通過引用工作範本,提供執行內容,描述了一次任務的執行以及執行結果。工作範本通過描述任務的執行方式以及預設上下文(可選),來描述一個任務會怎樣執行。
任務以及工作範本的引入將任務執行的描述移出了流水線。應用中心期望通過引入任務以及工作範本的概念,簡化流水線的描述負擔,讓使用者像搭建積木一樣搭建流水線。
流水線
流水線是一個流水線模板的一次具體的執行。例如,為一個代碼倉庫設定了觸發規則,每一次Push事件需要運行一次構建發布行為,那麼每次使用者向代碼倉庫推送代碼,應用中心就會建立一個流水線對象,用於記錄這次執行以及執行結果與細節。如下圖所示。
流水線模板
任務
任務是流水線的主要組成,它描述了流水線中每一個獨立任務的執行以及執行結果。一般情況下,使用者不會單獨運行一個任務,所有的任務都由流水線運行產生。例如,構建部署流水線執行完成後,會依次產生構建、審批和部署三個獨立的任務,其中構建是一個獨立的執行,負責根據代碼倉庫中的代碼來構建目標產物。
任務支援文本化或結構化輸出執行的結果,但如果產生了檔案製品或鏡像製品,需要在任務執行的過程中進行儲存。
任務根據模板限制以及執行內容輸入,可以運行在阿里雲沙箱環境中,也可以運行在使用者當前賬戶下。
工作範本
工作範本通過描述任務的執行方式以及預設上下文(可選),來描述一個任務會怎樣執行。為了降低使用者使用門檻,應用中心預置了若干常用的工作範本,包括審批、部署、自訂執行等。使用者也可以通過建立新的模板,來實現自訂的邏輯。工作範本可以大大簡化流水線的描述複雜度。
執行內容
執行內容(Context)可以影響流水線與任務的具體行為,它是流水線與任務的輸入。當滿足條件的Git事件產生或主動觸發流水線時,一個流水線對象將被建立,觸發者將觸發的上下文資訊參數化,並傳入執行內容中。
在流水線執行時,會產生任務並執行。此時,執行引擎會將流水線的執行內容(記作ctx_pipeline)向流水線模板中預設的執行內容(記作ctx_pipelinetemplate)合并,產生新的執行內容作為任務的執行內容(記作ctx_task)。任務在執行時,執行引擎又會將任務執行內容與工作範本的執行內容(記作ctx_tasktemplate)合并,作為任務運行時的執行內容(記作ctx)。
如果使用運算子+
描述合并這一行為,那麼,執行內容ctx_1向執行內容ctx_2合并可以記作ctx_1+ctx_2
。上述合并邏輯可以描述為ctx_task=ctx_pipeline+ctx_pipelinetemplate
與ctx=ctx_task+ctx_tasktemplate
,也可以描述為ctx=ctx_pipeline+ctx_pipelinetemplate+ctx_tasktemplate
。如下圖所示。
應用中心對合并這一行為有明確的定義,合并的對象為JSON對象,合并的實現標準為JSON Merge Patch。例如,ctx_1+ctx_2表示ctx_1的資料擁有更高的優先順序,會覆蓋ctx_2中的資料,併產生新的JSON對象。
另外,合并行為不滿足交換律的特性,例如,ctx_1+ctx_2
不等於ctx_2+ctx_1
,ctx_1+ctx_2
表示ctx_1向ctx_2合并,而ctx_2+ctx_1
表示ctx_2向ctx_1合并。兩者代表的行為和結果如下圖所示。
任務執行時,會將任務的執行內容向模板預設的執行內容合并,並作為最終的執行內容。任務所在的節點會收到一個包含執行內容的請求,並按照上下文執行相應的邏輯。