iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 17
0

資源在 Concourse 之中扮演著很特別的角色,如果要拓展 Concourse 的功能就勢必會使用到資源。

Concourse 裡面的資源是一種抽象的概念,也因為這樣的抽象讓資源可以做到許多事情。

在大部分的情境中,我們可以用官方內置的資源就完成基本的建置任務。

以下是官方內建的資源類型:

  • git
  • hg
  • time
  • s3
  • archive (壓縮成 .tar.gz)
  • semver (更新版本號)
  • github-release
  • docker-image
  • tracker (Pivotal Tracker)
  • pool (調整建置時的環境設定)
  • cf (Cloud Foundry)
  • bosh-io-release
  • bosh-io-stemcell
  • bosh-deployment
  • vagrant-cloud

基本上大多是 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 之中,透過 getput 兩組動作的搭配,讓我們可以不斷地將結果傳遞給下一個任務,然後調整與變更對應的行為。

基於這樣的機制,我們就可以做到像是插件一樣的效果。

下一篇會實作 Middleman 生成靜態網站,並且且上傳到 S3 上面。隨著實作我們可以看到越來越多資源的組合變化。


上一篇
16 - 用 Concourse 跑 RSpec 測試
下一篇
18 - 用 Concourse 生成靜態網頁
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言