首页 > 解决方案 > 如何获得詹金斯多分支管道最后一次构建版本?

问题描述

我有詹金斯管道,也使用詹金斯的共享库。在使用 bitbucket 插件执行构建时,在我的多分支管道中进行三到四个 repo 克隆。

我的问题是如何从以前的版本中获取最后的版本版本。

我已经尝试过currentBuild.changeSets方法,但是对于多个存储库克隆,它失败了。

标签: jenkinsjenkins-pipelinejenkins-pluginsjenkins-groovyjenkins-job-dsl

解决方案


我也必须从以前的版本中获得 SCM 修订版。我没有找到任何 API 可以很好地得到它,所以我实现了一个解决方法。这不是很好,但至少它有效;-)

当您通过使用保存环境变量时,env.setProperty(name, value)它将作为构建变量保存在构建元数据中。您可以随时阅读。

pipeline {
  agent any
  stages {
    stage('Test') {
      script {
        env.setProperty('MY_ENV', env.BUILD_NUMBER)
        def previousBuild = currentBuild.previousBuild
        if (previousBuild != null) {
          echo previousBuild.buildVariables['MY_ENV'] // prints env.BUILD_NUMBER - 1
        }
      }
    }
  }
}

在您的情况下,您有 4 个结帐。我不知道你是如何关闭源的,所以让我们假设你有一个cloneRepo方法并且它设置了GIT_COMMIT环境变量。您可以使用它们:

def previousBuild = currentBuild.previousBuild
if (previousBuild != null) {
  echo previousBuild.buildVariables['GIT_COMMIT_REPO_1']
  echo previousBuild.buildVariables['GIT_COMMIT_REPO_2']
  echo previousBuild.buildVariables['GIT_COMMIT_REPO_3']
  echo previousBuild.buildVariables['GIT_COMMIT_REPO_4']
}

cloneRepo(repo1)
env.setProperty('GIT_COMMIT_REPO_1', env.GIT_COMMIT)
cloneRepo(repo2)
env.setProperty('GIT_COMMIT_REPO_2', env.GIT_COMMIT)
cloneRepo(repo3)
env.setProperty('GIT_COMMIT_REPO_3', env.GIT_COMMIT)
cloneRepo(repo4)
env.setProperty('GIT_COMMIT_REPO_4', env.GIT_COMMIT)

如果您使用该checkout步骤,那么您可以执行以下操作:

def commitId = checkout(scm).find { it.key == 'GIT_COMMIT' }
env.setProperty('GIT_COMMIT_REPO_1', commitId)

推荐阅读