使用Jenkins / Hudson远程API检查作业状态
在進(jìn)行演講時(shí),我寫了一個(gè)Hudson / Jenkins插件(適用于EclipseCon NA 2014) ,但我想發(fā)表有關(guān)演講中提到的想法的博客文章。 在這篇文章中,我解釋了如何在不使用Web界面的情況下與CI服務(wù)器進(jìn)行交互。
Jenkins / Hudson遠(yuǎn)程API可以非常方便地快速收集工作狀態(tài)(甚至可以創(chuàng)建或啟動(dòng)工作!但我不會(huì)在此博客文章中介紹這方面)。 讓我們看一些例子。
看一下CLI自動(dòng)執(zhí)行Jenkins配置任務(wù)。
可在http:// hudson-or-jenkins / cli上找到:下載hudson-cli.jar或jenkins-cli.jar并開始使用第一個(gè)命令:
$ java -jar jenkins-cli.jar -s http://jenkins.terracotta.eur.ad.sag:8080/ help最近,我不得不用矩陣作業(yè)替換50個(gè)作業(yè):創(chuàng)建矩陣作業(yè)后,我們決定停用先前的50個(gè)作業(yè)(永久刪除之前)
使用CLI,我可以快速登錄:
$ java -jar jenkins-cli.jar -s http://jenkins.xx:8080/ login --username anthony --password password然后得到工作清單:
$ java -jar jenkins-cli.jar -s http://jenkins.xx:8080/ list-jobs我將要取消激活的50個(gè)作業(yè)列表保存在一個(gè)文本文件中,然后遍歷該列表:
$ while read p; do java -jar jenkins-cli.jar -s http://jenkins.xx:8080/ disable-job $p; done < list_of_jobs.txt比通過(guò)UI更有效,不是嗎?
每個(gè)URL都可以表示為XML或JSON
如Jenkins文檔和Hudson文檔中所述 ,您只需將/ api / xml或/ api / json或/ api / python附加到任何Jenkins URL即可看到相應(yīng)的表示形式
您可以配置響應(yīng),并在URL上添加一些參數(shù):
深度
默認(rèn)深度為0,以獲取有關(guān)您的工作,構(gòu)建等的更多詳細(xì)信息,將深度設(shè)置為1: http : //ci.jruby.org/api/xml? depth=1
當(dāng)該參數(shù)大于1時(shí)(它實(shí)際上超過(guò)1…時(shí)),此參數(shù)可能會(huì)對(duì)您的CI服務(wù)器有害,因?yàn)轫憫?yīng)往往會(huì)變得很大。
樹
tree參數(shù)允許您選擇響應(yīng)的某些部分http://ci.jruby.org/api/xml?depth=1&tree=jobs[displayName,lastBuild[result]]
xpath和排除(僅XML)
這些參數(shù)可能是最強(qiáng)大的參數(shù),可悲的是它們僅可用于xml響應(yīng):
如果我只想顯示不成功的作業(yè),則可以使用以下URL: http : //ci.jruby.org/api/xml? depth=1& tree= jobs[displayName,lastBuild[result]]& exclude=hudson/ job [lastBuild [result ='SUCCESS']]
而且,如果我只想查看名稱以“ jruby”開頭的作業(yè),則可以將Xpath函數(shù)應(yīng)用于url: http ://ci.jruby.org/api/xml?xpath=hudson/ job [starts-with(名稱,'jruby')]&wrapper = mywrap
詹金斯和哈德森公共實(shí)例URL很少
找到一些公共的Jenkins和Hudson實(shí)例來(lái)練習(xí)最新的URL過(guò)濾是很容易的(Google用于“ Hudson Dashboard”或“ Jenkins Dashboard”),但是要查找最新的和有意義的(很少的工作)實(shí)例比較困難:
詹金斯:
- http://ci.jruby.org/
- https://jenkins.ci.cloudbees.com/job/plugins/
哈德森:
- http://deadlock.netbeans.org/hudson/
- https://hudson.eclipse.org/hudson/
- https://hudson.eclipse.org/p2/
也就是說(shuō),請(qǐng)先嘗試您的本地實(shí)例!
Jenkins和Hudson遠(yuǎn)程API腳本
Jenkins / Hudson遠(yuǎn)程API的主要興趣是通過(guò)您自己的軟件與之交互:我在這里收集一些腳本語(yǔ)言的示例
Groovy Script解析Jenkins Hudson構(gòu)建結(jié)果
class BuildParser {static void main(String[] args) {if (args.length != 1) {println("Please run the script with a Jenkins or Hudson url as the only argument\n Example : groovy BuildParser.groovy http://ci.jruby.org");return;}def url = args[0];def xmlInputFilteringSuccess = new XmlParser().parse(url + "/api/xml?depth=1&tree=jobs[displayName,lastBuild[result]]&exclude=hudson/job[lastBuild[result=%27SUCCESS%27]]");def xmlInputNoFilter = new XmlParser().parse(url + "/api/xml?depth=1&tree=jobs");def jobs = xmlInputFilteringSuccess.job;println(jobs.size() + " jobs out of " + xmlInputNoFilter.job.size() + " are currently failing")jobs.each({println(it.displayName.text() +" result is " + it.lastBuild.result.text())})} }解析Jenkins Hudson構(gòu)建結(jié)果的Python腳本
import ast import urllib import sysif len(sys.argv) != 2:print "Please run the script with a Jenkins or Hudson url as the only argument\n Example : python BuildParser.py http://ci.jruby.org"sys.exit(1)url = str(sys.argv[1]) print urlxml_input_no_filter = ast.literal_eval(urllib.urlopen(url + "/api/python?depth=1&tree=jobs[displayName,lastBuild[result]]").read())all_jobs = xml_input_no_filter['jobs'] non_successful_jobs = [row for row in all_jobs if 'SUCCESS' != row['lastBuild']['result']]print(str(len(non_successful_jobs)) + " jobs out of " + str(len(all_jobs)) + " are currently failing")for (i, item) in enumerate(non_successful_jobs):print "Job name : " + item['displayName'] + "Result : " + item['lastBuild']['result']JavaScript代碼解析Jenkins Hudson構(gòu)建結(jié)果
<!-- Strongly inspired by https://gist.github.com/alexschwartz/912787 --> <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Build Parser</title><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript"></script><script type="text/javascript">$(document).ready(function(){var baseUrl;$('button').click(function(){baseUrl = $("#baseUrl").val();$("#jobUrl").html(baseUrl)var success = function(json) {var allJobs = json["jobs"];var nonSuccessfulJobs = allJobs.filter(function( job ) {return job["lastBuild"] != null && job["lastBuild"]["result"] != "SUCCESS";});$("#downstream").html(nonSuccessfulJobs.length + " out of " + allJobs.length + " are currently failing");$.each(nonSuccessfulJobs, function( index, value ) {$("#downstream").append("<br />Job name : " + value["displayName"] + " : "+ value["lastBuild"]["result"] );});};$.ajax({url: baseUrl + "/api/json",data: "depth=1&tree=jobs[displayName,lastBuild[result]]&jsonp=callBack",jsonpCallback: "callBack",dataType: 'jsonp',success: success});});});</script> </head> <body marginwidth="50" marginheight="50" topmargin="50" leftmargin="50"> <h3>Input Data</h3>Hudson/Jenkins Base URL: <input type="text" id="baseUrl" value="https://hudson.eclipse.org/hudson/" size="80" /><br/><button>update</button><br /><h2>Output</h2><h3>Failing Jobs</h3> <div id="downstream"> </div></body></html>- 您可以在Github上找到這些腳本! 甚至在瀏覽器中為Javascript Jenkins Hudson Build解析器腳本執(zhí)行它們
翻譯自: https://www.javacodegeeks.com/2014/04/using-jenkins-hudson-remote-api-to-check-jobs-status.html
總結(jié)
以上是生活随笔為你收集整理的使用Jenkins / Hudson远程API检查作业状态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (linux if -o)
- 下一篇: 以编程方式访问Java基本类型的大小