Jenkins REST API 例項
摘自: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的資訊
則可以通過地址 http://192.168.6.224:8080/job/pythontest/{build_number}/api/json?pretty=true
如果我們要獲得這個pythontest第一次build的資訊
http://192.168.6.224:8080/job/pythontest/1/api/json?pretty=true
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