我有3个下游构建任务,它们在成功构建1个上游任务“项目U”时触发。示例:
triggers {
pollSCM('H/5 * * * *')
upstream(upstreamProjects: 'Project U', threshold: hudson.model.Result.SUCCESS)
}
这按预期工作,但是,如果代码更改同时提交到所有部分,则上游和下游构建将同时开始构建。
我希望避免这种情况,因为下游构建将运行两次,而第一次运行是非常无用的,因为上游提交还没有构建。所以我希望配置下游作业,以阻止它们的构建,而上游作业正在构建。
我知道如何在用户界面中的Jenkins Freestyle作业中执行此操作(另请参见this answer):
但我找不到如何在Jenkins声明管道中执行此操作?
1条答案
按热度按时间ve7v8dk21#
此方法的工作原理如下:
当这个下游作业启动时,它将检查上游作业是处于活动状态还是在排队,如果是,它将等待直到它的构建完成。
我还不能找到如何以编程方式访问当前作业的上游作业,因此需要复制作业名称。(有一个方法getBuildingUpstream(),它会方便得多,但我还没有找到从Job示例获取当前Project对象的方法。)
我最终在Jenkins共享库中创建了这个函数:
好处是我可以直接从上游触发器复制参数,因为它使用完全相同的格式。下面是一个例子,它看起来像什么: