全部產品
Search
文件中心

Function Compute:相關概念

更新時間:Jul 06, 2024

本文介紹流水線相關概念,包括流水線和流水線模板、任務和工作範本以及執行內容。

背景介紹

應用中心提出了流水線和流水線模板的概念。流水線通過引用流水線模板,提供執行內容,描述了一次流水線執行以及執行結果。而流水線模板通過描述任務,以及任務之間的依賴關係,描述了一個確定的流程。

應用中心提出了任務(Task)以及工作範本(TaskTemplate)的概念,用於描述流水線中某個具體任務以及它的執行。任務通過引用工作範本,提供執行內容,描述了一次任務的執行以及執行結果。工作範本通過描述任務的執行方式以及預設上下文(可選),來描述一個任務會怎樣執行。

任務以及工作範本的引入將任務執行的描述移出了流水線。應用中心期望通過引入任務以及工作範本的概念,簡化流水線的描述負擔,讓使用者像搭建積木一樣搭建流水線。

流水線

流水線是一個流水線模板的一次具體的執行。例如,為一個代碼倉庫設定了觸發規則,每一次Push事件需要運行一次構建發布行為,那麼每次使用者向代碼倉庫推送代碼,應用中心就會建立一個流水線對象,用於記錄這次執行以及執行結果與細節。如下圖所示。

pipeline-concept1

流水線模板

流水線模板是對一個確定的CI/CD情境的描述,例如構建發布。流水線模板通過描述任務,以及任務之間的依賴關係,來確定一個具體CI/CD情境的流程。流水線模板可以被重複使用。例如,構建部署情境,需要先基於代碼倉庫的代碼,構建出一個產物,並在得到人工確認以後,將它發布到雲產品中。如下圖所示,可以總結出構建、審批和部署三個任務以及它們之間的依賴關係。pipeline-concept2

任務

任務是流水線的主要組成,它描述了流水線中每一個獨立任務的執行以及執行結果。一般情況下,使用者不會單獨運行一個任務,所有的任務都由流水線運行產生。例如,構建部署流水線執行完成後,會依次產生構建、審批和部署三個獨立的任務,其中構建是一個獨立的執行,負責根據代碼倉庫中的代碼來構建目標產物。

任務支援文本化或結構化輸出執行的結果,但如果產生了檔案製品或鏡像製品,需要在任務執行的過程中進行儲存。

任務根據模板限制以及執行內容輸入,可以運行在阿里雲沙箱環境中,也可以運行在使用者當前賬戶下。

pipeline-task-concept

工作範本

工作範本通過描述任務的執行方式以及預設上下文(可選),來描述一個任務會怎樣執行。為了降低使用者使用門檻,應用中心預置了若干常用的工作範本,包括審批、部署、自訂執行等。使用者也可以通過建立新的模板,來實現自訂的邏輯。工作範本可以大大簡化流水線的描述複雜度。

執行內容

執行內容(Context)可以影響流水線與任務的具體行為,它是流水線與任務的輸入。當滿足條件的Git事件產生或主動觸發流水線時,一個流水線對象將被建立,觸發者將觸發的上下文資訊參數化,並傳入執行內容中。

在流水線執行時,會產生任務並執行。此時,執行引擎會將流水線的執行內容(記作ctx_pipeline)向流水線模板中預設的執行內容(記作ctx_pipelinetemplate)合并,產生新的執行內容作為任務的執行內容(記作ctx_task)。任務在執行時,執行引擎又會將任務執行內容與工作範本的執行內容(記作ctx_tasktemplate)合并,作為任務運行時的執行內容(記作ctx)。

如果使用運算子+描述合并這一行為,那麼,執行內容ctx_1向執行內容ctx_2合并可以記作ctx_1+ctx_2。上述合并邏輯可以描述為ctx_task=ctx_pipeline+ctx_pipelinetemplatectx=ctx_task+ctx_tasktemplate,也可以描述為ctx=ctx_pipeline+ctx_pipelinetemplate+ctx_tasktemplate。如下圖所示。

pipeline-template-task

應用中心對合并這一行為有明確的定義,合并的對象為JSON對象,合并的實現標準為JSON Merge Patch。例如,ctx_1+ctx_2表示ctx_1的資料擁有更高的優先順序,會覆蓋ctx_2中的資料,併產生新的JSON對象。

另外,合并行為不滿足交換律的特性,例如,ctx_1+ctx_2不等於ctx_2+ctx_1ctx_1+ctx_2表示ctx_1向ctx_2合并,而ctx_2+ctx_1表示ctx_2向ctx_1合并。兩者代表的行為和結果如下圖所示。

context-merge

任務執行時,會將任務的執行內容向模板預設的執行內容合并,並作為最終的執行內容。任務所在的節點會收到一個包含執行內容的請求,並按照上下文執行相應的邏輯。

pipeline-context-merge