为了账号安全,请及时绑定邮箱和手机立即绑定

导出 jenkins 作业的构建历史

导出 jenkins 作业的构建历史

RISEBY 2021-11-24 15:59:15
我可以以任何传统文件格式导出构建历史,以及它们的时间/日期和成功。甚至希望提升状态。
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

您可以使用 Jenkins rest api :

  1. 开始于:使用以下命令遍历 Jenkins 服务器上的所有作业:
    http://JENKINS_URl/api/json?tree=jobs[name,url]
    这将提供带有作业名称和作业 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


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


查看完整回答
反对 回复 2021-11-24
?
拉风的咖菲猫

TA贡献1995条经验 获得超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 界面命令。


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 553 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信