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 獲取,如圖
   09c8259b-4de0-42fb-bb6a-a2fda91c9796

 

 
        
       某一個job的所有相關API,可以通過地址 http://192.168.6.224:8080/job/{jobname}/api/來獲取
        如我們的job name是pythontest,則地址是 http://192.168.6.224:8080/job/pythontest/api/  
        所有支持的API如圖
6cf3b562-eb5f-4e85-900c-7f10f5fe31ad

 

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格式
35fbb957-59d0-4053-abb3-d4804ad00e58

  XML的地址

http://192.168.6.224:8080/job/pythontest/api/xml

3cfe7425-3a69-4784-9b97-4e7b8d84b150

 

    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[*]

76373204-9c75-43ee-927f-1252e1c94924

 

 

通過地址 http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[displayName]

   可以獲取builds下,所有displayName的節點,其中一共有三個displayName

c1208498-a187-4a9f-9172-d773f58226b2

 

如果要獲取三個displayName節點中第二個節點,可以通過{X,Y}

http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[displayName]{1,2}

f1a4a700-dba2-4908-8f49-2cf150764418

 

如果要獲取兩個相關的節點,通過,連接兩個過濾節點

http://192.168.6.224:8080/job/pythontest/api/json?pretty=true&tree=builds[*],url[*]

  這樣就可以獲取build和url的信息

a5620333-00c8-4dee-a8ca-adddfc67138a

 

 

JOB API--執行Build:

  1 直接執行,不包括參數

    此時暫時刪除pytest的參數,使它可以直接執行

    那么執行build的API地址就是

http://192.168.6.224:8080/job/pythontest/build

請求方法為POST,通過post man發送這個請求

會發現請求失敗,返回"Authentication required"

 

eb85bb04-b8ad-481e-8581-1667fbe0cb1b

此提示信息說明執行job的時候需要身份認證,可以通過postman的"Authorization",選擇“Basic Auth”, 再輸入登錄jeknins,可以有權限

執行job的用戶名和密碼

5324b5f1-1ce5-458f-803d-d460a0ec97c7

此時再次提交,Job執行成功

 

2 包括參數執行

    仍然是用pytest這個job,只是添加了參數test(一個字符串的參數)

    帶參數執行的API地址,請求仍然是POST

http://192.168.6.224:8080/job/pythontest/buildWithParameters

仍然需要認證,參數可以設置為test="testonly"

35a4efaa-0704-422c-98e6-6c7c7d10d187

此時提交job執行成功

4e32c8a4-0a1a-468b-b175-565e9eed1d84

 

 

 

JOB API--獲取和更新描述信息:

  通過API可以獲取和更新JOB的description的信息

  1.獲取Description信息

    API地址:http://192.168.6.224:8080/job/pythontest/description

   (pythontest是job name)

    請求方法"GET",不需要認證

62178c6a-2401-41cf-b370-6857e6268fb2

3f68265f-a2ab-4f8a-b33c-5e802af598ee

 

2 更新Description信息

    更新description的時候,API地址還是

http://192.168.6.224:8080/job/pythontest/description(pythontest是jobname)

    只是請求方法為POST,添加一個參數 description,填寫要更新的description的內容

    同樣需要身份驗證

0c03f6a4-60eb-4777-94d8-0f1f962d797d

 

JOB API--禁用和啟動Job:

  1 禁用job

    要禁用某一個job API地址 http://192.168.6.224:8080/job/pythontest/disable

(pythontest是job name)

請求方法是POST

d1395eb5-ff80-4fca-a883-acee60016e3a

執行成功,在jenkins中查看job ,此時已禁用

1599f8c2-66af-49fa-81d8-d62d3a94caf6

 

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

 

21aacf71-3579-46fa-bf29-5b126e089e77

 

 

 

 

站點 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信息

1f0117f2-3a60-49f7-b0ab-b165d32289ef

同樣的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

b8baa650-11e7-49c6-a3bf-ce1ae3df10da

 

站點API_創建Job

要創建一個Job,首先要明白每個Job的配置信息都保存在config.xml中,如之前我們已經創建的job pythontest,通過訪問地址

http://192.168.6.224:8080/job/pythontest/config.xml

就可以獲得job相關的詳細配置信息,當然需要先登錄

config.xml的配置信息如下,這個里面包括了job的配置,包括名稱,命令等

c5367cbc-61c9-4613-b80a-74f34cea3518

要創建一個新的Job,可以參考或復制這個config.xml文件

創建Job的API地址是http://192.168.6.224:8080/createItem

假設我們要新創建一個job,叫 “testjob”

那么第一步,要在Jenkins的安裝目錄下,找到子目錄\jobs,然后在其中創建一個目錄 ,就叫testjob

如果不創建這個目錄,直接調用API,是會失敗的

b753504f-9d13-4044-8441-c89c6e5ed8f1

然后准備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文件

fb5fae6c-7bef-4c00-82e6-1b470c0d8e24

 

5a29e252-329a-414d-b377-92dca678160c

此時調用,這個接口,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)

f1eb1a1d-9a64-40a4-8d08-eb1586fefca3

 

站點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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM