將工作和資源結合在一起,就能夠構成 Pipeline。
下面這張圖片是 Concourse 文件的範例,展示了工作和資源的關係。
在 Concourse 的網頁介面中,黑色表示資源,綠色的則表示工作。並且會透過顏色來呈現目前的狀態,所以每一個節點都會有些許的顏色差異。透過圖像我們可以看到有 Worker 和 Controller 兩種資源,並且被 Worker
Controller MySQL
Controller Postgres
三個工作所取用,其中 MySQL 和 Postgres 都是從 Controller 資源取得的。
那麼,我們先來瞭解一下資源這個設定。
resources:
- name: concourse
type: git
source:
uri: https://github.com/concourse/concourse.git
branch: master
上面的設定檔定義了一個叫做 concourse
的資源,類型是 git
當做出這樣的設定後,每當有新的 commit 被上傳的時候,所有取用這個資源的工作都會被觸發並且執行該版本對應的任務和處理。除了透過資源本身的更新之外,我們也能透過 put
動作在建置過程中更新資源。
每一個資源都擁有下列的屬性:
資源的名稱,在建置計畫中作為辨識資源的參考。
資源的類型,可以透過使用 resource_types
列舉自訂的資源,以內建的 git
類型為例,就是宣告這個資源是一個 git
的專案。
表明資源的位置,不過每一種資源類型都擁有不同的設定值,需要以資源類型來告知。以 git
類型為例,我們需要提供 uri
告知 git 專案的位置,以及 branch
來指定使用的 Branch 是哪一個。
大多數時候偷可以在對應資源類型的 README 檔案中找到可用的設定值。
檢查版本的頻率,Concourse 會定期去確認是否有新版本,預設值是 1m
(每分鐘一次),可以用的設定值可以參考 time.ParseDuration 方法的說明。
前面的章節已經提過在 Concourse 中並沒有插件的概念,而是透過資源來實現。想要拓展 Concourse 的功能就勢必要定義額外的自訂資源類型。
在 Concourse 裡面已經內建了大部分 CI 情境會使用到的資源類型,像是 Git, S3 等等。
不過有時候我們仍需要自訂資源來搭配專案的特殊需求。
我們先看一下一個官方的資源類型 jtarchie/pr
讓我們可以處理 Github 上面的 Pull Request。
resource_types:
- name: pull-request
type: docker-image
source:
repository: jtarchie/pr
resources:
- name: atomy-pr
type: pull-request
source:
repo: vito/atomy
access_token: {{access-token}}
jobs:
- name: atomy-pr-unit
plan:
- get: atomy-pr
- put: atomy-pr
params:
path: atomy-pr
status: pending
- task: unit
file: atomy-pr/ci/unit.yml
on_success:
put: atomy-pr
params:
path: atomy-pr
status: success
on_failure:
put: atomy-pr
params:
path: atomy-pr
status: failure
自訂資源是可以複寫內建的資源類型的,假設內建的 git
資源類型並不合用,我們看透過自訂資源來覆寫。或者我們希望調整預設資源的設定值,也可以透過覆寫的方式來達成。
自訂資源實際上擁有的屬性跟資源的設定是相同的。
資源類型的名稱,用於定義資源時當作參考。
自訂資源的類型,用來定義這個資源的容器環境,大多數時候都是使用 docker-image
作為類型。
定義自訂資源的位置,和資源一樣是基於 type
指定的類型來決定該提供哪些參數。以 docker-image
為例,這個資源需要提供 repository
讓 Docker 可以找到對應的 Docker Image 來執行資源的動作。
關於自訂資源的實作會在後面的章節介紹到,下一篇會介紹 Pipeline 裡面工作跟群組的設定。