如何配置Jenkins Job失败时暂停构建队列 修复后恢复且不影响其他任务
Jenkins单Job失败暂停队列、串行执行实现方案
所有配置仅作用于TriggerIngestion单Job,不会改动全局配置、不影响实例上其他Job运行,完全满足顺序执行、失败暂停、恢复后从队首续跑的要求,具体配置步骤如下:
1 配置单Job串行执行基础规则
进入TriggerIngestion的Job配置页,在General板块勾选禁止并发构建,配置后该Job同一时间只会运行1个构建实例,所有远程触发的请求会按照触发先后顺序进入该Job专属的等待队列,不会出现乱序执行的情况。该配置为Job级独立配置,不会影响其他Job的并发调度规则。
注意:不要配置全局构建阻塞规则,全局规则会作用于所有Job,不符合隔离要求。
2 配置构建失败自动暂停单Job调度
根据你的Job类型选择对应配置即可,核心逻辑是失败后仅禁用当前Job,不触发全局暂停:
如果你用的是自由风格(Freestyle)Job
- 如果没装Groovy Postbuild插件,先在插件管理中安装该插件,插件安装不会默认改动任何Job的配置。
- 在Job配置页的「构建后操作」中新增Groovy Postbuild步骤,填入以下脚本:
// 判定本次构建为失败/异常状态时触发 if (manager.build.result.isWorseOrEqualTo(hudson.model.Result.FAILURE)) { // 仅禁用当前TriggerIngestion Job,其他Job完全不受影响 manager.project.makeDisabled(true) manager.addWarningBadge("构建失败,已暂停当前Job队列调度,排查故障后手动启用即可恢复") }
如果你用的是Pipeline类型Job
直接在Pipeline定义中加入串行约束和失败处理逻辑即可,示例代码如下:
pipeline { agent any options { // 单Job串行,禁止并发,仅作用于当前Job disableConcurrentBuilds() } stages { // 原有触发Postgres数据摄入的业务逻辑放在对应stage中 stage('Run Ingestion Trigger') { steps { echo 'Put your original ingestion trigger logic here' } } } post { failure { script { // 失败后仅禁用当前Job,不影响全局 currentBuild.rawBuild.project.disabled = true echo "本次构建失败,已暂停Job调度,所有排队请求保留,修复后启用即可从队首按顺序执行" } } } }
3 故障恢复操作
当Job因为构建失败自动禁用后,队列中已有的等待请求、后续新进来的远程触发请求都不会被丢弃,会一直保留在队列中。等你排查完故障、修复问题后,只需要进入TriggerIngestion的Job页面点击「启用」按钮,队列中的任务就会严格按照入队的先后顺序,从队首第一个开始依次串行执行,不会乱序、不会丢任务。
关键注意点
- 绝对不要使用Jenkins全局的「静默模式」「准备关机」「暂停所有构建」类功能,这类功能是全局生效的,会阻断实例上所有Job的调度,不符合要求。
- 单Job禁用状态只会阻断该Job的构建调度,不会清空该Job的队列,也不会对其他Job的运行、队列、触发逻辑产生任何影响。
- 不要使用全局资源锁来做串行约束,全局锁如果配置不当可能被其他Job误用,用Job自带的禁止并发配置是最轻量、隔离性最好的方案。
内容的提问来源于stack exchange,提问作者somya
相关产品推荐
相关产品推荐

