设置Jenkins作业链,所有作业都指向一个存储库,由Gerrit触发

设置Jenkins作业链,所有作业都指向一个存储库,由Gerrit触发,jenkins,jenkins-plugins,gerrit,Jenkins,Jenkins Plugins,Gerrit,我正在努力改进我的Jenkins设置,使其更易于维护和强大。我有一组依赖库。当一个开发人员提交时,我希望立即在该库和下游库上运行单元测试 构建都配置为由Jenkins触发,但监视存储库的不同子文件夹(一个job-jobA-monitors/srcA/,另一个job-monitors/srcB/etc) 每个作业编译库(c++),运行单元测试并发布覆盖率结果。 我现在所做的只是独立地管理这个特定项目中的每项工作 我想建立一个链,理想的情况下,用一些图形概述发生了什么 假设我的工作链如下: log

我正在努力改进我的Jenkins设置,使其更易于维护和强大。我有一组依赖库。当一个开发人员提交时,我希望立即在该库和下游库上运行单元测试

构建都配置为由Jenkins触发,但监视存储库的不同子文件夹(一个job-jobA-monitors/srcA/,另一个job-monitors/srcB/etc)

每个作业编译库(c++),运行单元测试并发布覆盖率结果。 我现在所做的只是独立地管理这个特定项目中的每项工作

我想建立一个链,理想的情况下,用一些图形概述发生了什么

假设我的工作链如下:

 loggingLib
    |
    V
 guiLib
    |
    V
 commonLib
   / \
  /   \
libA  libB
  \   /
   \ /
    |
    V
  libFunction
我希望对loggingLib作出承诺,以触发所有下游构建和测试,从而保证上游更改不会破坏下游Lib。但是有一些主要的提交会影响多个库(修改版本号、API更改等)。提交将(gerrit-)触发所有受影响的lib(例如,guiLib和commonLib)。在这种情况下,guiLib将链触发commonLib。我想找到一种方法,如果guiLib被触发,那么commonLib就不会被独立触发,而只能作为guiLib的子级触发。此外,如果子构建失败,父构建也应标记为失败,因为它是问题的原因

正如您在上面看到的,还有一个菱形,因此libA和libB必须在完成时触发libFunction,如果它们是触发器的“根”,但是commonLib必须同时触发libA和libB(通常用于连接插件或构建流)

使用各种插件的组合(参数化、连接、条件构建步骤),我或多或少可以得到我想要的,但它很难维护,而且我无法避免提交影响多个文件夹以生成该文件夹的多个构建(direct+作为依赖项)


非常感谢您的时间和帮助

在Gerrit trigger版本2.11.0-beta-1中,可以使用主题触发作业。也许你可以用它。