延續上一篇的內容,這一篇還會繼續討論建置計畫中的設定項。因為在 Concourse 之中,建置計畫算是攸關測試或者自動部署等功能的核心部分,所以也會相對的有較多的項目。
跟 get
相對的是 put
這個設定,使用 get
會將資源中的檔案加入到目前的工作目錄,而使用 put
則是讓這次任務生成的檔案被放放到資源中。
plan:
- get: repo-develop
- put: repo-master
params:
repository: repo-develop
以上面這個例子來看,就是將生成的檔案上傳到某個遠端的 Repository 上。而當資源被上傳後,會馬上透過 get
取得更新後的資源,並且讓後續的任務可以使用被更新過的資源。
也因此,設定上和 get
是大同小異的。不過有一個比較特殊的設定叫做 get_params
要注意。
因為在我們做 put
後,會馬上執行 get
動作把剛剛上傳的版本更新並且傳遞給後續的任務使用,所以我們可能會希望調整 get
動作的一些參數,此時就可以利用 get_params
來做設定。
一個工作中的建置計畫該做哪些事情,就要交給任務的設定。而一個工作中如果裡面有任何任務是失敗的,那麼這個工作就是失敗的工作。
plan:
- get: my-repo
- aggregate:
- task: go-1.3
file: my-repo/go-1.3.yml
- task: go-1.4
file: my-repo/ci/go-1.4.yml
上面這個例子我們從一個資源開始,並且執行兩個任務。並且只有所有任務都成功的時候,這個工作的狀態才會被判定成成功的。
任務名稱,常會使用 unit
或者 integration
等名稱。
任務設定,兩者之中使用其中一個。 file
是將任務單獨寫在一個檔案,並且直接引用。而 config
則是直接寫在任建置計畫中的任務設定。
給予任務完整的權限,通常是設定為 false
的狀態。如果開啟的話可能會讓伺服器處於風險中,因為不會從原本隔離的方式執行,而是以實際上的使用者執行。
額外的參數,可以用來覆蓋透過 file
或 config
設定的執行任務參數。
plan:
- get: my-repo
- task: integration
file: my-repo/ci/integration.yml
params:
REMOTE_SERVER: 10.20.30.40:8080
USERNAME: my-user
PASSWORD: my-pass
舉例來說,如果需要設定遠端使用者的話,我們可以在建置計畫中單獨設定並且共用這個任務的設定檔。
在前面幾個案例中我們經常會看到這個設定,而它的用途就是讓各個步驟同步執行。要注意的是,在其中的任一步驟出錯時,代表整個步驟都會是回傳錯誤的狀態。
舉例來說,我們可以同步執行多個任務。
plan:
- get: some-repo
- aggregate:
- task: unit-windows
file: some-repo/ci/windows.yml
- task: unit-linux
file: some-repo/ci/linux.yml
- task: unit-darwin
file: some-repo/ci/darwin.yml
也可以同步取得多個資源。
plan:
- aggregate:
- get: component-a
- get: component-b
- get: integration-suite
- task: integration
file: integration-suite/task.yml
讓任務步驟依序執行,不過如果已經是在最頂層的步驟設定,就已經是依序執行的狀態。和 aggregate
搭配使用時可以讓多個步驟依序執行,而不會以同步的狀態方式運作。
下面是一個簡單的例子。
plan:
- aggregate:
- task: unit
- do:
- get: something-else
- task: something-else-unit
關於建置任務還有一小部分,會在下一篇介紹完畢。之後就會正式開始時做,用各種案例來練習 Concourse 的使用。