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

如何将Jenkins多流水线构建历史从旧分支迁移至新分支?

Jenkins 多流水线构建历史从旧分支迁移至新分支的解决方案

由于你的场景是同一Jenkins服务器、同一任务下的分支迁移,且依赖CurrentBuild.number生成包,直接修改Jenkins的构建元数据是最直接的方案,以下是两种可行方法:

方法一:直接修改Jenkins文件系统中的构建记录

Jenkins的构建历史存储在文件系统中,你可以直接修改相关文件来迁移分支关联:

  • 先停止Jenkins服务,防止操作过程中出现数据写入冲突
  • 定位到目标任务的存储目录:$JENKINS_HOME/jobs/<你的任务名>/builds
    • 每个编号文件夹(如1/、2/)对应一次构建,进入目标构建的文件夹,编辑build.xml:
      • 找到与分支相关的节点(比如<actions>下的hudson.plugins.git.util.BuildData),将旧分支名替换为新分支名
    • 如果任务目录下存在branches/文件夹,复制或重命名其中的旧分支文件夹为新分支名,同步内部的构建关联记录
  • 修改$JENKINS_HOME/jobs/<你的任务名>/nextBuildNumber文件,将数值设置为旧分支最后一次构建的编号+1,确保新分支构建编号延续
  • 重启Jenkins,验证新分支的构建历史是否正常显示

方法二:通过Jenkins脚本控制台批量修改

使用Groovy脚本在Jenkins脚本控制台(http://<你的Jenkins地址>/script)批量修改构建的分支关联:

// 替换为你的任务名称、旧分支名、新分支名
def jobName = "你的任务名"
def oldBranch = "旧分支名"
def newBranch = "新分支名"

def job = Jenkins.instance.getItem(jobName)
if (!job) {
    println "任务不存在"
    return
}

// 遍历所有构建,修改分支关联
job.getBuilds().each { build ->
    def buildData = build.getAction(hudson.plugins.git.util.BuildData.class)
    if (buildData != null) {
        def branches = buildData.getLastBuiltRevision().getBranches()
        branches.each { branch ->
            if (branch.getName() == oldBranch) {
                branch.setName(newBranch)
                println "修改构建 ${build.number} 的分支为 ${newBranch}"
                build.save()
            }
        }
    }
}

// 更新下一个构建编号,延续旧分支的序列
job.nextBuildNumber = job.getLastBuild().number + 1
job.save()
println "已更新下一个构建编号为 ${job.nextBuildNumber}"

注意事项

  • 操作前务必备份$JENKINS_HOME目录,避免数据损坏
  • 若使用流水线任务,需确认构建记录中与Jenkinsfile相关的分支标识也已同步修改
  • 建议先在测试环境验证方案,再应用到生产环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:55:22