iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
0

每一個工作都包含了一個建置計畫,當一個工作被啟動的時候,就會透過建置計畫來定義這個工作要做什麼。建置計畫是由一系列的步驟所構成的,其中包含了像是取得或者更新資源或者執行一些任務。

以下是一個簡單的工作範例:

name: banana-unit
plan:
- get: banana
  trigger: true
- task: unit
  file: banana/task.yml

這個工作包含了一個建置計畫,這個計畫定義了從 banana 資源取得資料,並且會在 banana 資源有版本更新時觸發。並且執行一個叫做 task 的任務,這個任務的細節定義在 banana/task.yml 這個檔案之中。

而工作也可以將透過傳遞上游的生成物來取得資源,這需要透過在 get 設定中加入 pass 設定來進行傳遞。以下面的例子來說,我們可以設定 bananaapple 資源分別是從 banana-unitapple-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 這個資源,並且指定了生成的資源檔案位置。

要注意的是這幾個範例的 bananaapple 資源都相依在上游的工作。

取得資源

在建置專案中如果需要原始碼或者其他相依的資源,就需要用 get 來取得這些資源。

plan:
- get: version
  params:
    bump: minor
    rc: true
- put: version
  params:
    version: version/number

上述的例子透過 semver 資源取得了版本號(這邊的 version 是前面提到資源設定的參考名稱)

get (必要)

要存取的資源邏輯名稱,這個名稱也可能是任務的 inputs 設定值,或者被這個建置計畫當作參考。

一般就是定義好的資源名稱

resouce

要存取的資源名稱,預設跟 get 設定的名稱相同。

version

要從資源存取的版本,預設是 latest (最新版)也可以設定為 every (每個版本)或者指定特定的版本。
git 為例,可以設定某個 SHA1 值,像是 {ref: abcdef123}

passed

當指定時,只有在列表中指定的工作才會被這個計畫關注並且觸發。

以下是一個例子來說明這個動作。

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

額外的參數,如果這個資源在取得動作時有額外的參數可以設定,可以透過 params 設定。

trigger

預設為 false 如果設定為 true 的時候,工作會在資源有新版本的時候自動觸發並且執行。

今天因為時間的關係所以就暫時到此為止,下一篇文章會繼續介紹後續相關建置方案的設定項。


上一篇
12 - Pipeline (2)
下一篇
15 - 建置計畫 (3)
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言