iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 10
0

上一篇文章已經把任務的基本用法都介紹完畢,不過還有一些小細節需要討論。所以就用這一篇簡短的討論一下關於任務的一些細節部分。

在 Concourse 每次執行任務的時候都是產生一個新的容器,而這個容器會由我們所指定的 image_resource 來作為基礎的檔案系統。

當我們透過 run 來執行指令的時候,我們的工作目錄(Concourse 執行指令的資料夾)會含有從 inputs 所指定的資料,如果沒有資料被輸入進來的話,這個任務就不會被執行。

inputs 相同的是,每次執行任務也會放入一個用於 outputs 的空目錄,我們可以將這次任務的產出放到裡面,並且傳遞給下一個任務使用。

不過,如果你執行的指令是沒有產出檔案的。像是使用 git 的話,我們就可以透過 git clont ./input ./output 的方式,將檔案從輸入的目錄轉移到輸出的目錄之中。

在上一篇文章提到的 params 參數,我們已經知道會轉換為環境變數。這些環境變數會跟我們設定的 image_resource 內建的環境變數合併起來,像是從 DockerfileENV 指令。

而執行指令的使用者預設是從 image_resource 指令的鏡像所設定的(一般是 DockerfileUSER 所指定)在沒有指定的時候,則會以 root 作為預設的使用者。

另一個相關的設定則是 privileged 也就是表示這個任務會有「完整」的權限,就如同使用 root 執行任務一般。大多數時候都不應該由任務將其設定為 true 這有可能會因為輸入的檔案中含有 Concourse 的任務,而不小心啟動不應該運行的任務,而造成安全性上的問題。

最後,再用一個範例來解釋上面這些細節。

---
platform: linux

image_resource:
  type: docker-image
  source:
    repository: golang
    tag: '1.6'

params:
  SOME_PARAM: some-default-value

inputs:
- name: some-input
- name: some-input-with-custom-path
  path: some/custom/path

outputs:
- name: some-output

run:
  path: sh
  args:
  - -exc
  - |
    whoami
    env
    go version
    find .
    touch some-output/my-built-artifact

這些指令會產生下面的輸出:

+ whoami
root

預設為 root 使用者。

+ env
USER=root
HOME=/root
GOLANG_DOWNLOAD_SHA256=5470eac05d273c74ff8bac7bef5bad0b5abbd1c4052efbdbc8db45332e836b0b
PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
GOPATH=/go
PWD=/tmp/build/e55deab7
GOLANG_DOWNLOAD_URL=https://golang.org/dl/go1.6.linux-amd64.tar.gz
GOLANG_VERSION=1.6
SOME_PARAM=some-default-value

Dockerfile 指定的環境變數會被設定進去,並且額外加上我們自訂的 SOME_PARAM 環境變數。

+ go version
go version go1.6 linux/amd64

使用的平台為 linux (透過 go version 指令來觀察)

+ find .
.
./some-input到裡面。
./some-input/foo
./some
./some/custom
./some/custom/path
./some/custom/path/bar
./some-output
+ touch some-output/my-built-artifact

最後我們可以觀察到指定的 inputs 被作為目錄放到工作目錄中。

而也會有一個 outputs 的目錄存在,並且可以寫入一些檔案到裡面。

上述這個範例檔可以用前面提到過的 fly execute 指令直接執行,而不需要透過建立 Pipeline 的方式。

下一篇會針對 Pipeline 的部分做討論。


上一篇
09 - 任務
下一篇
11 - Pipeline
系列文
不一樣的 CI/CD 工具:Concourse 初探30

尚未有邦友留言

立即登入留言