You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins声明式流水线中触发并禁用其他构建,等待完成后再启用?

Jenkins声明式流水线实现触发任务并临时禁用的方案

以下是直接可行的实现方案,核心利用Jenkins Pipeline内置方法与Jenkins实例API完成流程,确保目标任务在当前流水线执行期间不会被其他调度触发:

pipeline {
    agent any
    stages {
        stage('触发并禁用目标任务') {
            steps {
                script {
                    // 异步触发目标任务,不立即等待完成
                    def targetBuild = build(job: '你的目标任务名', wait: false)
                    
                    // 立即禁用目标任务,阻止后续调度
                    def targetJob = Jenkins.instance.getItemByFullName('你的目标任务名')
                    targetJob.disable()
                    echo "已禁用目标任务:${targetJob.name}"

                    // 等待目标构建启动并执行完成
                    targetBuild.waitForStart()
                    targetBuild.waitForCompletion()
                    echo "目标任务构建#${targetBuild.number}已执行完成"
                }
            }
        }
    }
    post {
        always {
            script {
                // 无论流水线执行结果如何,最终都重新启用目标任务
                def targetJob = Jenkins.instance.getItemByFullName('你的目标任务名')
                targetJob.enable()
                echo "已重新启用目标任务:${targetJob.name}"
            }
        }
    }
}

关键细节说明:

  • 异步触发+手动等待:用wait: false异步触发任务,避免流水线阻塞在触发步骤,同时拿到构建对象targetBuild,后续通过waitForStart()和waitForCompletion()精准控制等待逻辑
  • 任务禁用/启用:通过Jenkins.instance.getItemByFullName()获取任务实例,调用disable()/enable()完成状态切换,需确保执行流水线的账号拥有目标任务的Configure权限
  • 容错处理:将启用任务放在post的always块中,避免因流水线异常失败导致目标任务一直处于禁用状态
  • 路径适配:如果目标任务在Jenkins文件夹中,需填写完整路径,例如FolderName/你的目标任务名

额外适配方案:

若你的Jenkins环境禁用了直接调用Jenkins实例API的权限,可以改用disableJob和enableJob步骤(需安装Pipeline Utility Steps插件),替换代码中的禁用/启用逻辑为:

disableJob(job: '你的目标任务名')
// ...
enableJob(job: '你的目标任务名')

内容的提问来源于stack exchange,提问作者Roshan007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:45:41