iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 9
0

在前面的介紹中,我們已經簡單的跟大家介紹過任務。今天則會跟大家詳細討論任務的使用,以及任務在 Concourse 所扮演的角色。

在 Concourse 中,最小的可控單位就是任務。並且在理想狀況下,任務應該會是一個單純的功能,透過傳入的資料執行某些處理,並且回傳一個結果。

透過熟悉任務功能,我們就能夠寫出能夠給工作重複利用的任務。

設定任務

上一篇文章我們已經設定過簡單的 Pipeline 並且對任務有了印象,這邊我們在產生一個設定檔,純脆是任務的設定檔。

---
platform: linux

image_resource:
  type: docker-image
  source:
    repository: ruby
    tag: '2.1'

inputs:
- name: my-app

run:
  path: my-app/scripts/test

上面這個設定檔是一個執行 Ruby 程式的任務,那麼讓我們來一一討論裡面的設定值。

Platform (必要)

首先,我們指定了 platform 這個數值,他需要傳入一個字串,並且是 windows, linux, darwin 這幾種,這會決定 Concourse 選擇的任務執行節點,在這邊我們設定為 linux

簡單說,我們如果沒有 Windows 的節點,就沒辦法執行 Windows 類型的節點了。

Image Resource

這是一個可以省略的設定值,這會告訴 Concourse 要用什麼方式來執行這個任務。這個設定方式跟資源的設定方式基本上是相同的。

  • type: 類型,一般都是 docker-image 也就是透過 Docker 來執行
  • source: 關於這個資源的設定。

舉例來說,我們要使用 golang:1.6 可以像這樣設定。

image_resource:
  type: docker-image
  source: {repository: golang, tag: "1.6"}

如果使用私有的 Docker Registry 的話,也可以加上帳號密碼的設定。

image_resource:
  type: docker-image
  source:
    repository: my.local.registry:8080/my/image
    insecure_registries: ["my.local.registry:8080"]
    username: myuser
    password: mypass
    email: x@x.com

Inputs (必要)

預期輸入給這個任務使用的產物,我們有提過 Concourse 的資源是會不斷傳遞下去的,這裡是表示輸入資源放置進去的路徑。

舉例來說,我們從一個 github 資源接受輸入,就是拿到一個 git repo 作為輸入的資源。

同時 inputs 還可以設定下面兩個屬性:

  • name: 輸入的名稱
  • path: 輸入資料的路徑

Outptus

相對於輸入,輸出不一定是必要的動作(像是發送通知不會有產出)設定值基本上跟輸入一樣。

下面的例子表示了輸入與輸出路徑的設定。

---
platform: linux

image_resource: # ...

inputs:
- name: project-src

outputs:
- name: built-project

run:
  path: project-src/ci/build

那麼在任務中可以透過 $PWD 來得知輸出入的路徑。

#!/bin/bash

set -e -u -x

export GOPATH=$PWD/project-src

go build -o built-project/my-project github.com/concourse/my-project

Run (必要)

再來是執行任務最重要的部分,該執行什麼指令。

run 設定需要給予 path 的位置,有以下的設定值。

  • path: 這是必要的設定值,指定了這個任務要執行的程式位置
  • args: 如果執行任務的指令需要參數,可以透過這個設定追加
  • dir: 相對於初始目錄的位置,可以透過設定這個去改變執行時的目錄。
  • user: 執行任務的使用者,沒有指定的時候預設會看 image 的設定。

Params

額外的參數,會變轉換成環境變數。是一組 Key-Value 的數值,像是 SSH Key 之類的並不希望暴露在 Docker Image 或者設定檔中,都可以透過這個方式設定進去。

以上就是任務的設定值部分,下一篇還會在討論一些關於任務的細項。


上一篇
08 - Hello World
下一篇
10 - 任務 (2)
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言