iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 21
0
DevOps

不一樣的 CI/CD 工具:Concourse 初探系列 第 21

21 - 自訂資源 (1)

雖然目前有非常多好用的資源可用,不過有時候也會希望能夠客製化資源。像是上一篇文章介紹的 dpl 其實是可以封裝成一個資源來使用。

要時做客製化的資源類型,要先了解其背後的運作原理。

架構

資源基本上是透過三個指令來組成的,背後透過什麼語言實作本身並沒有影響,只要可以接受 STDIN STDOUT 跟參數等就能夠正常運作。

  • /opt/resource/check
  • /opt/resource/in
  • /opt/resource/out

在不同的時機點 Concourse 會呼叫上述三個的檔案,來做對應得處置。

Check

在 Concourse 中,要檢查這個資源是否需要更新就會執行 check 這個指令。預設會每分鐘執行一次,所以在前面的案例中,我們使用下面的設定會自動觸發工作。

get: my-repo
trigger: true

就是因為執行完 check 得到版本有差異的結果時,就會自動啟動這個工作。

In (Input)

當我們設定 get 時,如果一個任務需要這個資源提供些檔案時,就會去呼叫 in 這個指令。

Concourse 會把這些資訊寫入 STDIN 給我們。

{
  "source": {
    "uri": "git://some-uri",
    "branch": "develop",
    "private_key": "..."
  },
  "version": { "ref": "61cebf" }
}

並且帶入一個參數,告訴我們要將檔案放到哪個目錄。

Out (Output)

一個任務結束後我們希望更新這個資源,像是發佈到 Githbu 的 Release 頁面,或者發送一則 Slack 通知。這個時候我們用 put 就會將資訊寫入 out 這個指令。

Concourse 會把這些資訊寫入 STDIN 給我們。

{
  "params": {
    "branch": "develop",
    "repo": "some-repo"
  },
  "source": {
    "uri": "git@...",
    "private_key": "..."
  }
}

任務透過資源取得檔案後,做過處理後放置的檔案和 in 一樣會當作參數傳入。

流程

簡單整理一下整個資源的流程,其實概念上非常簡單,但是卻因為這樣抽象的設計讓彈性變得非常大。

  • 檢查版本
    • 回傳版本資訊
    • 觸發
  • 取得檔案
    • 確認該取得的版本
    • 取出檔案
    • 放到指定目錄
    • 給任務處理
  • 更新檔案
    • 收到工作更新請求
    • 取得修改後的檔案
    • 放到資源儲存的位置(Ex. Github)

自訂資源的概念就是這樣簡單,下一篇會簡單介紹 Docker 的使用。


上一篇
20 - 用 Concourse 部署網站
下一篇
22 - 自訂資源 (2)
系列文
不一樣的 CI/CD 工具:Concourse 初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言