DevOps - Concourse

1 - Concourse簡介

Concourse是由Pivotal贊助的開源CICD工具,以pipeline機制運行任務並保留執行的狀態。
通常狀況下,用來配合PCF(Pivotal Cloud Foundry)使用。html

  • pipeline:經過做業實現的資源流變化的結果可視化展示
  • 可以對pipeline配置進行版本控制,方便移植和恢復。
  • 構建在容器中運行,隔離各個環境,避免不一樣環境之間相互污染狀況發生。
  • 在一個部署過程當中可定義多個管道,管道之間相互隔離,而且可在yaml文件中完成全部配置。

1.1 Wiki

1.2 Samples

https://github.com/pivotalservices/concourse-pipeline-sampleslinux

2 - 核心概念

Concourse獨立抽象出Resource、Job以及Task模型。
Concourse的pipeline將Task、Job、Resource三者有機地結合起來,用yaml文件將Job和Resource集中配置,在容器中build(構建)。ios

  • Resource:帶版本的實體(外部依賴),好比git倉庫
  • Job:定義pipeline的行爲,對Resource進行get或put操做
  • Task:執行的基本單元,定義腳本的執行(Input/Output),能夠被Job執行或者經過fly命令(concourse的cli)手動執行

2.1 任務(Task)

執行的基本單元,表現爲在一個全新啓動的容器中所運行的腳本。
容器已經通過了預處理,所以其中包含了一個輸入與輸出目錄,任務腳本可在這些目錄中運行。git

  • 任務在一個獨立的環境(好比容器)中執行腳本,該環境包含依賴的資源
  • 任務由Job執行或由fly手動執行
  • 能夠認爲任務是一個函數,具備input和output
  • 任務可能成功(0),也可能失敗

2.2 資源(Resource)

  • 版本化資源的抽象位置,例如某個repository
  • 也能夠表示更抽象的概念,例如時間觸發器
  • 資源的變動可被檢測(check)、獲取(pull down)以及發佈(push up)
  • 不一樣的資源類型(例如Git、AWS S3或觸發器)可封裝用於pipeline的各類樣板代碼,爲Concourse的擴展提供了一個可適配的接口
  • 在Job構建計劃的get或put步驟中使用資源

2.3 做業(Job)

做業(Jobs)是要執行的獲取 (get)、放置(put)和任務(task)步驟序列,肯定做業的輸入和輸出 。
一個做業計劃的執行實例被稱爲一次構建(Build),Concourse中的構建是可重複使用的,由於其中的任務在新的容器中也將從新運行。
所以,構建的工做線程不會受到以前運行結果的變動所影響。
此外,若是某次構建失敗了,也能夠經過一個名爲Fly的Concourse命令行工具在某個容器中再一次在本地運行,經過這種方式實現更快的開發週期。github

  • 由資源與任務構成,經過構建計劃(build plan)實現
  • 能夠由資源的變動所觸發,也能夠選擇手動觸發(實現人工批准流程)
  • 能夠被認爲是一個具備input和output的函數,當新的input可用時,該函數會自動運行
  • 一個做業能夠依賴於上游做業的輸出,由此構成pipeline的功能
  • 一個做業計劃的執行實例被稱爲一次構建(Build),構建是能夠重複使用的
  • 做業構建計劃中的全部任務都成功執行,構建才能成功,任一任務失敗,構建就失敗

2.4 管道(pipeline)

管道(pipeline)圍繞表明全部外部狀態的"資源"(resources)和"與它們交互的做業job"構建。
資源(Resources)用於表示源代碼(source code)、依賴項(dependenceis)、部署(deployments)和任何其餘外部狀態。
資源類型(Resource Types)被定義爲管道自己的一部分,使管道更加自包含,並保持 Concourse 自己較小和通用,而無需求助於複雜的插件系統。web

  • 經過做業實現的資源流變化的可視化展示
  • 在一個部署過程當中能夠定義多個管道,這些管道是相互隔離的

3 - 參數解釋

3.1 Resource

resources是在pipeline的job會使用到的對象,被列在pipeline配置文件的resoureces鍵上,會在job的get、put等地方被使用。
每個resource的配置屬性包括name、type、source、check_every、tags。windows

- name 指明使用的resource名稱,必填項。
- type 代表resource的類型,必填項。
- source 選填項,指定resource 的的多個屬性。對於Concourse來講是一個黑盒,隨着resource不一樣的類型而決定。經常使用項
- check_every 選填項,指定檢測新版本的間隔。默認值是1分鐘。
- tags 指定workers池中帶tag的workers進行這一步操做。

3.2 Jobs

Jobs用來指定pipeline的行爲、resources怎麼加入處理流程。
每一個job的配置屬性包括name、serial、buildlogstoretain、serialgroups、maxinflight、public、disablemanualtrigger、interruptible、onsuccess、onfailure、ensure、plan。數組

- name 指明使用的job名稱,必填項。
- serial 指明build執行時是串行仍是並行,默認值爲false。經常使用項
- build_logs_to_retain 賦予整數值,指定最新幾回的build日誌是否保留。
- serial_groups 設置所屬的tag,同一tag會按序執行。
- max_in_flight 指定同時執行的build數。
- public 指定build的日誌十分能被公開查詢,也就是不用用戶認證就能在UI上看到,默認是false。經常使用項
- disable_manual_trigger 默認設置爲false,當設置爲true就不能手動觸發job的執行。
- interruptible 默認爲false,若是設置爲true,worker會不等待build的完畢直接退出。
- on_success 當job執行成功時的處理步驟。
- on_failure 當job執行失敗時的處理步驟。
- ensure 設置時會無論job是否執行成功或者失敗。 
- plan 必填項,Build Plan執行的計劃任務。每一個job都有一個單獨的build plan。

