Jenkins - 跳过构建管道中的上游项目

时间:2013-07-28 03:26:33

标签: jenkins build-pipeline

我正在尝试建立一个复杂的构建管道,依赖关系图如下所示。

      Prj-A
        |
      Prj-B
  /     |    \ 
Prj-C Prj-D Prj-E
 |      |     |
 |      |     |
 |      |     |
 --------------
        |
      Prj-F

管道以Prj-A开头,然后是Prj-B。 Prj-C D E可以并行运行。当Prj-C,D,E全部完成时,运行Prj-F。

其中一个要求是,例如,因为Prj-C依赖于Prj-A和Prj-B,我想只运行Prj-C然后运行Prj-G,如果只有Prj-C中的源代码是改变。这是为了避免构建其他作业以节省整个构建时间。

经过大量的googleing,我没有发现任何解决方案可用于此类案例。所以我的解决方案(我不尝试)是:

  1. 为每个项目创建一个触发器作业,仅检查该项目的源代码是否已更改,因此我们将有7个触发器作业。
  2. 为管道创建依赖项解析程序作业。
  3. 当任何触发器作业检测到更改时,它会触发依赖项解析程序作业。依赖项解析程序作业将知道哪个项目已更改,并确定可以在此构建中跳过项目,并设置相应的环境变量。例如,当Prj-C改变时,它设置skip-proja = true,skip-projb = true,skip-projd = true,skip proj-e = true。之后,它会触发构建管道。
  4. 当每个项目运行时,它会根据依赖项解析程序作业设置的环境变量检查它是否可以跳过。
  5. 希望我已经让自己明白了,如果有其他解决方案或您对我的解决方案的评论,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

您的解决方案似乎可行但理想情况下,您希望proj-f仅使用从B的相同版本(构建计数器)传递的C,D和E组合来触发。

对于这种复杂的设置,最好使用像Go这样的工具(我在那里工作),这些工具是在考虑这些情况的基础上构建的。除非你有一个了解扇入的工具,否则你有一个可以引起虚假构建的扇入场景。

http://support.thoughtworks.com/entries/22229668-Go-s-Dependency-Management

http://www.thoughtworks-studios.com/go-continuous-delivery/compare