【问题标题】:How to retrieve build_id of latest successful build in Jenkins?如何在 Jenkins 中检索最新成功构建的 build_id?
【发布时间】:2015-10-09 02:38:03
【问题描述】:

一般来说,要获得最新成功构建的工件,我会在以下 URL 上创建 wget

http://jenkins.com/job/job_name/lastSuccessfulBuild/artifact/artifact1/jenkins.txt

有没有办法,我可以在lastSuccessfulBuild 上做一个wget 并得到一个build_id,如下所示?

build_id=`wget http://jenkins.p2pcredit.local/job/job_name/lastSuccessfulBuild`

【问题讨论】:

标签: maven jenkins build


【解决方案1】:

是的,有一种方法,而且非常简单:

$ build_id=`wget -qO- jenkins_url/job/job_name/lastSuccessfulBuild/buildNumber`
$ echo $build_id
131 # that's my build number

【讨论】:

  • 它是如何通过 https 工作的?它不断给我Unable to establish SSL connection
  • 最简单的方法应该是将--no-check-certificate参数添加到wget。看看HTTPS (SSL/TLS) Options
  • 小心这个答案。如果您特别想要 BUILD_ID 的值,尤其是在使用允许您自定义构建 ID 的插件时,这将不起作用,也不会将 buildNumber 换成 buildID
  • 是否有网址:获取最新版本并在浏览器中打开?
【解决方案2】:

我认为最好的解决方案是使用零依赖的 groovy。

node {
    script{
        def lastSuccessfulBuildID = 0
        def build = currentBuild.previousBuild
        while (build != null) {
            if (build.result == "SUCCESS")
            {
                lastSuccessfulBuildID = build.id as Integer
                break
            }
            build = build.previousBuild
        }
        println lastSuccessfulBuildID
    }
}

您不需要指定 jenkins_url 或 job_name 等来获取最后成功的构建 ID。 然后,您可以在存储库中的所有 Jenkinsfile 中轻松使用它,而无需进行无用的配置。

在 Jenkins v2.164.2 上测试

【讨论】:

  • 没有jenkins文件可以吗?它在“dsl 脚本”中运行良好,但我在工作中使用 Groovy 脚本尝试它。它不起作用(import jenkins.model.JenkinsExecute Groovy script 步骤中)。我知道这是非常基本的,但我迷路了。也许指定类路径?
  • 我用this reference回答自己
  • 这仅在您想要最新版本的工作时才有用。如果您需要另一个项目的最新成功版本,这将不起作用。
【解决方案3】:

我发现在 Jenkins 工作区中查询永久链接文件非常有用。

这使您不仅可以获取最后一个成功的构建,还可以获取 Jenkins 认为相关的其他构建。

您可以在 Execute Shell 面板的 Build 部分添加这一行的内容:

cat ../../jobs/$JOB_NAME/builds/permalinks

以我为例:

+ cat ../../jobs/$JOB_NAME/builds/permalinks
lastCompletedBuild 56
lastFailedBuild 56
lastStableBuild 51
lastSuccessfulBuild 51
lastUnstableBuild -1
lastUnsuccessfulBuild 56

从那里,您可能想要解析最后一次成功构建的编号,或永久链接提供的任何其他编号,您可以运行此操作:

lastSuccesfulBuildId=$(cat ../../jobs/$JOB_NAME/builds/permalinks | grep lastSuccessfulBuild | sed 's/lastSuccessfulBuild //')

【讨论】:

    【解决方案4】:

    如果您想要最后一个成功作业的 DisplayName 而不是内部版本号:

    curl --user <username>:<tokenOrPassword> https://<url>/job/<job-name>/lastSuccessfulBuild/api/json | jq -r '.displayName'
    

    或者在 groovy 中

    def buildName = Jenkins.instance.getItem('jobName').lastSuccessfulBuild.displayName
    

    【讨论】:

      【解决方案5】:

      使用 curl 获取最后一个成功的内部版本号:

      curl --user 用户名:密码https://url/job/jobName/api/xml?xpath=/*/lastStableBuild/number

      【讨论】:

      • 您也可以传递token 代替密码,上面的 curl 请求将用于检索最后一个稳定的内部版本号(不是内部版本名称)。在詹金斯 2.190.2 上测试
      【解决方案6】:

      要获得作业内部版本号,只需执行以下操作:

      def build_Number = Jenkins.instance.getItem('JobName').lastSuccessfulBuild.number

      【讨论】:

        【解决方案7】:

        流水线脚本解决方案:

        import groovy.json.JsonSlurper           
        def jResponse = httpRequest "https:/<yourjenkinsjoburlpath>/lastSuccessfulBuild/buildNumber"
        def json = new JsonSlurper().parseText(jResponse.content)
        echo "Status: ${json}"
        

        jenkins 控制台输出:

        HttpMethod: GET
        URL: https://***/lastSuccessfulBuild/buildNumber
        Sending request to url: https://***/lastSuccessfulBuild/buildNumber
        Response Code: HTTP/1.1 200 OK
        Success code from [100‥399]
        [Pipeline] echo
        Status: 20
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 2011-10-31
          • 1970-01-01
          • 1970-01-01
          • 2021-06-01
          相关资源
          最近更新 更多