【问题标题】:How to get jenkins multibranch pipeline last build revision?如何获得詹金斯多分支管道最后一次构建版本?
【发布时间】:2021-11-14 17:47:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-job-dsl


    【解决方案1】:

    我也必须从以前的版本中获得 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多