导出Jenkins作业的构建历史记录

5

我能以任何传统的文件格式导出构建历史,包括构建时间/日期和成功状态。希望还能包括推广状态。

2个回答

12
您可以利用Jenkins的REST API:
  1. 首先,使用以下API遍历Jenkins服务器上的所有作业:
    http://JENKINS_URl/api/json?tree=jobs[name,url]
    这将返回JSON响应,其中包含所有作业的作业名称和作业URL。
  2. 然后,使用以下API访问每个作业的构建:
    http://JENKINS_URL/job/JOB_NAME/api/json?tree=allBuilds[number,url]
    这将返回JSON响应,其中包含作业JOB_NAME的所有构建以及构建编号和构建URL。
  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用户名:API_TOKEN
其中:
用户名:API_TOKEN使用您的用户名和密码/API_Token 类似的方式,您可以以任何格式导出所有构建历史记录。

8

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或运行groovy脚本的REST API来运行此类脚本。还有一个CLI接口命令可用于执行此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接