plan必填項中的配置屬性函數

- aggregate, 涉及get、resource
- task, 執行用戶定義的任務,涉及file(.yml文件格式)、params(參數)屬性,file指定工做內容對應的yml文件,取自resource下相關路徑
- get,得到指定資源
- put,

3.3 Task

### platform 
platform 必填項,代表task的執行環境。
除了linux還有windows、darwin等。

### inputs 
inputs 必填項,指定該task指望得到的輸入項
也就是指明向task傳遞輸入的文件
每一個輸入項由以name、path兩個屬性來指定輸入。
- name是必填項,表示輸入的名稱。
- path是可選的,表示路徑。若是沒有指明path,輸入項的路徑就是input名。

### run
run 必填項,指定在容器內執行的命令。
run當中有path、args、dir、user。
- path 表示相應的命令的執行路徑,是必填項。其餘三項都是選填。
- args 數組類型,每一個經過 Fly 執行的pipeline時指定的參數都會添加到這個數組內。
- dir 用來設置執行腳本的工做目錄。
- user 顯現地設置執行命令的用戶,若是未指明,則取決於後臺Garden的設置。通常在linux下都是root來執行。

### output
output 選填項。命令執行產生的內容能夠經過這個屬性來指定。
每個輸出都有和輸入同樣的屬性類型。

4 - Fly命令

fly是Concourse的命令行工具(cli),能夠從命令行管理Concourse實例工具

4.1 安裝

安裝fly在Local PC(win7 64bit)
下載安裝包: https://github.com/concourse/concourse/releases/download/
解壓後,將fly.exe加入到系統環境變量PATH

安裝配置完成後,運行fly -v命令查看版本是否與Concourse平臺版本一致。

若是不一致,在使用fly命令時,會出現告警信息,可能會影響命令執行結果。

4.2 縮寫與別名

運行fly -h或者fly -help得到幫助信息。
從幫助信息中能夠看到命令的別名, 便於命令的書寫。

# abbreviation
-t    --target 
-p    --pipeline
-c    --config
-l    --load-vars-from
-v    --var
-p    --pipeline 
-j    --job
-b    --build

# aliases
up    unpause-pipeline     
dp    destroy-pipeline
gp    get-pipeline
sp    set-pipeline
ps    pipelines
js    jobs
tj    trigger-job
ab    abort-build 
bs    builds
w     watch

4.3 一些命令

# Login
fly --target <targetName> login --team-name <teamName> --concourse-url <concourseUrl>


# Set/update pipeline
fly --target <targetName> set-pipeline --pipeline <pipelineName> --config pipeline.yml --load-vars-from config.yml --load-vars-from credentials.yml --var test_var=test-value
fly -t <targetName> sp -p <pipelineName> -c pipeline.yml -l config.yml -l credentials.yml -v test_var=test-value
# Unpause pipeline
fly --target <targetName> up -p <pipelineName>
fly -t <targetName> up -p <pipelineName>
# Unpause job
fly --target <targetName> up -j <pipelineName>/<jobName>
fly -t <targetName> up -j <pipelineName>/<jobName>


# Trigger job
fly -t <targetName> tj -j <pipelineName>/<jobName>
# Trigger job and start watching the log
fly -t <targetName> tj -j <pipelineName>/<jobName> -w


# Abort the job build
fly -t <targetName> ab -j <pipelineName>/<jobName> -b <buildNumber>
# Destory pipeline
fly -t <targetName> dp -p <pipelineName>


# List pipelines
fly -t <targetName> ps
# List jobs
fly -t <targetName> js -p <pipelineName>
# List all the job building history 
fly -t <targetName> bs -p <pipelineName>
# List job building history 
fly -t <targetName> bs -j <pipelineName>/<jobName>


# check pipeline resource
fly -t <targetName> resources -p <pipelineName>
# check resources log
fly -t <targetName> check-resource -r <pipelineName>/<resourceName> --watch


# Show the job build logs
fly -t <targetName> w -j <pipelineName>/<jobName> -b <buildNumber>
# List jobs detail  ???js???
fly -t <targetName> gp -p <pipelineName> js

4.4 Cheat-Sheet

4.5 Check pipeline

### How to check the pipeline 

Step-1:  ` fly  -t <target Name> up -p  <pipeline Name> `

Step-2 Checking Current builds under job:  
 `fly  -t <target name> builds –j <concourse pipeline name>/<concourse job name>`

Step-3 abort the previous pending builds then re-run job:  
`fly –t <target name> ab –j <pipeline name>/<concourse job> -b <build number>`

Step-4 checking pipeline Resource if Step3 has no any pending builds:           
 ` fly  -t <target Name>  resources -p <pipeline Name>`

Step-5 check resources log :
fly -t <target name> check-resource -r <concourse pipeline name>/<concourse resource name> --watch `

Step-6 fix the error at step3 if need. If step 5 has no error,  please wait it.

6 - 參考資料

Tutorial
A linear sequence of tutorials for learning how to use Concourse.

其餘

7 - 一些示例

參數示例


黑色的是資源 Resource


Plan : task要作的事情



job默認灰色 執行成功後變爲綠色, 失敗會變爲紅色





操做流程


Pipelines Patterns




相關文章
相關標籤/搜索