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 加载的(可能是直接写在界面上的脚本)。"
}
}
}
"批量修改执行完毕,请查看下方日志确认每个 Job 的结果。"