【发布时间】:2023-01-07 00:07:50
【问题描述】:
我有一个用例,其中
- 我想从 jenkins 声明式管道触发另一个构建
- 然后一旦另一个作业被触发我想禁用它
- 然后我想等它完成
- 最后我想再次启用它
有什么聪明的方法可以实现这一目标吗?
我需要实现这种情况,以避免在当前构建过程中安排另一个构建。
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-declarative-pipeline
我有一个用例,其中
有什么聪明的方法可以实现这一目标吗?
我需要实现这种情况,以避免在当前构建过程中安排另一个构建。
【问题讨论】:
标签: jenkins jenkins-pipeline jenkins-declarative-pipeline
回答你的问题:您可以通过在声明性管道 currentBuild.rawBuild.getParent().setDisabled(true) 和 currentBuild.rawBuild.getParent().setDisabled(false) 中使用脚本语法来做到这一点。如此处所述:Jenkins Pipeline: how can I disable the current job from inside a pipeline?
将代码的重新启用部分放在后面的后期阶段或您需要的任何特定位置。
选择:如果您主要是在寻找“禁用构建队列”——请查看此答案,它提供了一种解决方法Disable scheduling another build if previous one is running in Jenkins(因为没有禁用队列作业构建的本机方法,afaik)。
另一种可能的解决方案?但是,如果您主要对禁用作业并发感兴趣并且不介意队列中有即将到来的作业,我建议使用 Jenkins 中本地支持的名为Disable concurrent build 的功能。
您可以在管道选项中设置:
pipeline {
options {
disableConcurrentBuilds()
}
// stages and other pipeline code...
}
这导致任何其他作业运行将首先放入队列并等待前一个完成的状态(并且正如您所描述的那样,这将包括等待步骤#1中的嵌套触发作业(这是默认行为通过语句 build 'job_name') 触发另一个作业中的一个作业)。
在这种情况下,可能需要另一个数据、参数验证(如果您实际上不想触发另一个运行时同时出现的构建)。但是关于管道配置,在我看来它似乎更干净,因为您不需要特殊的安全批准,也不使用任何类型的解决方法。
【讨论】: