摘自:https://www.cnblogs.com/zjsupermanblog/archive/2017/07/26/7238422.html
背景:
Jenkins具有豐富的插件生態,足以滿足我們日常工作的需求,但如果我們想通過具體的Jenkins任務直接對外提供服務,而不想將內部的具體實現對外暴露(否則,需添加對應的用戶權限,通過頁面執行job);可以對外直接提供接口,第三方直接調用接口(比如提供給開發,提測前回歸冒煙用例集),執行相應的Jenkins任務並獲取任務結果
Jenkins本身支持豐富的API接口,我們通過調用接口,基本可以實現所有需要的功能,包括獲取JOB,觸發JOB執行,甚至刪除JOB等
Jenkins的Remote API以REST-like
的形式進行提供,通過對特定的API執行POST請求即可
站點說明:
如果搭建的Jenkins站點為 http://192.168.6.224:8080
其中創建了一個job,job name為"pythontest",還配置了一個字符參數test,job只是執行一個簡單的python script
之后所有模擬的請求,都通過postman工具進行
REST API:
站點所有支持的API都可以通過地址http://
192.168.6.224:8080/api 獲取,如圖

某一個job的所有相關API,可以通過地址 http://192.168.6.224:8080/job/{jobname}/api/來獲取
如我們的job name是pythontest,則地址是 http://192.168.6.224:8080/job/pythontest/api/
所有支持的API如圖

JOB API---獲取JOB相關信息:
我們通過url直接獲取job的相關信息,生成xml格式或者JSON,甚至可以用python、ruby腳本獲取
如獲取job(pythontest)的信息,要獲取json的地址
http://192.168.6.224:8080/job/pythontest/api/json?pretty=true
可以獲取name,build等的所有信息,后面說明都使用json格式

XML的地址
http://192.168.6.224:8080/job/pythontest/api/xml

