【问题标题】:Export build history of jenkins job导出詹金斯工作的构建历史
【发布时间】:2021-10-14 18:12:57
【问题描述】:

我能否以任何传统的文件格式导出构建历史、时间/日期和成功。并且希望甚至是晋升状态。

【问题讨论】:

    标签: java jenkins


    【解决方案1】:

    您可以使用 Jenkins rest api :

    1. 开始于:使用 :
      http://JENKINS_URl/api/json?tree=jobs[name,url]
      遍历 Jenkins 服务器上的所有作业 这将为所有具有作业名称和作业 url 的作业提供 json 响应。
    2. 然后对于每个作业,使用 api 访问其构建:
      http://JENKINS_URL/job/JOB_NAME/api/json?tree=allBuilds[number,url]
      这将为作业 JOB_NAME 提供所有构建,并返回带有构建号和构建 url 的 json 响应。
    3. 现在使用 api 遍历每个构建:
      http://JENKINS_URL/job/JOB_NAME/BUILD_NUMBER/api/json
      这会将与构建相关的所有内容作为 json 响应提供。比如构建状态、构建的触发方式、时间等。

    对于自动化,您可以使用 bash、curl 和 jq 来实现。

    编写了小型 bash 脚本来检索 Jenkins 服务器上每个作业的构建状态和时间戳:

    #!/bin/bash
    JENKINS_URL=<YOUR JENKINS URL HERE>
    for job in `curl -sg "$JENKINS_URL/api/json?tree=jobs[name,url]" | jq '.jobs[].name' -r`; 
    do 
        echo "Job Name : $job"
        echo -e "Build Number\tBuild Status\tTimestamp"
        for build in `curl -sg "$JENKINS_URL/job/$job/api/json?tree=allBuilds[number]" | jq '.allBuilds[].number' -r`; 
        do 
            curl -sg "$JENKINS_URL/job/$job/$build/api/json" | jq '(.number|tostring) + "\t\t" + .result + "\t\t" + (.timestamp|tostring)' -r
        done 
        echo "================"
    done
    

    注意:以上脚本假定 Jenkins 服务器没有任何身份验证。对于身份验证,在每个 curl 调用中添加以下参数:
    -u username:API_TOKEN
    地点:
    username:API_TOKEN with your username and password/API_Token

    您可以通过类似的方式以任何您想要的格式导出所有构建历史记录。

    【讨论】:

      【解决方案2】:

      Parvez 建议使用 REST API 非常好。

      但是,如果 REST API 不直接提供您要查找的数据,那么使用起来会很尴尬,这会导致 REST API 的复杂和多次调用。这很慢,它使您依赖该 API 的稳定性。

      除了最基本的查询之外,我通常更喜欢运行一个小型的 groovy 脚本,该脚本将从 Jenkins 的内部结构中提取所需的数据。这速度更快,而且通常使用起来也更简单。这是一个小脚本,它将获取您正在寻找的数据:

      import jenkins.model.*
      import hudson.plugins.promoted_builds.*
      import groovy.json.JsonOutput
      
      def job = Jenkins.instance.getItemByFullName( 'TESTJOB' )
      
      def buildInfos = []
      for ( build in job.getBuilds() ) {
        def promotionList = []
        for ( promotion in build.getAction(PromotedBuildAction.class).getPromotions() ) {
          promotionList += promotion.getName()
        }
        buildInfos += [
          result    : build.getResult().toString(),
            number    : build.getNumber(),
            time      : build.getTime().toString(),
            promotions: promotionList
        ]
      }
      println( JsonOutput.toJson( buildInfos ) )
      

      脚本将生成 JSON 格式的结果,如下所示(美化):

      [
          {
              "number": 2, 
              "promotions": [
                  "promotionA"
              ], 
              "result": "SUCCESS", 
              "time": "Thu Oct 18 11:50:37 EEST 2018"
          }, 
          {
              "number": 1, 
              "promotions": [], 
              "result": "SUCCESS", 
              "time": "Thu Oct 18 11:50:34 EEST 2018"
          }
      ]
      

      您可以通过 Jenkins“脚本控制台”GUI 运行这样的脚本,或者通过 REST API 运行 groovy 脚本(原文如此)。还有一个 CLI 界面命令可以执行此操作。

      【讨论】:

        猜你喜欢
        • 2015-10-07
        • 2013-03-26
        • 2016-05-03
        • 2020-07-04
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        相关资源
        最近更新 更多