我有三个管道项目,项目-a,项目-b和项目-c。 project-c接受一个参数。成功完成项目-a或项目-b后,我想触发带有参数的project-c的构建。
我可以在项目-a和project-b中使用此代码在管道中执行此操作:
stage('trigger-project-c') {
def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']]
}
但这需要两个执行者。我希望在使用参数运行project-c之前完全完成project-a或project-b。
答案 0 :(得分:4)
你的管道很可能是这样的:
node {
stage('build') {
// sh "make"
}
// ...
stage('trigger-project-c') {
def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']]
}
}
通过将所有内容包装在node
闭包内,下游作业project-c
将被内联触发,而不会暂停上游作业/释放执行程序。
因此,长时间没有任何作用的事情不应该包含在node
步骤中,以免阻止执行者。一个非常类似的情况是using the input
step to wait for user feedback。
相反,您的管道应该看起来像如下所示,也就是说 - 最佳实践(因为你不会阻止执行者):
stage('build') {
node {
// sh "make"
}
}
// or
node {
stage('build') {
// sh "make"
}
stage('unit') {
// sh "make"
}
} // node
// note: the following code is _not_ wrapped inside a `node` step
stage('trigger-project-c') {
def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']]
}
无需在node
中包含build
步骤,即阻止执行程序。{p>对于其他步骤(如sh
),管道执行会触发错误并提醒您无法在node
分配之外运行。
答案 1 :(得分:1)
将参数wait: false
添加到build
步骤以继续管道执行,而无需等待下游作业。
编辑:如果您不关心此管道的其他下游作业是否成功,这将有所帮助。如果你需要等到它完成然后继续自己的(上游作业)管道,那么看看我的另一个答案。