Concourse 的最終目標是作為捷徑提供一個豐富的系統,也因此 Concourse 限制自身使用三種核心概念。
透過三者的組合,則能夠變化出各種有趣的特性。舉例來說,我們可以利用三者的組合建構從簡單(單元測試 -> 整合測試 -> 部署 -> 發布)到複雜的(多重作業系統建置、部署)等等。
除了上述三個基本概念之外,在你使用 Pipeline 的時候也不會有額外的細節需要了解或者學習。
任務是一個依賴於資源而且獨立的語法(Script)也就是說可以是一段 Shell Scrip 或者 Ruby 程式,也可以是一行指令(echo "Hello World"
)都是可以的。
當執行完畢程序回傳 0
的狀態碼,那麼就是為成功的任務,反之則視為失敗。
而一個任務可以透過工作來執行,或者使用 Concourse 提供的 Fly 命令列工具來執行,兩個方法之間是沒有差異的,會使用相同的設定來運行,確保跟在 Pipeline 中執行的結果是相同的。
資源是一種實體,可以用來進行檢查版本、下載新版本或者更新版本。最常見的使用方式就是 git
了,我們可以透過檢查 git
的 HEAD 來比對版本、使用 git pull
下載新版本,用 git push
上傳新版本。
不過對於 Concourse 來說,實際上並不清楚 git
是怎樣的東西,一切的運作都取決於這個資源類型的實作。透過這樣的機制,讓 Concourse 可以輕易地拓展。
事實上,資源是一種抽象的概念。這樣 Concourse 不會被限制在如何實作和整合功能。取而代之的是使用者可以透過自行設計的資源類型來工作,或者使用內建的資源來配置對應的工作流程。
工作實際上是指當資源發生改變時(或者手動觸發),所執行的一系列動作。如同大家所熟知的 CI 流程中,當使用者上傳程式碼時,會自動進行單元測試一樣,工作就是表示這樣的概念。
我們可以將工作看成一個處理輸入(Input)和輸出(Output)的功能,每當有新的資源輸入時會自動開始工作。而這個工作可以依賴於上一個工作所輸出的資源,就像是生產線一樣。
而定義工作的內容則稱之為建置計畫(Build Plan),透過這個功能我們可以從簡單的單元測試到矩陣類型的任務都能夠定義出來。
在工作之中存在著名為建置的實體,也就是一個工作中建置計畫的實體。一個建置可以有成功、失敗、錯誤等等各種類型的結果,也有可能是你的程式碼所回報的錯誤狀態。
只有在建置執行的時候,工作才是真實存在的。每一個當每一個工作所定義給建置計畫的任務成功時,這個建置才算是成功完成。如果失敗,那麼這個建置計畫所取用的資源就不會被傳遞到後續的工作中
另一方面因為這些都是在隔離的環境下運行,所以在執行中和執行完畢後的一段時間內。可以使用 fly intercept
指令來觀察和除錯。
後續的 Concourse 都會圍繞著這幾個概念運行,雖然現在還在很抽象的階段,不過對於 Concourse 運作的三個基本元素對於後續了解 Pipeline 會有幫助。
下一篇會介紹 Concourse 的運作機制。