每一個工作都包含了一個建置計畫,當一個工作被啟動的時候,就會透過建置計畫來定義這個工作要做什麼。建置計畫是由一系列的步驟所構成的,其中包含了像是取得或者更新資源或者執行一些任務。
以下是一個簡單的工作範例:
name: banana-unit
plan:
- get: banana
trigger: true
- task: unit
file: banana/task.yml
這個工作包含了一個建置計畫,這個計畫定義了從 banana
資源取得資料,並且會在 banana
資源有版本更新時觸發。並且執行一個叫做 task
的任務,這個任務的細節定義在 banana/task.yml
這個檔案之中。
而工作也可以將透過傳遞上游的生成物來取得資源,這需要透過在 get
設定中加入 pass
設定來進行傳遞。以下面的例子來說,我們可以設定 banana
和 apple
資源分別是從 banana-unit
和 apple-unit
兩個工作所取得。
name: fruit-basket-integration
plan:
- aggregate:
- get: banana
trigger: true
passed: [banana-unit]
- get: apple
trigger: true
passed: [apple-unit]
- get: integration-suite
trigger: true
- task: integration
file: integration-suite/task.yml
假設這個工作同時具有多個資源,我們可以用 aggregate
來合併這些資源整合為一個資源給這個建置計畫使用。
假設要更新生成的檔案,我們可以用 push
將檔案更新到資源中。
name: deliver-food
plan:
- aggregate:
- get: banana
trigger: true
passed: [fruit-basket-integration]
- get: apple
trigger: true
passed: [fruit-basket-integration]
- get: baggy
trigger: true
- task: shrink-wrap
file: baggy/shrink-wrap.yml
- put: bagged-food
params:
bag: shrink-wrap/bagged.tgz
上面的範例將這個任務生成的檔案更新到 bagged-food
這個資源,並且指定了生成的資源檔案位置。
要注意的是這幾個範例的
banana
和apple
資源都相依在上游的工作。
在建置專案中如果需要原始碼或者其他相依的資源,就需要用 get
來取得這些資源。
plan:
- get: version
params:
bump: minor
rc: true
- put: version
params:
version: version/number
上述的例子透過 semver
資源取得了版本號(這邊的 version
是前面提到資源設定的參考名稱)
要存取的資源邏輯名稱,這個名稱也可能是任務的 inputs
設定值,或者被這個建置計畫當作參考。
一般就是定義好的資源名稱
要存取的資源名稱,預設跟 get
設定的名稱相同。
要從資源存取的版本,預設是 latest
(最新版)也可以設定為 every
(每個版本)或者指定特定的版本。
以 git
為例,可以設定某個 SHA1 值,像是 {ref: abcdef123}
。
當指定時,只有在列表中指定的工作才會被這個計畫關注並且觸發。
以下是一個例子來說明這個動作。
plan:
- get: a
passed: [a-unit, integration]
- get: b
passed: [b-unit, integration]
- get: x
passed: [integration]
這表示 a
b
x
都會通過 integeration
這個建置傳入,並且擁有相同的版本。而 a
還會通過 a-unit
這個工作傳入,並擁有相同的版本。 b
的情況以此類推。
額外的參數,如果這個資源在取得動作時有額外的參數可以設定,可以透過 params
設定。
預設為 false
如果設定為 true
的時候,工作會在資源有新版本的時候自動觸發並且執行。
今天因為時間的關係所以就暫時到此為止,下一篇文章會繼續介紹後續相關建置方案的設定項。