Jenkins - 下游提交触发上游作业

时间:2016-05-11 12:37:27

标签: jenkins version-control continuous-integration

我需要一种解决方案,提供一种方法,如果存储库触发下游作业发生更改(新提交),则触发上游作业。

让我们想象一下:有4个工作:A,B,C,D。

B,C,D通过提交到(个别)存储库(单独)触发(通过民意调查SCM触发)

现在我希望工作A能够触发所有工作:B,C,D。

但我希望工作A只有在B或C或D有新提交时触发B,C和D.

我怎样才能做到这一点?我想保留B,C和D工作。

3 个答案:

答案 0 :(得分:0)

您必须为B,C和D存储库设置作业A以轮询SCM。然后使用构建触发器设置作业B,C和D,以在构建作业A之后构建。您可能希望从作业B,C和D中删除自动轮询,否则A和相应的B,C,D作业都将触发,您将获得重复运行。

但是,上述解决方案总是会在对三个存储库中的任何存储库进行提交时触发作业B,C和D.如果您只想启动提交作业的相应作业,则必须在作业A中添加一些其他逻辑以检测要启动的作业。在这种情况下,您不希望在作业A之后的作业B,C,D中添加触发器。相反,在作业A中,您可能希望添加构建后操作以基于特定条件构建其他项目(可能使用Conditional BuildStep plugin)。需要使用其他一些编程构建步骤(groovy代码,shell脚本等)来设置条件。

答案 1 :(得分:0)

要解决您的问题,您可以使用Multiple SCMs Plugin

它将允许作业A使用多个SCM源:

  • 回购B
  • 回购C
  • Repo D

接下来,您只需在作业A上设置一个cron表达式来汇集这些存储库。

答案 2 :(得分:0)

Multijob Plugin在主要工作上有一个选项来轮询SCM的子作业。

Multi job polling

如果您将A作业作为多作业,则可以启用此设置,然后将作业B,C和D添加为要按顺序或并行执行的作业的阶段。如果您的SCM没有变化,您甚至可以告诉它不要构建B,C或D,如果您愿意的话。

您仍然可以添加正常构建步骤,因此可以在启动B,C和D阶段之前执行作业A中的原始步骤。

重要的是要注意,使用Multijob插件需要在其子作业运行时执行主作业。这意味着系统上至少需要2个执行程序。