导出詹金斯工作的建立历史

时间:2018-10-18 03:15:31

标签: java jenkins

我可以任何常规文件格式导出构建历史记录及其时间/日期和成功情况。希望甚至有晋升身份。

2 个答案:

答案 0 :(得分:2)

Parvez建议使用REST API很好。

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

除了最基本的查询外,我通常更喜欢运行一个小的常规脚本,该脚本将从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或运行groovy脚本的REST API运行该脚本(原文如此)。还有一个CLI接口命令可以做到这一点。

答案 1 :(得分:1)

您可以使用Jenkins rest api:

  1. 开始于:使用:
    遍历Jenkins服务器上的所有作业 http://JENKINS_URl/api/json?tree=jobs[name,url]
    这将为所有带有作业名称和作业网址的作业提供json响应。
  2. 然后为每个作业使用api访问其内部版本:
    http://JENKINS_URL/job/JOB_NAME/api/json??tree=allBuilds[number,url]
    这将提供作业JOB_NAME的所有版本,并返回带有版本号和版本url的josb响应。
  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

以类似的方式可以导出任何所需格式的所有构建历史记录。