如何在Jenkins中成功构建时触发参数化构建?
我有三个管道项目,项目a、项目b和项目c。project-c接受一个参数。在project-a或project-b成功完成后,我想用一个参数触发project-c的构建 我可以在project-a和project-b中使用管道中的以下代码执行此操作:如何在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
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的情况下实现这一点的另一种方法吗?我想我真的在寻找像参数化触发器插件这样的东西——到目前为止我尝试过的那些插件都不起作用。相反;-)看看我的另一个答案。谢谢你的解释,现在有意义了!