iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 29
0

透過這幾天的練習跟討論,是時候來測試自訂資源是否可以和原本的專案互相搭配。

假設我們之前建立的怪物資料適用於攻略網站的資料,我們可以利用第 18 天的 Middleman 專案,做出一些修改讓他可以讀取一個叫做 monsterdb.csv 的檔案,並且把怪物的名稱、生命值以及魔力顯示出來。

Pipeline 的調整

resource_types:
- name: game-db
  type: docker-image
  source:
    repository: elct9620/concourse-example-custom-resource
    tag: latest

resources:
- name: monster-db
  type: game-db
  source:
    uri: http://192.168.2.102:3000
- name: middleman
  type: git
  source:
    uri: https://github.com/elct9620/concourse-example-middleman.git
    branch: custom-resource
- name: gh-release
  type: github-release
  source:
    user: elct9620
    repository: concourse-example-middleman
    access_token: {{github-token}}

我們先對原本的資源設定增加了 game-dbmonster-db 的設定,讓我們可以存取資料庫。

jobs:
- name: build-and-public
  plan:
  - get: monster-db
    trigger: true
  - get: middleman
    trigger: true
  - task: build
    file: middleman/concourse/build-task.yml
  - put: gh-release
    params:
      name: build/name
      tag: build/tag
      globs:
        - build/build-*.tar.gz

接著在工作的部分新增要 get 的項目,把 monster-db 加到裡面。

關於 Trigger 的配置,可以視情況決定要由哪些資源觸發。

建置工作

inputs:
- name: middleman
- name: monster-db

inputs 設定增加 monster-db 來取得資源。

run:
  path: sh
  args:
    - -exc
    - |
      env
      apk --update add build-base git libffi-dev libxml2-dev libxslt-dev \
               nodejs openssl-dev ruby ruby-bigdecimal  \
               ruby-dev ruby-io-console ruby-json zlib-dev
      cp monster-db/monsters.csv middleman/source/monsterdb.csv
      cd middleman
      bundle install
      bundle exec middleman build
      export VERSION=$(date +"%Y%m%d%H%M%S")
      echo "Build Name: CR-$VERSION"
      echo "Build - CR-$VERSION" > ../build/name
      echo "Build Version: v1.0.0-CR-$VERSION"
      echo "v1.0.0-CR-$VERSION" > ../build/tag
      tar -cvzf ../build/build-CR-$VERSION.tar.gz  build/*

原本的 run 設定則是要增加下面這行。

cp monster-db/monsters.csv middleman/source/monsterdb.csv

簡單說就是將 monster-db 資源的 monsters.csv 複製到 middleman 資源的目錄讓 Middleman 可以存取到最新版的怪物資料。

之後執行 set-pipeline 動作,等待任務被觸發之後,就能在 Github 上面看到新部署的版本。

http://ithelp.ithome.com.tw/upload/images/20161229/20065771y5R22JzB80.png

目前 Concourse 使用的是 1.0 版的建置。

http://ithelp.ithome.com.tw/upload/images/20161229/20065771rpKYVqqJBE.png

並且可以看到 Middleman 生成的是 1.0 版的怪物列表。

http://ithelp.ithome.com.tw/upload/images/20161229/200657714sp4OXvz9w.png
http://ithelp.ithome.com.tw/upload/images/20161229/20065771VMWiA8jnmc.png

稍微修改怪物列表,然後新增一個版本觸發建置。

http://ithelp.ithome.com.tw/upload/images/20161229/20065771XF5vot6Xkd.png

就可以取得更新過後的頁面。

透過這樣的搭配使用,除了用來跑測試和建置之外,也能做很多不同的應用。像是利用 time 資源設計成 CronJob 來運行等等。

下一篇會做一個總結,並回顧一下這一個月來的東西。


上一篇
28 - 自訂資源 (8)
下一篇
30 - 總結
系列文
不一樣的 CI/CD 工具:Concourse 初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言