如何在Jenkins中成功构建时触发参数化构建?

如何在Jenkins中成功构建时触发参数化构建?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有三个管道项目,项目a、项目b和项目c。project-c接受一个参数。在project-a或project-b成功完成后,我想用一个参数触发project-c的构建 我可以在project-a和project-b中使用管道中的以下代码执行此操作: stage('trigger-project-c') { def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_P

我有三个管道项目,项目a、项目b和项目c。project-c接受一个参数。在project-a或project-b成功完成后,我想用一个参数触发project-c的构建

我可以在project-a和project-b中使用管道中的以下代码执行此操作:

stage('trigger-project-c') {
    def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']]
}  

但这需要两名遗嘱执行人。我希望project-a或project-b在使用参数运行project-c之前完全完成。

将参数
wait:false
添加到步骤中,以便在不等待下游作业的情况下继续管道执行


编辑:如果您不关心此管道的其他下游作业是否成功,这将有所帮助。如果您需要等待完成,然后继续自己的(上游作业)管道,请参阅我的其他答案。

您的管道很可能如下所示:

节点{
阶段(‘构建’){
//sh“制造”
}
// ...
阶段('trigger-project-c'){
def job=build job:'project-c',参数:[$class:'StringParameterValue',名称:'MY_PARAM',值:'somevalue']
}
}
通过将所有内容包装在
节点
闭包中,将内联触发下游作业
project-c
,而不会暂停上游作业/释放执行者

因此,长时间基本上不做任何事情的事情不应该包装在
节点
步骤中,以避免阻塞执行器。一个非常相似的情况是当

相反,您的管道应该如下所示,这可以说是最佳实践(因为您不阻止您的执行人):

stage('build'){
节点{
//sh“制造”
}
}
//或
节点{
阶段(‘构建’){
//sh“制造”
}
阶段(‘单位’){
//sh“制造”
}
}//节点
//注意:以下代码没有包装在'node'步骤中
阶段('trigger-project-c'){
def job=build job:'project-c',参数:[$class:'StringParameterValue',名称:'MY_PARAM',值:'somevalue']
}

无需将该步骤包装在
节点
中,即阻止该步骤的执行器。对于其他步骤(如
sh
),管道执行将触发一个错误,并提醒您不能在
节点
分配之外运行它。

下游作业将继续执行此操作,但不会释放执行者以运行下一个项目。因此,如果我将Jenkins设置为只有一个执行器,并运行
project-a
,则作业永远不会完成,因为
project-c
需要它自己的执行器。然后,您需要更改
节点
阶段
的顺序。不要在
节点
闭包中运行
构建
,而是在flyweight执行器中运行。谢谢,这很好,我有点担心在flyweight执行器上运行项目会破坏最佳实践。你知道没有flyweight executor的情况下实现这一点的另一种方法吗?我想我真的在寻找像参数化触发器插件这样的东西——到目前为止我尝试过的那些插件都不起作用。相反;-)看看我的另一个答案。谢谢你的解释,现在有意义了!