在前面的介紹中,我們已經簡單的跟大家介紹過任務。今天則會跟大家詳細討論任務的使用,以及任務在 Concourse 所扮演的角色。
在 Concourse 中,最小的可控單位就是任務。並且在理想狀況下,任務應該會是一個單純的功能,透過傳入的資料執行某些處理,並且回傳一個結果。
透過熟悉任務功能,我們就能夠寫出能夠給工作重複利用的任務。
上一篇文章我們已經設定過簡單的 Pipeline 並且對任務有了印象,這邊我們在產生一個設定檔,純脆是任務的設定檔。
---
platform: linux
image_resource:
type: docker-image
source:
repository: ruby
tag: '2.1'
inputs:
- name: my-app
run:
path: my-app/scripts/test
上面這個設定檔是一個執行 Ruby 程式的任務,那麼讓我們來一一討論裡面的設定值。
首先,我們指定了 platform
這個數值,他需要傳入一個字串,並且是 windows
, linux
, darwin
這幾種,這會決定 Concourse 選擇的任務執行節點,在這邊我們設定為 linux
簡單說,我們如果沒有 Windows 的節點,就沒辦法執行 Windows 類型的節點了。
這是一個可以省略的設定值,這會告訴 Concourse 要用什麼方式來執行這個任務。這個設定方式跟資源的設定方式基本上是相同的。
docker-image
也就是透過 Docker 來執行舉例來說,我們要使用 golang:1.6 可以像這樣設定。
image_resource:
type: docker-image
source: {repository: golang, tag: "1.6"}
如果使用私有的 Docker Registry 的話,也可以加上帳號密碼的設定。
image_resource:
type: docker-image
source:
repository: my.local.registry:8080/my/image
insecure_registries: ["my.local.registry:8080"]
username: myuser
password: mypass
email: x@x.com
預期輸入給這個任務使用的產物,我們有提過 Concourse 的資源是會不斷傳遞下去的,這裡是表示輸入資源放置進去的路徑。
舉例來說,我們從一個 github
資源接受輸入,就是拿到一個 git repo 作為輸入的資源。
同時 inputs
還可以設定下面兩個屬性:
相對於輸入,輸出不一定是必要的動作(像是發送通知不會有產出)設定值基本上跟輸入一樣。
下面的例子表示了輸入與輸出路徑的設定。
---
platform: linux
image_resource: # ...
inputs:
- name: project-src
outputs:
- name: built-project
run:
path: project-src/ci/build
那麼在任務中可以透過 $PWD
來得知輸出入的路徑。
#!/bin/bash
set -e -u -x
export GOPATH=$PWD/project-src
go build -o built-project/my-project github.com/concourse/my-project
再來是執行任務最重要的部分,該執行什麼指令。
run
設定需要給予 path
的位置,有以下的設定值。
額外的參數,會變轉換成環境變數。是一組 Key-Value 的數值,像是 SSH Key 之類的並不希望暴露在 Docker Image 或者設定檔中,都可以透過這個方式設定進去。
以上就是任務的設定值部分,下一篇還會在討論一些關於任務的細項。