如何在 Jenkins 中成功构建时触发参数化构建?
How to trigger parameterized build on successful build in Jenkins?
我有三个管道项目,project-a、project-b 和 project-c。 project-c 接受一个参数。成功完成项目-a 或项目-b 后,我想触发带有参数的项目-c 的构建。
我可以在项目-a 和项目-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
添加到build
步骤以继续管道执行而不等待下游作业。
编辑:如果您不关心此管道的其他下游作业是否成功,这会有所帮助。如果您需要等到它完成然后继续自己的(上游作业的)管道,然后查看我的其他答案。
您的管道很可能如下所示:
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
步骤中,以免阻塞执行程序。一个非常相似的情况是 .
相反,您的管道应该看起来像如下,这可以说是最佳实践(因为你不会阻止你的执行者):
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']]
}
无需将 build
步骤包装在 node
中,即,为其阻止执行程序。对于其他步骤(如 sh
),管道执行会触发错误并提醒您它不能 运行 在 node
分配之外。
我有三个管道项目,project-a、project-b 和 project-c。 project-c 接受一个参数。成功完成项目-a 或项目-b 后,我想触发带有参数的项目-c 的构建。
我可以在项目-a 和项目-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
添加到build
步骤以继续管道执行而不等待下游作业。
编辑:如果您不关心此管道的其他下游作业是否成功,这会有所帮助。如果您需要等到它完成然后继续自己的(上游作业的)管道,然后查看我的其他答案。
您的管道很可能如下所示:
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
步骤中,以免阻塞执行程序。一个非常相似的情况是
相反,您的管道应该看起来像如下,这可以说是最佳实践(因为你不会阻止你的执行者):
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']]
}
无需将 build
步骤包装在 node
中,即,为其阻止执行程序。对于其他步骤(如 sh
),管道执行会触发错误并提醒您它不能 运行 在 node
分配之外。