持續集成Jenkins API常見用法
jenkins(持續集成開源工具)提供了豐富的api接口,基本上所有的操作都可以使用curl來從后臺調度,包括:創建項目,禁用項目,啟用項目,獲取項目描述,獲取配置文件,普通觸發,scm觸發,帶參數觸發,帶補丁觸發。
【背景】:部門在搞持續集成,使用jenkins作為核心調度,要再其基礎上進行二次封裝,所以需要研究下jenkins的api。筆者主要負責搭建平臺,在研究用法也花費了些時間,本文主要做個簡要的記錄,希望能為各位朋友節省時間。
【環境】:(默認讀者已經具備了基本的持續集成經驗和jenkins用法)
1. Jenkins1.455
2. 系統Suse
3. Tomcat 6.0.37
4. Java 1.6.0_26
【API介紹】
Jenkins提供了html、json、python API,實質都是以http get/post方式調用的。查看http://www.xxx.xxx/jenkins/api/ 即可得到相應的說明,如圖:
【API實踐】
1.創建
curl -X POST http://www.xxx.xxx/jenkins/createItem?name=JavaStd --user peterguo:peterguo --data-binary "@javastd.config.xml" -H "Content-Type: text/xml"
2.禁用
curl -X POST http://www.xxx.xxx/jenkins/job/JavaStd/disable --user peterguo:peterguo
3.啟用
curl -X POST http://www.xxx.xxx/jenkins/job/JavaStd/enable --user peterguo:peterguo
4.刪除
curl -X POST http://www.xxx.xxx/jenkins/job/JavaStd/doDelete --user peterguo:peterguo
5.獲取項目描述
curl -X GET http://www.xxx.xxx/jenkins/job/JavaStd/description --user peterguo:peterguo
6.獲取配置文件
curl -X GET http://www.xxx.xxx/jenkins/job/JavaStd/config.xml --user peterguo:peterguo
7.觸發SCM檢查
curl -X GET http://www.xxx.xxx/jenkins/job/JavaStd/polling --user peterguo:peterguo
8.普通觸發
curl -X GET http://www.xxx.xxx/jenkins/job/JavaStd/build --user peterguo:peterguo
9.帶參數觸發
curl -X GET "http://www.xxx.xxx/jenkins/job/helloworld-freestyle/buildWithParameters?bAllTest=&Choices=2&strParam=abc" --user peterguo:peterguo
10.帶參數和補丁觸發
curl -X POST "http://www.xxx.xxx/jenkins/job/helloworld-freestyle/buildWithParameters?bAllTest=&Choices=2&strParam=abc" --user peterguo:peterguo -F "action=upload" -F "patch.diff=@OtherTest.java.patch"
注:帶補丁觸發需要先安裝補丁插件,并設置項目的補丁參數
【Python調用】
提供python使用pycurl調用的例子片段,實際和curl調用一樣,優點是易整合。
import pycurl url = "http://10.129.145.112:8081/jenkins/job/helloworld-freestyle/config.xml" crl = pycurl.Curl() crl.setopt(pycurl.VERBOSE,1) crl.setopt(pycurl.FOLLOWLOCATION, 1) crl.setopt(pycurl.MAXREDIRS, 5) crl.setopt(pycurl.USERPWD, "peterguo:peterguo") crl.setopt(pycurl.CONNECTTIMEOUT, 60) crl.setopt(pycurl.TIMEOUT, 300) crl.setopt(pycurl.HTTPPROXYTUNNEL,1) crl.fp = StringIO.StringIO() crl.setopt(pycurl.URL, url) crl.setopt(crl.WRITEFUNCTION, crl.fp.write) crl.perform() ret = crl.fp.getvalue()
來自:http://my.oschina.net/sanpeterguo/blog/197931