1. 程式人生 > 實用技巧 >Jenkins REST API 例項

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

(pythontest是job name)

請求方法是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