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

多仓库场景下如何获取Jenkins多分支流水线的上一次构建revision?

多仓库克隆场景下Jenkins获取上一次构建revision的解决方法

currentBuild.changeSets默认仅记录流水线主仓库的提交变更,多仓库同时克隆的场景下,额外仓库的变更不会同步到该集合中,因此无法直接通过该方法拿到所有仓库的历史revision,可按以下方案实现:

  • 构建阶段持久化存储所有仓库的revision
    每次执行checkout操作时捕获返回值,其中自带对应仓库的commit信息,将所有仓库的标识和revision整理为映射关系后归档为构建产物,示例代码如下:

    // 定义存储所有仓库revision的映射
    def repoRevisions = [:]
    
    // 克隆第一个仓库
    def checkoutRepo1 = checkout scm: [
      $class: 'GitSCM', 
      branches: [[name: '*/${BRANCH_NAME}']], 
      userRemoteConfigs: [[url: 'https://xxx/repo1.git']]
    ]
    repoRevisions['repo1'] = checkoutRepo1.GIT_COMMIT
    
    // 克隆其余仓库,重复上述逻辑填充repoRevisions
    def checkoutRepo2 = checkout scm: [
      $class: 'GitSCM', 
      branches: [[name: '*/${BRANCH_NAME}']], 
      userRemoteConfigs: [[url: 'https://xxx/repo2.git']]
    ]
    repoRevisions['repo2'] = checkoutRepo2.GIT_COMMIT
    
    // 写入文件后归档,避免构建重启后数据丢失
    writeFile file: 'build-revisions.json', text: new groovy.json.JsonBuilder(repoRevisions).toPrettyString()
    archiveArtifacts artifacts: 'build-revisions.json', fingerprint: true, allowEmptyArchive: false
    
  • 新构建启动时读取上一次成功构建的归档数据
    直接从对应任务的历史成功构建中拉取归档的revision文件,解析后即可拿到所有仓库的上一次构建版本,示例代码如下:

    def lastRevisions = [:]
    def lastSuccessBuild = Jenkins.instance.getItemByFullName(env.JOB_NAME).getLastSuccessfulBuild()
    if (lastSuccessBuild) {
      def revisionFile = lastSuccessBuild.artifactManager.root().child('build-revisions.json')
      if (revisionFile.exists()) {
        lastRevisions = new groovy.json.JsonSlurper().parseText(revisionFile.open().text)
      }
    }
    // lastRevisions中存储的就是上一次构建所有仓库的revision信息
    
  • 补充方案:直接遍历构建的GitSCM动作记录
    如果不想额外归档文件,也可以直接从构建的内置动作中遍历所有Git仓库的提交记录,适配Bitbucket多分支插件的自动 checkout 场景:

    def allRepoCommits = currentBuild.rawBuild.getActions(hudson.plugins.git.GitSCMAction.class).collectEntries { action ->
      [(action.remoteUrl): action.commitId]
    }
    

    注意该方法需要在脚本安全配置中放开对应类的访问权限,推荐封装到受信任的Jenkins共享库中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:36:05