代码之家  ›  专栏  ›  技术社区  ›  NimChimpsky

导出jenkins作业的生成历史

  •  0
  • NimChimpsky  · 技术社区  · 7 年前

    我可以以任何常规文件格式导出构建的历史记录,以及它们的时间/日期和成功率。希望能得到晋升。

    2 回复  |  直到 7 年前
        1
  •  8
  •   Alex O    7 年前

    Parvez使用restapi的建议非常好。

    但是,如果restapi不能直接提供您要查找的数据,那么使用restapi是很困难的,这会导致restapi的复杂和多次调用。这是缓慢的,它使您依赖于该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运行这样的脚本,或者通过restapi运行groovy脚本(sic)。还有一个CLI接口命令用于执行此操作。

        2
  •  10
  •   Parvez Kazi    5 年前

    1. 开始于:遍历Jenkins服务器上的所有作业,使用:
      http://JENKINS_URl/api/json?tree=jobs[name,url]
    2. 然后,对于每个作业,使用api访问其生成:
      http://JENKINS_URL/job/JOB_NAME/api/json?tree=allBuilds[number,url]
      这将给出job\u 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

    类似的方法,您可以以任何格式导出所有构建历史。