猿问

导出 jenkins 作业的构建历史

我可以以任何传统文件格式导出构建历史,以及它们的时间/日期和成功。甚至希望提升状态。


RISEBY
浏览 554回答 2
2回答

白衣非少年

您可以使用 Jenkins rest api :开始于:使用以下命令遍历 Jenkins 服务器上的所有作业:http://JENKINS_URl/api/json?tree=jobs[name,url]这将提供带有作业名称和作业 url 的所有作业的 json 响应。然后,对于每个作业,使用 api 访问其构建:http://JENKINS_URL/job/JOB_NAME/api/json?tree=allBuilds[number,url]这将为作业 JOB_NAME 提供所有构建,并返回带有构建号和构建 url 的 json 响应。现在使用 api 遍历每个构建:http://JENKINS_URL/job/JOB_NAME/BUILD_NUMBER/api/json这将提供与构建相关的所有内容作为 json 响应。像构建状态,构建是如何触发的,时间等。对于自动化,您可以使用 bash、curl 和 jq 来实现这一点。已经编写了小的 bash 脚本来检索 Jenkins 服务器上每个作业的构建状态和时间戳:#!/bin/bashJENKINS_URL=<YOUR JENKINS URL HERE>for job in `curl -sg "$JENKINS_URL/api/json?tree=jobs[name,url]" | jq '.jobs[].name' -r`;&nbsp;do&nbsp;&nbsp; &nbsp; echo "Job Name : $job"&nbsp; &nbsp; echo -e "Build Number\tBuild Status\tTimestamp"&nbsp; &nbsp; for build in `curl -sg "$JENKINS_URL/job/$job/api/json?tree=allBuilds[number]" | jq '.allBuilds[].number' -r`;&nbsp;&nbsp; &nbsp; do&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; curl -sg "$JENKINS_URL/job/$job/$build/api/json" | jq '(.number|tostring) + "\t\t" + .result + "\t\t" + (.timestamp|tostring)' -r&nbsp; &nbsp; done&nbsp;&nbsp; &nbsp; echo "================"done注意:以上脚本假设 Jenkins 服务器没有任何身份验证。对于身份验证,将以下参数添加到每个 curl 调用:-u username:API_TOKEN其中:username:API_TOKEN with your username and password/API_Token类似的方式,您可以以您想要的任何格式导出所有构建历史记录。

拉风的咖菲猫

Parvez 的使用 REST API 的建议非常好。但是,如果 REST API 不直接提供您要查找的数据,则它使用起来很尴尬,从而导致对 REST API 的复杂调用和多次调用。这很慢,它使您依赖该 API 的稳定性。除了最基本的查询之外,我通常更喜欢运行一个小的 groovy 脚本,该脚本将从 Jenkins 的内部结构中提取所需的数据。这更快,而且通常使用起来也更简单。这是一个小脚本,它将获取您要查找的数据:import jenkins.model.*import hudson.plugins.promoted_builds.*import groovy.json.JsonOutputdef job = Jenkins.instance.getItemByFullName( 'TESTJOB' )def buildInfos = []for ( build in job.getBuilds() ) {&nbsp; def promotionList = []&nbsp; for ( promotion in build.getAction(PromotedBuildAction.class).getPromotions() ) {&nbsp; &nbsp; promotionList += promotion.getName()&nbsp; }&nbsp; buildInfos += [&nbsp; &nbsp; result&nbsp; &nbsp; : build.getResult().toString(),&nbsp; &nbsp; &nbsp; number&nbsp; &nbsp; : build.getNumber(),&nbsp; &nbsp; &nbsp; time&nbsp; &nbsp; &nbsp; : build.getTime().toString(),&nbsp; &nbsp; &nbsp; promotions: promotionList&nbsp; ]}println( JsonOutput.toJson( buildInfos ) )该脚本将以 JSON 格式生成结果,如下所示(美化):[&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "number": 2,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "promotions": [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "promotionA"&nbsp; &nbsp; &nbsp; &nbsp; ],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "result": "SUCCESS",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "time": "Thu Oct 18 11:50:37 EEST 2018"&nbsp; &nbsp; },&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "number": 1,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "promotions": [],&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "result": "SUCCESS",&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; "time": "Thu Oct 18 11:50:34 EEST 2018"&nbsp; &nbsp; }]您可以通过 Jenkins“脚本控制台”GUI 或通过 REST API 运行此类脚本以运行 groovy 脚本(原文如此)。还有一个用于执行此操作的 CLI 界面命令。
随时随地看视频慕课网APP

相关分类

Java
我要回答