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.其他环境变量可以以相同方式进行推理

你可能感兴趣的:(gocd 开源的持续集成和持续交付系统 相关概念了解)