
GoCD,一个开源的持续集成和持续交付系统,可以在持续交付过程中执行编译,自动化测试,自动部署等等,于Jenkins类似。GoCD的基础架构由Server和Agent组成:
- Server负责控制一切(配置),轮询材料(如代码仓库)的变化,检测到材料变化需要触发Pipeline时,将Job分配给Agent去执行
- Agent接收Server分配的Job,执行Job下的Task(运行命令、部署等),并将Job的状态报告给Server,由Server整理信息判断该Job所处Stage的状态
- 每个部署业务的机器上都必须安装Agent

1. GoCD中的一些基本概念
Task - 任务
任务或构建任务是需要执行的操作,通常每个Task只是一个命令。
Job - 工作
Job由多个Task组成,每个Job将按照顺序依次运行,运行过程中如果当前Task失败,则整个Job为失败,且后续Task不再运行。
Job中的每个Task都是作为一个独立的程序来运行的,因此,Task对其任何环境变量所做的更改都不会影响后续Task。 后续Task可以看到系统所做的任何更改。
Stage - 阶段
一个Stage由多个Job组成,在一个Stage里,每个Job都是独立于其他Job的,这意味着GoCD可以并行执行多个Job,如果某一个Job运行失败,则这个Stage运行失败;但是这不影响其他Job的运行。
Pipeline - 管道
一个Pipeline由多个Stage组成,每个Stage都将按照顺序运行,如果某一个Stage运行失败,后续的Stage则不会运行。

Materials and triggers - 材料和触发器
很显然如果没有水,管道妥妥是空的,通常Material是代码存储仓库,它可以支持Git、SVN、Mercurial等等。GoCD不断轮询查找是否有新的提交,如果有新的提交则重新运行Pipeline。它还支持定时触发器,多种代码仓库。
· Pipeline Dependencies - 管道依赖关系
不同Pipeline之间可以设置触发,如下图所示,Pipeline1的Stage1和Stage2都可以触发Pipeline2的运行。

Value Stream Map - 价值流图(VSM)
端到端的Pipeline全局图

Artifacts - 工件
Artifacts一般是文件或者文件夹,当job执行完毕后会发布Artifacts,供给用户、后续执行的stage或pipeline使用。
Agent: 执行job的go节点。
Resource: 标记agent的标签,标识agent上有哪些资源,用来判断再该agent上是不是可以执行某种任务。
如下图所示,
1.任务1可以由GoCD服务器分配给代理1或3。
2.作业2只能分配给代理1(因为它是提供Linux资源的唯一代理)。
3.作业3只能分配给代理1(因为它是提供这两种资源的唯一代理)。4.工作4可以分配给任何三个代理,因为这个工作不需要特殊的资源匹配。
注意,代理3有一个Apple资源并不能阻止它被分配工作。它恰好是一种资源,它不需要任何显示的工作。

Environment & Environment Variables- 环境和环境变量
"Environment" 用来对对pipeline和agent进行分组. 分组规则如下:
1. 一个pipeline 最多属于一个environment。
2. 一个agent可以与任意个environments关联。
3. 一个agent可以执行与其关联的environment中的pipeline里的job。
4. 一个与environment关联的agent不能执行没有与其关联的environment中的pipeline里的job。
Environments Variables的定义优先级从高到低依次如下:
Job > Stage > Pipeline > Environment

2. GoCD中的基本组件
2.1 GoCD仪表板

2.2 查看Agent
Agents页面列出了服务器可用的所有Agent和它们当前的状态。
当代理首次连接到服务器时,它是“Pending”(挂起状态)。管理员必须在GoCD将工作安排在该Agent之前启用Agent。
管理员也可以禁用Agent。GoCD不会为一个被禁用的Agent安排工作。如果在Agent被禁用时正好有一项工作正在该Agent上建立,则该工作将被完成;然后才禁用Agent。管理员在重新安排工作之前需要启用Agent。
管理员可以选择删除不再需要的Agent。在删除Agent之前,必须禁用该Agent。处于(building)状态或者(cancelled)状态的Agent不能被删除。

2.3 查看Agent详情
此界面可以查看每个Agent的详细配置信息以及运行信息


2.4 Pipeline Activity界面
Pipeline Activity界面显示了当前Pipeline所有运行情况

2.5 Stage / Job详情
选择上面任何一个颜色块都可以进入所属Stage/Job的详细界面


2.6 GoCD管理
有四种配置管道的方法
通过管理界面来配置管道。
通过管理界面的“Config XML”选项卡直接编辑XML。
还可以通过调用配置API来配置管道
通过文件系统直接进行XML编辑进行配置后。默认情况下,Go服务器每5秒对文件系统进行轮询,以更改cruise-config.xml。该文件的位置显示在Admin >配置XML选项卡的右上角。


3. 如何配置GoCD
3.1 创建新Pipeline
输入名称和所属Group

配置代码仓库,输入代码仓库地址
值得一提的是,这里有一个黑名单功能,可以指定一组GoCD在检查更改时应该忽略的文件。存储库变更集只包含这些文件不会自动触发管道。这些都在配置参考资料的忽略部分详细说明。

填写Stage和Job
填写默认Stage和Job的信息,包括名称,运行命令等,之后点击finish便完成啦

3.2 管理Pipeline及其依赖
每个Pipeline都有一个设置界面,如图所示

可以修改原料的代码仓库

可以管理Stage

也可以管理Job

3.3 管理Agent
在Agent页面,可以选择Agent,之后将其关闭或启用

还可以在Job设置中配置Resources,再配置Agent的Resources,使Job运行于指定Agent上


3.4 锁定Pipeline
确保只有一个GoCD管道实例可以同时运行。
一般默认为第三种运行多个实例

第一种,只能运行一个实例(xbtest2),可以运行多个实例(xbtest3)

第二种,运行管道的单个实例并锁定失败,当Stage运行失败的时候,依然保持锁定状态,不能触发新的Pipeline运行,直到手动解除锁定方可继续重新运行

3.5 定时器&超时处理
GoCD支持定时运行Pipeline功能,在设置中找到Timer Settings即可设置

也可通过XML设置,更多信息见 < timer >

GoCD也可以自动取消超时的Job运行,在Job设置下可以配置

也可以在Pipeline下的Server Configuration配置超时设置

3.6 用户管理
GoCD允许管理员控制对GoCD的访问并授予基于角色的权限,也可以设置角色,根据角色分配权限



参考文章
https://www.jianshu.com/p/1b1de0b5441e
网友评论