資源在 Concourse 之中扮演著很特別的角色,如果要拓展 Concourse 的功能就勢必會使用到資源。
Concourse 裡面的資源是一種抽象的概念,也因為這樣的抽象讓資源可以做到許多事情。
在大部分的情境中,我們可以用官方內置的資源就完成基本的建置任務。
以下是官方內建的資源類型:
基本上大多是 Cloud Foundry 團隊會用到的功能。不過因為資源基本上都是透過 docker-image
來實現的,所以也有不少 社群自行製作的資源類型。
以 Slac Notification 為例子,我們要使用非官方的資源要先定義一個「資源」類型出來。
resource_types:
- name: slack-notification
type: docker-image
source:
repository: cfcommunity/slack-notification-resource
tag: latest
首先我們先定義了 resource_types
來表示這是一個「資源類型」的定義,並且給這個資源一個名稱(slack-notification
)接著指定資源的 Docker Image 資訊。而 Concourse 就會在使用到這個資源定義時下載對應的 Docker Image 來使用。
假設我們要在建置時發送通知,那麼就需要定義一個「資源」並且將設定好的 Webhook 連結告知這個資源。
resources:
- name: slack-alert
type: slack-notification
source:
url: https://hooks.slack.com/services/XXXX
最後,在需要發送通知的建置計畫中設定將結果 put
到這個資源中。
---
jobs:
- name: some-job
plan:
- put: slack-alert
params:
channel: '#my_channel'
text_file: results/message.txt
text: |
The build had a result. Check it out at:
http://my.concourse.url/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME
or at:
http://my.concourse.url/builds/$BUILD_ID
Result: $TEXT_FILE_CONTENT
也就是說,在 Concourse 之中,透過 get
與 put
兩組動作的搭配,讓我們可以不斷地將結果傳遞給下一個任務,然後調整與變更對應的行為。
基於這樣的機制,我們就可以做到像是插件一樣的效果。
下一篇會實作 Middleman 生成靜態網站,並且且上傳到 S3 上面。隨著實作我們可以看到越來越多資源的組合變化。