python http://192.168.6.224:8080/job/pythontest/api/python?pretty=true
JOB API---獲取Build相關信息:
剛才我們獲取的是job所有的相關信息,可能我們還需要獲取某一次build的信息
如果我們要獲得這個pythontest第一次build的信息
JOB API--信息過濾:
之前獲取的所有相關信息,可以通過添加參數tree=XXX[],來過濾出你所感興趣的節點,類似於正則表達式
詳細的可以參考,之前站點API 說明中的"Controlling the amount of data you fetch"這一節
如何用,假設通過 http://192.168.6.224:8080/job/pythontest/api/json?pretty=true 會獲取所有的信息
那么添加 tree=builds[*] 可以獲取所有builds下的節點
地址拼接為 ,直接http get請求
http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[*]
通過地址 http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[displayName]
可以獲取builds下,所有displayName的節點,其中一共有三個displayName
如果要獲取三個displayName節點中第二個節點,可以通過{X,Y}
http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[displayName]{1,2}
如果要獲取兩個相關的節點,通過,連接兩個過濾節點
http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[*],url[*]
這樣就可以獲取build和url的信息
JOB API--執行Build:
1 直接執行,不包括參數
此時暫時刪除pytest的參數,使它可以直接執行
那么執行build的API地址就是
http://192.168.6.224:8080/job/pythontest/build
請求方法為POST,通過post man發送這個請求
會發現請求失敗,返回"Authentication required"
此提示信息說明執行job的時候需要身份認證,可以通過postman的"Authorization",選擇“Basic Auth”, 再輸入登錄jeknins,可以有權限
執行job的用戶名和密碼
此時再次提交,Job執行成功
2 包括參數執行
仍然是用pytest這個job,只是添加了參數test(一個字符串的參數)
帶參數執行的API地址,請求仍然是POST
http://192.168.6.224:8080/job/pythontest/buildWithParameters
仍然需要認證,參數可以設置為test="testonly"
此時提交job執行成功
JOB API--獲取和更新描述信息:
通過API可以獲取和更新JOB的description的信息
1.獲取Description信息
API地址:http://192.168.6.224:8080/job/pythontest/description
(pythontest是job name)
請求方法"GET",不需要認證
2 更新Description信息
更新description的時候,API地址還是
http://192.168.6.224:8080/job/pythontest/description(pythontest是jobname)
只是請求方法為POST,添加一個參數 description,填寫要更新的description的內容
同樣需要身份驗證
JOB API--禁用和啟動Job:
1 禁用job
要禁用某一個job API地址 http://192.168.6.224:8080/job/pythontest/disable
請求方法是POST
執行成功,在jenkins中查看job ,此時已禁用
2 啟用Job
之前的job,pythntest已經禁用,要重新啟用這個job
API地址 http://192.168.6.224:8080/job/pythontest/enable(pythontest是job name)
請求方法是POST,執行后,job變成正常狀態
JOB API--刪除JOB:
要刪除一個job,仍然可以通過API
地址 http://192.168.6.224:8080/job/pythontest/doDelete (pythntest是job name)
請求方法是post,需要認證
JOB API--JOB conofig.xml:
JOB的配置信息,通過地址 http://192.168.6.224:8080/job/pythontest/config.xml( pythntest是job name)
獲取到的是一個xml的格式,這個里面包括了詳細的配置信息,同樣的地址通過post可以更新配置
主要是后面用這個config.xml可以用來創建job
站點 API:
站點所有相關的API,都是可以從地址http://192.168.6.224:8080/api 中查詢到,同樣可以查詢job的相關信息等
但不同的是,還可以創建Job,拷貝Job,停止或重啟Jenkis的服務
通過 http://192.168.6.224:8080/api/json?pretty=true (JSON) 可以查詢到站點中所有的job信息
同樣的XML地址是 http://192.168.6.224:8080/api/xml
查詢同樣支持,通過tree進行過濾
如通過 http://192.168.6.224:8080/api/json?pretty=true&tree=jobs[name[*]]
可以過濾出所有jobs的name
站點API_創建Job
要創建一個Job,首先要明白每個Job的配置信息都保存在config.xml中,如之前我們已經創建的job pythontest,通過訪問地址
http://192.168.6.224:8080/job/pythontest/config.xml
就可以獲得job相關的詳細配置信息,當然需要先登錄
config.xml的配置信息如下,這個里面包括了job的配置,包括名稱,命令等
要創建一個新的Job,可以參考或復制這個config.xml文件
創建Job的API地址是http://192.168.6.224:8080/createItem
假設我們要新創建一個job,叫 “testjob”
那么第一步,要在Jenkins的安裝目錄下,找到子目錄\jobs,然后在其中創建一個目錄 ,就叫testjob
如果不創建這個目錄,直接調用API,是會失敗的
然后准備config.xml文件,作為job的配置信息,可以從剛才的pythontest的配置直接拷貝得到,然后簡單修改下name
舉例通過Postman進行,訪問的API地址,請求方法為POST,需要身份驗證
http://192.168.6.224:8080/createItem?name=testjob
地址后面的name就是要創建的job的name
在Header中創建 Content-Type,值為application/xml
請求的Boy中類型選擇為binary
然后選擇剛才准備的config.xml文件
此時調用,這個接口,Job可以創建成功
站點API_拷貝Job
要通過API拷貝一個已存在的Job,需要訪問的API地址仍然是,請求還是POST
http://192.168.6.224:8080/createItem
再需要添加三個參數
分別是 name (復制后新創建的的job name,如pythontest2
mode(模式,固定給予值copy)
from( 要復制的Job的Job name,如pythontest)
站點API_重啟
通過API地址 http://192.168.6.224:8080/restart
可以重啟Jenkins
通過API地址 http://192.168.6.224:8080/safeRestart
可以安全重啟Jenkins
參考文檔:
1 https://wiki.jenkins.io/display/JENKINS/Remote+access+API
2 獲取Jenkins project build結果 http://blog.csdn.net/ljj_9/article/details/70270977