GoCD扇入依赖管理

GoCD支持处于自动触发的管道的扇入依赖性解析。扇入材料分辨率将确保仅当所有上游管线触发相同版本的祖先管线或材料时才触发管线。 如果在独立的管道中构建多个组件,这些组件都具有相同的祖先,并且您希望下游管道都使用来自祖先管道的相同版本的工件,则会出现这种情况。

当你有非平凡的管道依赖关系图,管道执行时间和自动构建/部署的显着差异时,你通常会遇到以下问题

  • 浪费的构建(Wasted builds):由于其中一个依赖管道比其他管道更快,所以没有正确版本的依赖组件。
  • 结果不一致(Inconsistent results) :依赖于多个组件的部署可能具有不兼容的组件版本,因为这些组件的构建时间不同
  • 错误的反馈(Incorrect feedback) :只有当它成功通过UAT,Staging和Pre-Prod环境后,才会对Production进行部署,但只要UAT变绿,它就会提前触发。
  • 错误测试运行代码(Running code with the wrong tests) :您对SCM的提交包含为代码编写的代码和测试。 你的管道是建模的,你的接受或测试管道在生成管道后运行。验收必须通过正确的代码测试来运行,但只要提交经历了先前可用的测试版本,就会触发。

GoCD有助于解决所有上述问题。

如何使用扇入:

  • 在整个过程中使用SCM材料的情况下,您需要为整个材料定义相同的URL。 这将让GoCD知道它是一个共享资料,GoCD将在适用的情况下执行粉丝入场。 例如:代码,测试,环境配置分别位于http://svn.company.com/code,http://svn.company.com/tests和http://svn.company.com/config。 在这种情况下,确保需要这些材料的管道,url被设置为相同的值。 例如,管道构建,验收和部署具有材料网址http://svn.company.com
  • 需要扇入相关性解析的流水线需要将触发类型设置为auto

用于扇入分辨率的示例用例

创建一个生产大门

我想要将构建并行推进到多个环境中(手动QA,用于业务签署和性能测试的UAT),以便所有这些活动同时发生。 所以我们有一个管道依赖模型,如下所示

对于下一步,在部署到生产环境时,我们有一条依赖于上述所有管道的管道,以便在所有3个环境中成功完成的构建自动生成。 如下所示。

事件的顺序和解决方案

  • 生成一个新的版本。
  • 构建被推送到QA,UAT和性能管道。
  • 无论在每条管道中花费多少时间,GoCD都将确保只有在所有三条管道都采用相同版本的构建时才会触发生产。 生产将使用您的构建工件的正确版本。

如何配置:

  • 生产应具有触发类型为自动。
  • QA,UAT和Performance应该有Build作为材料。 这些管道的触发类型可以是手动或自动。

选择相关组件的正确版本

我有三个组件管道(C1,C2,C3)和一个包管道,用于获取它们的工件并创建一个部署包。部件C2和C3取决于管道C1并将其作为材料。 C2的管道建立得很快,但C3需要一段时间。 所以我们有一个管道依赖模型,如下所示

一旦C2完成,包管道不应该触发。 只有当C2和C3都变为绿色时,它才会触发。 另外Package应该使用C2和C3使用的相同版本的C1。

事件的顺序和解决方案

  • C1在更改时触发。
  • C2成功后C2和C3被触发。 C2建立得很快,但C3仍在进行中。 Go决定C3和C2取决于共同的祖先C1。 因此GoCD将等待C3完成。
  • 如果C3变为绿色,Package管道将触发。 它将使用C1,C2和C3的正确版本。

如何配置:

  • 添加C1作为管道C2和C3的材料
  • 添加C2和C3作为管道包装的材料。
  • 软件包的触发类型应为auto

使用正确版本的测试测试源代码

您签入代码并作为相同提交的一部分进行测试。 构建管道编译代码并创建工件。 Acceptance管道获取构建工件并运行为编译代码编写的测试。 验收必须使用与代码一起提交的相同测试。 所以我们有一个管道依赖模型,如下所示

事件的顺序和解决方案

  • 在提交更改后,Build流水线将触发最新版本。
  • 虽然Acceptance也具有相同的材料依赖性,但GoCD不会立即触发它。
  • 构建管道成功执行。
  • 接受现在将触发相同版本的SCM,并从Build流水线获取正确的构建工件。

如何配置:

  • 将相同的SCM材料添加到管道构建和验收即相同的URL。
  • 管道构建和接受的触发类型为auto。

限制

  • 扇入和黑名单:如果引入扇入的管道在其材料定义中有黑名单,则目标管道不符合扇入行为。

    例如,请参阅上面的场景。 P1和P2是两个管道,它们使用相同的mercurial(hg)存储库,两个文件夹表示“p1”和“p2”。 P1在黑名单中配置有“p2”文件夹。 同样,P2在黑名单中配置有“p1”文件夹。

    当“p1”文件夹中发生检入时,会发生P1的第一次运行。 当有“p2”登记时,P2的第一次运行发生。

    在这种情况下,取决于P1和P2的P3不会触发。

注意

  • 作为功能的扇入默认情况下处于启用状态。 如果您需要使用管道来触发每个版本,而不考虑祖先版本,则可以禁用扇入。 要禁用扇入功能,您需要添加一个系统属性并重新启动GoCD服务器。 在Linux上,将以下行添加到/etc/default/go-server

    export GO_SERVER_SYSTEM_PROPERTIES='-Dresolve.fanin.revisions=N'
    

    在windows上,在GoCD服务器安装的config文件夹中,编辑wrapper-server.conf文件,并添加一个附加属性和值 '-Dresolve.fanin.revisions=N'. 例如:

    wrapper.java.additional.17='-Dresolve.fanin.revisions=N'
    
  • GoCD将对仅具有自动触发类型的管道应用扇入相关性解决方案。

results matching ""

    No results matching ""