亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

導出 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 關注
  • 641 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號