Jenkins声明性管道触发另一个构建,禁用它并等待它完成

n8ghc7c1  于 2023-01-08  发布在  Jenkins
关注(0)|答案(1)|浏览(148)

我有一个使用案例
1.我想从jenkins声明性管道触发另一个生成
1.然后在触发另一个作业时立即将其禁用
1.然后我想等待它完成
1.最后,我想再次启用它
有什么聪明的办法可以做到这一点吗?
我需要实现这个场景,以避免在当前构建过程中,另一个构建被安排在中间。

ql3eal8s

ql3eal8s1#

**回答您的问题:**您可以通过在声明性管道currentBuild.rawBuild.getParent().setDisabled(true)currentBuild.rawBuild.getParent().setDisabled(false)中使用脚本化语法来实现这一点。Jenkins Pipeline: how can I disable the current job from inside a pipeline?将代码的re-enable部分放在下面、后台或您需要的任何特定位置。
**备选方案:**如果您主要是在寻找“禁用构建队列”-请看这个答案,它提供了一个Disable scheduling another build if previous one is running in Jenkins的解决方案(因为没有本地方法来禁用队列作业构建,afaik)。
**另一种可能的解决方案?**但是如果您主要对禁用作业并发感兴趣,并且不介意队列中有即将到来的作业,我建议使用Jenkins中名为Disable concurrent build的原生支持特性。

您可以在管道选项中设置:

pipeline {
    options {
        disableConcurrentBuilds()
    }
    // stages and other pipeline code...
}

或通过作业配置中的GUI启用。x1c 0d1x
这会导致一种状态,即任何其他作业运行都将首先放入队列中,并等待前一个作业运行完成(如您所述,这将包括等待步骤#1中的嵌套触发作业(这是通过语句build 'job_name'触发另一个作业中的一个作业时的默认行为))。
在这种情况下,可能需要验证另一个数据和参数(如果你真的不想触发一个同时运行另一个的构建)。但是关于管道配置,在我看来它似乎更干净,因为你不需要特殊的安全批准,也不需要使用任何类型的解决方案。

相关问题