對 Concourse 來說 Pipeline 的運作是其中的關鍵,在上一篇我們已經瞭解了三個核心的概念。
而 Pipeline 可以視為是工作跟資源的設定結果,當我們設定 Pipeline 的時候,他會有自己的生命週期並且依照時間持續的檢查資源的版本並且安排工作。而這個就是 Concourse 的 Pipeline 機制所描述的意義。
資源是 Concourse 的核心,並且用於定義一個相依的模型是如何進入和離開我們的 Pipeline 之中。這個設計讓 Concourse 可以確定每一個建置都是可以重新再現並且被記錄的。
在 Concourse 之中,使用資源也是為一透過 Pipeline 漸進的生成產出的方法。第一種是工作的執行順序是相依在資源上的,也就是我們不需要指定工作的相依性,因為他會依照資源的傳遞依序執行下去。
以下是三個 Pipeline 的核心機制:
每一個 Pipeline 都會自動的依照時間順序去搜集版本,舉例來說 Git Commit 會被 Git Resource 依序的搜集起來。
而 Pipeline 會用兩種方法去偵測新的版本。
check
元件來檢測出新的版本。put
步驟產生出新的版本。上述兩種方法都會被合併成特定資源的串流。
事實上,當我們在定義工作的時候,是相依在 get
步驟的。而這個步驟可以做出下面這幾種類型的篩選。
passed
限制這個步驟,他會確認是否通過一整個工多輸入。這也表示只有一個成功的輸入才會被接受。version
來限制取得的版本。用圖片來表現的話,會像是下面這張圖一樣。
在完成篩選後,除了可以手動的啟動一個工作之外。預設是不會自動開始任何工作的,我們必須透過 trigger: true
的設訂讓工作所 get
的資源能夠在版本變動時啟動這個工作運作。
這樣確保了我們只會在希望的時候觸發工作,並且每一次觸發的工作都是新的版本。
有時候我們會碰到一些問題,像是不小心執行了錯誤的工作。或者沒有篩選掉無法下向相容的版本讓整個 Pipeline 卡住,因此有幾種方法可以對應這些情況。
一個資源可以被暫停使用,他可以讓透過 check
的檢測不會偵測到任何新的資源。但是在 Pipeline 中產生出來的新版本仍然會被觸發出來。
這個功能可以讓我們將損毀的來源暫停,並且暫時使用正常的資源來繼續建置的任務。
版本可以明確且單獨的在每個資源上坐出停用的設定,這將會導致這個資源將永遠不會被用在建置的輸入端。也因此當有工作設定了停用的資源,建置任務將不會運行。
工作可以被暫停,讓有新的資源被發現時不會執行。這會讓建置任務停止在那邊,等待工作被重新啟動才繼續運行。
這在確認建置失敗是發生在哪一個階段的時候非常有用。
而我們也可讓整個 Pipeline 暫停,如此一來就不會有任何建置被啟動。這通常只會在要快速的暫停整個流程,一般是有例外的情況造成 Pipeline 無法運行時才會使用。
到目前為止,我們已經對 Concourse 有基本的了解,下一篇文章會開始介紹建置 Concourse 環境的方法。