iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
0

我們花了不少時間在討論 Concourse 的設定,主要是因為這些看似單純的設定在實際搭配起來後卻能有意想不到的使用方式。

這一篇會把剩下的建置計畫設定介紹完畢,下一篇開始就會是一連串的練習。

On Success

在工作執行成功,可以透過 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 Failure

on_success 相對的就是 on_failure 設定,可以在任務失敗時執行特定的任務。

使用方法跟 on_success 基本上是相同的。

plan:
- get: foo
- task: unit
  file: foo/unit.yml
  on_failure:
    task: alert
    file: foo/alert.yml

Ensure

假設不論如何都需要有收尾動作,就可以使用 ensure 來處理。但是有幾個原則要注意。

  1. 不論成功或者失敗都會執行
  2. on_successon_failure 之後執行
  3. 在建置中斷或者停止的時候,一樣會執行
  4. 如果 ensure 任務失敗,這個工作也視為為失敗

基本上跟 on_successon_failure 是相同系列的用法,就不再展示範例。

Tags

指定要運行這個任務的 Worker。如果指定了 [a, b] 的話,只有被標記上 a 或者 b 的 Worker 能夠執行這個步驟。

Try

執行一些任務,但是並不影響結果。這個設定項可以用在想執行一些有邊際效應的任務,但是又不希望對建置的成敗造成影響。

舉例來說,我們希望儲存紀錄檔。

plan:
- task: run-tests
  config: # ...
  on_success:
    try:
      put: test-logs
      from: run-tests/*.log
- task: do-something-else
  config: # ...

上述這個例子即使儲存紀錄失敗,這個建置任務還是會被視為是成功的建置。

Timeout

如果任務可能會因為某些原因卡死,那麼可以透過設定 timeout 來在超時候自動停止,而此時的狀態會被視為失敗而不是中止。

參數的格式上和 Concourse 使用的格式相同,都是基於 Golang 的解析函示,可以使用像是 30m 或者 1h 之類的參數。

Attempts

就像 timeout 的設定可能會有幾個零星的錯誤,那麼也可以設定為自動重試。透過 attempts 的設定值,我們可以讓這個任務重新嘗試一定次數,如果都還是處於失敗的狀態,那麼才真正的視為失敗。

到此為止所有建置任務的介紹都結束了,下一篇會用 RSpec 測試來展示 CI 的功能。


上一篇
14 - 建置計畫 (2)
下一篇
16 - 用 Concourse 跑 RSpec 測試
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言