gocd 开源的持续集成和持续交付系统 相关概念了解

GoCD简介,介绍了GoCD的一些基本概念(摘自帮助文档)

1.任务(Task)

任务或构建任务是需要执行的操作。通常,它是一个命令。

下图中显示的任务设置为ant -Dmodule=A compile在由GoCD执行时运行命令。

图1:任务

2.工作(job)

作业由多个任务组成,每个任务都按顺序运行。如果作业中的任务失败,则该作业将被视为失败,除非另行指定,否则将不会运行作业中的其余任务。

下图中显示的作业有三个任务。该ant任务将首先运行,其次是rake任务,最后,shell脚本运行。

图2:工作

作业中的每个任务都作为独立程序运行,因此,任务对其任何环境变量所做的更改不会影响后续任务。文件系统上的任务所做的任何更改都将对后续任务可见。

3.阶段(Stage)

一个阶段由多个工作组成,每个工作可以独立于其他工作。这意味着GoCD可以并且确实在一个阶段中并行执行作业。如果作业失败,则认为该阶段失败。但是,由于工作彼此独立,因此阶段中的其他工作将完成。

下图所示的阶段有两个作业,一个构建模块A,另一个构建模块B.第一个作业的成功或失败不会影响第二个作业的成功或失败。

图3:阶段

4.管道(pipeline)

管道由多个阶段组成,每个阶段将按顺序运行。如果阶段失败,则管道被视为失败,并且不会启动以下阶段。

下图所示的管道有三个阶段,第一阶段有两个工作,第二阶段有三个,第三个有一个。如果第一阶段失败,则不会运行第二和第三阶段。

图4:管道

由于管道的图像可能会变得非常大,因此本文档的其余部分将使用稍微小一点的管道表示,这会隐藏作业和任务。该表示如下所示。

图5:管道(小型表示)

5.材料和触发器(或“ 何时运行这些任务,作业,阶段和管道?”)

材料是管道运行的原因。通常,它是源代码材料存储库(Git,SVN,Mercurial等)。GoCD服务器不断轮询已配置的材料,当找到新的更改或提交时,相应的管道将运行或“触发”。

有不同种类的材料。这是Git材料的一个例子。当对Git材质中配置的存储库进行提交时,将触发管道。

图6:材料 - git

同样,SVN材料如下所示。GoCD支持许多不同类型的源代码材料,以及用于扩展其支持的材料种类的插件端点。

图7:材料 - SVN

“计时器触发器”是一种特殊的材料,它在指定的时间或指定的时间间隔触发管道。

图8:定时器触发器

管道甚至可以配置多种材料。下面显示的管道配置有Git材料和SVN材料。当任一存储库具有新提交时,将触发管道。

图9:多种材料

6.管道依赖项材料

当管道中的一个阶段被用作另一个管道的材料时,材料真正开始变得强大。

在下图所示的图像中,管道1的阶段2被配置为管道2的材料。每当管道1的阶段2成功完成时,管道2将触发。在诸如此类的设置中,管道1称为上游管道,管道2称为下游管道。管道1的第2阶段称为管道2的上游依赖性。

图10:管道依赖性 - 最后阶段

管道的任何阶段都可以用作材料。在下图所示的图像中,一旦管道1的阶段1成功完成,管道2将触发并启动。现在,管道1的第2阶段和管道2的第1阶段可以同时运行。

图11:管道依赖性 - 任何阶段

7.扇出和扇入

当材料完成导致多个下游管道触发时,材料被称为“扇出”到下游管道,如下图所示。扇出的原因不一定是管道依赖性材料。它可以是任何材料。

图12:扇出


“扇入”是指需要多个上游材料来触发下游管道时,如下图所示。扇入的一个重要且有趣的方面是GoCD将在触发下游管道之前确保上游管道的修订是一致的。

在下图所示的图像中,这意味着如果管道1的阶段2较慢且管道2的阶段1较快,则管道3将在触发之前等待管道1完成。它不会触发管道1的不一致或旧版本,只是因为管道2快速完成。

图13:扇入


8.价值流图(VSM)

价值流图(VSM)是管道的端到端视图,其上游依赖关系和它触发的下游管道。在决定触发哪些管道时,GoCD的扇入和扇出分辨率将始终如一地处理所有依赖关系。

例如,在下图中,当在Repo 1(git)中找到新提交时,GoCD将不会立即触发管道5。它将等待管道1触发并成功完成,然后它将等待管道4触发并成功完成。最后,它将使用与管道1一起使用的相同版本的Repo 1来触发Pipeline 5。

图14:VSM

9.文物(Artifacts)

Go中的每个作业都可以选择发布“Artifacts”,它们是文件或目录。作业运行后,GoCD将确保发布指定的工件并使其可供用户以及其他下游阶段和管道使用。

工件的表示如下所示。如图所示,每个作业都可能有工件。在这种情况下,顶部的作业有两个文件,一个目录作为其工件,下面的作业有两个目录,一个文件作为工件。

图15:工件

10.获取文物

