iT邦幫忙

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

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

19 - 用 Concourse 建置命令列工具

今天我們會利用 mruby 的 gem 來生成可以在任何 64 位元電腦運行的執行檔。基於昨天的 Pipleine 設定,會再加入更多設定值讓 Pipeline 豐富起來。

資源

這次一樣只會用到 gitgithub-release 兩個資源。

resources:
- name: example
  type: git
  source:
    uri: https://github.com/elct9620/concourse-example-mrb.git
- name: gh-release
  type: github-release
  source:
    user: elct9620
    repository: concourse-example-mrb
    access_token: {{github-token}}

今天會將完成的檔案發佈到 Github 上,並且可以下載到任何 64 位元的 Linux 電腦上使用。

工作

跟昨天相比,其實只多了一個 exam 的任務,用來檢查編譯完成的檔案是否可以正常使用。

jobs:
  - name: compile-and-release
    plan:
      - get: example
        trigger: true
      - task: compile
        file: example/tasks/compile.yml
      - task: exam
        file: example/tasks/exam.yml
      - put: gh-release
        params:
          name: build/name
          tag: build/tag
          globs:
            - build/host/bin/example

任務

今天的重點在於我們的任務設定開始有一些變化,讓編譯的動作開始有一些不同。

---
platform: linux

image_resource:
  type: docker-image
  source:
    repository: elct9620/mrb-compiler

inputs:
- name: example

outputs:
- name: build

run:
  path: sh
  args:
    - -exc
    - |
      export VERSION=$(date +"%Y%m%d%H%M%S")
      echo "Release $VERSION" > build/name
      echo "1.0.0-$VERSION" > build/tag
      mruby-compiler $(pwd)/example $(pwd)/build

首先是 compile 任務,這次使用了自製的 mrb-compiler Docker Image 來處理,裡面預先封裝好了 mruby 1.2.0 來加快編譯的速度。
另外這裡其實是能夠直接用下面這組設定的:

run:
  path: mruby-compiler
  args:
    - ./example
    - ./build

不過因為 github-release 的需要,所以只好改成用 sh 去執行。

另一方面是因為 mrb-compiler 這個 Docker Image 還有一些細節沒有處理好,當我們用 args 參數指定時,是無法透過 $(pwd) 來取的絕對路徑,反而讓 mruby-compiler 這個指令無法順利的複製檔案。

接下來是 exam 任務。

---
platform: linux

image_resource:
  type: docker-image
  source:
    repository: alpine

inputs:
- name: build

run:
  path: ./build/host/bin/example
  args:
    - puts true

相較之下就簡單很多,我們先去除 ruby 的環境改用 alpine 來確認編譯出來的檔案可以在非 Ruby 環境中執行。
前面的任務已經指定 build 為輸出目錄,在這個任務我們則用 inputs 把這個目錄連結進來(每次都會是在 /tmp/xxxxx 的目錄下,所以是無法共享的)

取得前一個任務生成的二進位檔後,就可以直接指定路徑並且執行。

設定 Pipeline

最後,跟上一篇一樣要將 Pipeline 設定到 Concourse 並且啟動 Pipeline。

fly -t lite sp -p mrb-example -c concourse.yml --var "github-token=TOKEN_NAME"
fly -t lite up mrb-example

有興趣的話,還可以嘗試看看透過 Cross Compile 和用不同作業系統的 Worker,發布支援不同作業系統的版本。

http://ithelp.ithome.com.tw/upload/images/20161219/20065771RQTEdZl398.png

下一篇會介紹結合 Travis CI 的 dpl 工具和 Slack Notification 製作一個自動部署網站的 Pipeline!


上一篇
18 - 用 Concourse 生成靜態網頁
下一篇
20 - 用 Concourse 部署網站
系列文
不一樣的 CI/CD 工具:Concourse 初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言