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




相关文章
相关标签/搜索