我有一个使用案例1.我想从jenkins声明性管道触发另一个生成1.然后在触发另一个作业时立即将其禁用1.然后我想等待它完成1.最后,我想再次启用它有什么聪明的办法可以做到这一点吗?我需要实现这个场景,以避免在当前构建过程中,另一个构建被安排在中间。
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的原生支持特性。
currentBuild.rawBuild.getParent().setDisabled(true)
currentBuild.rawBuild.getParent().setDisabled(false)
Disable concurrent build
您可以在管道选项中设置:
pipeline { options { disableConcurrentBuilds() } // stages and other pipeline code... }
或通过作业配置中的GUI启用。x1c 0d1x这会导致一种状态,即任何其他作业运行都将首先放入队列中,并等待前一个作业运行完成(如您所述,这将包括等待步骤#1中的嵌套触发作业(这是通过语句build 'job_name'触发另一个作业中的一个作业时的默认行为))。在这种情况下,可能需要验证另一个数据和参数(如果你真的不想触发一个同时运行另一个的构建)。但是关于管道配置,在我看来它似乎更干净,因为你不需要特殊的安全批准,也不需要使用任何类型的解决方案。
build 'job_name'
1条答案
按热度按时间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
的原生支持特性。您可以在管道选项中设置:
或通过作业配置中的GUI启用。x1c 0d1x
这会导致一种状态,即任何其他作业运行都将首先放入队列中,并等待前一个作业运行完成(如您所述,这将包括等待步骤#1中的嵌套触发作业(这是通过语句
build 'job_name'
触发另一个作业中的一个作业时的默认行为))。在这种情况下,可能需要验证另一个数据和参数(如果你真的不想触发一个同时运行另一个的构建)。但是关于管道配置,在我看来它似乎更干净,因为你不需要特殊的安全批准,也不需要使用任何类型的解决方案。