gpt4 book ai didi

jenkins - 如何在 Jenkins 成功构建后触发参数化构建?

转载 作者:行者123 更新时间:2023-12-02 10:18:49 25 4
gpt4 key购买 nike

我有三个管道项目:项目 a、项目 b 和项目 c。项目-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-c 之前完全完成project-a 或project-b。

最佳答案

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

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']]
}

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

关于jenkins - 如何在 Jenkins 成功构建后触发参数化构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com