好用!   修改def jobPrefix = "budget-dt-" def newBranch = "*/dt-test" 这两个为实际的就可以了

import jenkins.model.*
import hudson.model.*
import hudson.plugins.git.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition

// 1. 设置匹配前缀和新分支
def jobPrefix = "budget-dt-"
def newBranch = "*/dt-test"

// 2. 遍历所有流水线 Job (WorkflowJob)
Jenkins.instance.getAllItems(WorkflowJob.class).each { job ->
    // 检查名字是否以 budget-dt- 开头
    if (job.name.startsWith(jobPrefix)) {
        println "--- 正在处理: ${job.name} ---"
        
        def definition = job.getDefinition()
        // 确保它是从 Git/SCM 获取脚本的流水线
        if (definition instanceof CpsScmFlowDefinition) {
            def scm = definition.getScm()
            if (scm instanceof GitSCM) {
                // 构建包含新分支的 SCM 配置
                def newScm = new GitSCM(
                    scm.getUserRemoteConfigs(),
                    [new BranchSpec(newBranch)],
                    scm.isDoGenerateSubmoduleConfigurations(),
                    scm.getSubmoduleCfg(),
                    scm.getBrowser(),
                    scm.getGitTool(),
                    scm.getExtensions()
                )
                
                // 将新配置应用回 Job 并保存
                job.setDefinition(new CpsScmFlowDefinition(newScm, definition.getScriptPath()))
                job.save()
                println "✅ 已成功更新分支为: ${newBranch}"
            } else {
                println "⚠️ 跳过: 该流水线不使用 Git 源码管理。"
            }
        } else {
            println "⚠️ 跳过: 该流水线不是通过 SCM 加载的(可能是直接写在界面上的脚本)。"
        }
    }
}

println "批量修改执行完毕,请查看上方日志确认每个 Job 的结果。"

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