码迷,mamicode.com
首页 > 其他好文 > 详细

DevOps - Concourse

时间:2020-07-14 00:19:26      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:operation   文件的   就是   机制   start   添加   实例   releases   erro   

1 - Concourse简介

Concourse是由Pivotal赞助的开源CICD工具,以pipeline机制运行任务并保留执行的状态。
一般情况下,用来配合PCF(Pivotal Cloud Foundry)使用。

  • pipeline:通过作业实现的资源流变化的结果可视化展现
  • 能够对pipeline配置进行版本控制,方便移植和恢复。
  • 构建在容器中运行,隔离各个环境,避免不同环境之间相互污染情况发生。
  • 在一个部署过程中可定义多个管道,管道之间相互隔离,并且可在yaml文件中完成所有配置。

1.1 Wiki

1.2 Samples

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

2 - 核心概念

Concourse独立抽象出Resource、Job以及Task模型。
Concourse的pipeline将Task、Job、Resource三者有机地结合起来,用yaml文件将Job和Resource集中配置,在容器中build(构建)。

  • Resource:带版本的实体(外部依赖),比如git仓库
  • Job:定义pipeline的行为,对Resource进行get或put操作
  • Task:执行的基本单元,定义脚本的执行(Input/Output),可以被Job执行或者通过fly命令(concourse的cli)手动执行

2.1 任务(Task)

执行的基本单元,表现为在一个全新启动的容器中所运行的脚本。
容器已经经过了预处理,因此其中包含了一个输入与输出目录,任务脚本可在这些目录中运行。

  • 任务在一个独立的环境(比如容器)中执行脚本,该环境包含依赖的资源
  • 任务由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命令行工具在某个容器中再一次在本地运行,通过这种方式实现更快的开发周期。

  • 由资源与任务构成,通过构建计划(build plan)实现
  • 可以由资源的变更所触发,也可以选择手动触发(实现人工批准流程)
  • 可以被认为是一个具有input和output的函数,当新的input可用时,该函数会自动运行
  • 一个作业可以依赖于上游作业的输出,由此构成pipeline的功能
  • 一个作业计划的执行实例被称为一次构建(Build),构建是可以重复使用的
  • 作业构建计划中的所有任务都成功执行,构建才能成功,任一任务失败,构建就失败

2.4 管道(pipeline)

管道(pipeline)围绕代表所有外部状态的"资源"(resources)和"与它们交互的作业job"构建。
资源(Resources)用于表示源代码(source code)、依赖项(dependenceis)、部署(deployments)和任何其他外部状态。
资源类型(Resource Types)被定义为管道本身的一部分,使管道更加自包含,并保持 Concourse 本身较小和通用,而无需求助于复杂的插件系统。

  • 通过作业实现的资源流变化的可视化展现
  • 在一个部署过程中可以定义多个管道,这些管道是相互隔离的

3 - 参数解释

3.1 Resource

resources是在pipeline的job会使用到的对象,被列在pipeline配置文件的resoureces键上,会在job的get、put等地方被使用。
每一个resource的配置属性包括name、type、source、check_every、tags。

- 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

技术图片
技术图片
技术图片
技术图片

DevOps - Concourse

标签:operation   文件的   就是   机制   start   添加   实例   releases   erro   

原文地址:https://www.cnblogs.com/anliven/p/13296557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!