如何在Jenkins中创建新MBP后自动禁用旧的Multibranch Pipeline
Jenkins Seed Job 生成新MBP后自动禁用旧MBP实现方案
可实现性说明
完全可以实现,以下是两种生产环境常用的落地方案:
方案1:Job DSL 脚本内置逻辑
直接在你用于生成MBP的Groovy脚本末尾添加旧MBP禁用逻辑,新MBP生成完成后自动执行:
// 替换为你实际的新MBP名称、旧MBP匹配规则 def newMbpName = "new-project-mbp" // 可按旧项目名、旧GitLab仓库地址等规则匹配旧MBP,无需硬编码也可实现 def oldMbp = Jenkins.instance.getItemByFullName("legacy-project-mbp") // 校验旧MBP存在且为多分支项目类型,且未被禁用 if (oldMbp && oldMbp.class.name.contains("MultiBranchProject") && !oldMbp.isDisabled()) { oldMbp.setDisabled(true) oldMbp.save() println "自动禁用旧MBP成功:${oldMbp.fullName}" }
注意事项:
- 需要给Seed Job的运行用户授予Jenkins任务配置修改权限
- 需要在Seed Job的安全配置中放开
允许脚本调用Jenkins内部API的权限限制
方案2:Seed Job 后置执行步骤
给Seed Job添加构建后操作,确认新MBP生成成功后再执行禁用逻辑:
- 进入Seed Job配置页,新增
构建后操作→Execute system Groovy script - 填入匹配旧MBP的执行脚本,示例如下:
def jenkins = Jenkins.instance // 可自定义匹配规则,比如遍历所有MBP过滤关联旧GitLab地址的项目批量处理 def legacyMbpList = ["legacy-project-1-mbp", "legacy-project-2-mbp"] legacyMbpList.each { mbpName -> def mbp = jenkins.getItemByFullName(mbpName) if (mbp && mbp instanceof com.cloudbees.hudson.plugins.folder.AbstractFolder && !mbp.isDisabled()) { mbp.setDisabled(true) mbp.save() println "已禁用旧MBP:${mbpName}" } } jenkins.save()
优化建议
- 可添加前置校验逻辑,确认新MBP已成功创建、首次分支扫描正常完成后再执行禁用操作,避免新MBP生成异常导致业务中断
- 禁用完成后可添加内部IM通知逻辑,同步给项目相关人员旧MBP下线状态
内容的提问来源于stack exchange,提问作者Hema B
相关产品推荐
相关产品推荐