GoCD提供了一个称为“获取工件任务”的特殊任务,它允许从任何祖先管道(即当前管道上游的任何管道)获取和使用工件。GoCD将确保获取正确版本的工件,而不管系统中可能发生的任何其他情况。

在下面显示的图像中,管道1的阶段1中的作业发布了一些工件。在阶段2中,获取工件任务获取阶段1中发布的工件。然后,在管道2中,获取工件任务获取在管道1中发布的工件。最后,在管道3(更下游)中,获取工件任务获取管道1中的工件,通过管道2。

图16:获取工件任务

11.代理(或“ 在哪里做这些任务,作业阶段,管道运行?”)

GoCD代理商是GoCD生态系统中的工作者。系统中配置的所有任务都在GoCD代理上运行。GoCD服务器轮询材料中的更改(这发生在GoCD服务器本身上),然后,当检测到更改并且需要触发管道时,相应的作业将分配给代理,以便他们执行任务。

代理拿起作业被分配给他们,执行任务的工作和报告工作的GoCD服务器的状态。然后,GoCD服务器整理来自不同作业的所有信息,然后决定舞台的状态。

代理由下图中的监视器表示。

图17:代理

12.资源

可以使用“资源”增强代理和作业。资源是自由格式标记,帮助Go决定哪些代理能够获取特定作业。

在下图中,Firefox®和Tux图标代表代理上的资源。资源可以被视为代理广播其能力。资源由管理员定义,可能意味着管理员希望他们的意思。在这种情况下,可能表示此代理已安装Firefox以运行功能测试,并且它是一个Linux机器。

图18:代理上的资源

在为作业分配资源时,资源变得非常有用。对于作业,可以将资源视为代理中所需的功能,以使其成功运行。

在下图中,作业1声称它需要具有Firefox®资源的代理。作业2声称它需要具有Linux®资源的代理。工作3个声称,它需要一个代理与两者的Firefox®和Linux®资源。Job 4声称它不需要任何资源。

图19:代理,作业和资源

在上图中:

可以通过GoCD服务器将作业1分配给代理1或3。

作业2只能分配给代理1(因为它是唯一提供Linux资源的代理)。

作业3只能分配给代理1(因为它是唯一提供这两种资源的代理)。

作业4可以分配给三个代理中的任何一个,因为该作业不需要特殊的资源匹配。

请注意,Agent 3具有Apple®资源的事实并不能阻止它被分配作业。它恰好是所显示的任何作业都不需要的资源。

13.环境

GoCD中的“环境”是一种分组和隔离管道和代理的方法。环境规则是:

管道可以与最多一个环境相关联。

代理可以与多个环境关联或不与任何环境关联。

代理只能在与其关联的环境中获取属于管道的作业。

与环境关联的代理无法在与任何环境无关的管道中获取作业。

在下面表示环境的图像中,环境1由管道1,管道2,代理1,代理2和代理3组成。环境2由管道3,管道4,代理3和代理4组成。管道5,6和7和代理5不属于任何环境。

图20:环境

在如上图所示的情况下:

管道1和2中的作业只能由代理1,2和3拾取。

管道3和4中的作业只能由代理3和4获取。

管道5,6和7中的作业只能被提取代理5。


14.环境变量

环境变量经常与“环境”混淆。他们没有直接关系。在GoCD中,“环境变量”是在配置中定义的用户定义变量。这些环境变量可用于任务,就像它们在操作系统中运行时可用于进程的其他环境变量一样。

环境变量可以在多个级别定义:在环境内,管道内,阶段内和作业内。它们遵循级联系统,其中在“环境”级别定义的环境变量被管道级别定义的环境变量覆盖,等等。

在下图所示的图像中,有4个环境变量在环境级别定义,3个在管道级别定义,2个在阶段和作业级别定义。环境变量ENV_ENV在环境级别ENV_STG设置为1,在阶段级别设置为2,依此类推。

图21:环境变量

提供给此作业中每个任务的环境变量将是:

ENV_ENV => 1ENV_PIP => 2ENV_STG => 3ENV_JOB => 4MY_VAR  => 4

例如:ENV_PIP在环境级别设置(值为1)将被ENV_PIP管道级别的设置覆盖(值为2)。由于ENV_PIP未在阶段和作业级别定义,因此值ENV_PIP将为2.其他环境变量可以以相同方式进行推理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,970评论 0 13
  • 选择题部分 1.()部门负责日常监督检查工作,安全巡视的同时进行消防检查,推动消防安全制度的贯彻落实。 A: 消防...
    skystarwuwei阅读 15,020评论 0 3
  • 大概也是很长很长时间没有这样的慵懒了,有理由的慵懒。反正就是,一切都可以慢下来,让时间延长十倍的那种感觉。中午一个...
    阿树阿舒阅读 243评论 0 0
  • 极致男人初长成系列 有时候你不够有型,并不是因为你不够帅,而是因为发型不对。没有挑到适合自己的那一款。非常重要,一...
    智客_尚无极阅读 361评论 0 1