我們花了不少時間在討論 Concourse 的設定,主要是因為這些看似單純的設定在實際搭配起來後卻能有意想不到的使用方式。
這一篇會把剩下的建置計畫設定介紹完畢,下一篇開始就會是一連串的練習。
在工作執行成功,可以透過 on_success
來告知將要運行的動作。
下面是一個簡單的例子。
plan:
- get: foo
- task: unit
file: foo/unit.yml
on_success:
task: alert
file: foo/alert.yml
不過因為任務失敗會中斷執行,所以實際上也等同於下面這個範例。
plan:
- get: foo
- task: unit
file: foo/unit.yml
- task: alert
file: foo/alert.yml
與 on_success
相對的就是 on_failure
設定,可以在任務失敗時執行特定的任務。
使用方法跟 on_success
基本上是相同的。
plan:
- get: foo
- task: unit
file: foo/unit.yml
on_failure:
task: alert
file: foo/alert.yml
假設不論如何都需要有收尾動作,就可以使用 ensure
來處理。但是有幾個原則要注意。
on_success
和 on_failure
之後執行ensure
任務失敗,這個工作也視為為失敗基本上跟 on_success
和 on_failure
是相同系列的用法,就不再展示範例。
指定要運行這個任務的 Worker。如果指定了 [a, b]
的話,只有被標記上 a
或者 b
的 Worker 能夠執行這個步驟。
執行一些任務,但是並不影響結果。這個設定項可以用在想執行一些有邊際效應的任務,但是又不希望對建置的成敗造成影響。
舉例來說,我們希望儲存紀錄檔。
plan:
- task: run-tests
config: # ...
on_success:
try:
put: test-logs
from: run-tests/*.log
- task: do-something-else
config: # ...
上述這個例子即使儲存紀錄失敗,這個建置任務還是會被視為是成功的建置。
如果任務可能會因為某些原因卡死,那麼可以透過設定 timeout
來在超時候自動停止,而此時的狀態會被視為失敗而不是中止。
參數的格式上和 Concourse 使用的格式相同,都是基於 Golang 的解析函示,可以使用像是 30m
或者 1h
之類的參數。
就像 timeout
的設定可能會有幾個零星的錯誤,那麼也可以設定為自動重試。透過 attempts
的設定值,我們可以讓這個任務重新嘗試一定次數,如果都還是處於失敗的狀態,那麼才真正的視為失敗。
到此為止所有建置任務的介紹都結束了,下一篇會用 RSpec 測試來展示 CI 的功能。