「Jenkins」- 使用接口批量創建任務

問題描述

在倉庫中,有很多項目(大約200個),現在需要爲這些項目創建 Jenkins 自動化流水(Jenkins Pipeline)。

我們想通過接口批量創建所有項目,而不是手工創建(避免巨大工作量)。

該筆記見記錄:如何通過 API 操作 Jenkins 服務。

注意事項

我們僅記錄解決問題的關鍵步驟,沒有面面俱到,具體操作需要根據需求調整。

解決辦法

方案一、通過 REST API 操作(使用 Python jenkins 模塊)。通過 Jenkins 的 Python 模塊進行批量操作(編程)。我們使用 python-jenkins 1.7.0 模塊。

方案二、通過 Shell 命令(curl),發送 HTTP 請求

方案一、使用 Jenkins 模塊(Python)

最開始,準備工作

我們需要在 Jenkins 中創建用於請求認證的 TOKEN 信息:
1)Click your name (upper-right corner).
2)Click Configure (left-side menu).
3)在創建 TOKEN 後,要保存頁面,並將 TOKEN 記錄(刷新頁面將無法查看)

演示程序(Demo)

如下示例,演示如何使用 python-jenkins 模塊獲取所有 Job 定義,並過濾出所有使用 Join plugin 的 Job:
#!/usr/bin/python3

import
 

jjb/python-jenkins: Python API for managing jobs and nodes in a Jenkins CI instance - python-jenkins
Python Jenkins — Python Jenkins 1.1.1.dev1 documentation

方案二、通過 Shell 命令(cURL)

最開始,準備工作

我們需要在 Jenkins 中創建用於請求認證的 TOKEN 信息:
1)Click your name (upper-right corner).
2)Click Configure (left-side menu).
3)在創建 TOKEN 後,要保存頁面,並將 TOKEN 記錄(刷新頁面將無法查看)

第一步、獲取 config.xml 文件

首先,獲取已定義任務的 config.xml 文件(用作模板):
curl -X GET "http://<example.com>/job/<your-job-name>/config.xml" \
    -u "<username>:<API_TOKEN>" \
    -o "<mylocalconfig.xml>"


第二步、修改 config.xml 文件

將得到的 config.xml 爲任務的配置文件,根據自己的需要進行修改。

第三步、創建新任務

使用修改的 config.xml 定義新任務:
curl -s -XPOST 'http://<example.com>/createItem?name=<yourJobName>' \
    -u "<username>:<API_TOKEN>" \
    --data-binary "@<mylocalconfig.xml>" \
    -H "Content-Type: text/xml"


補充:如果需要更新舊任務

與創建新任務類似,只是需要修改請求地址:
curl -X POST 'http://<example.com>/job/<your-job-name>/config.xml' \
    -u "<username>:<password>" \
    --data-binary "@<config.xml>" \
    -H "Content-Type: text/xml"


常見錯誤

Error 403 No valid crumb was included in the request

如果遇到上述操作,則表示 Jenkins 啓用 CSRF 保護,解決方法如下所述。

方法一、在請求前,先獲取 CRUMB 字段:

CRUMB=$(curl -s 'http://example.com/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' -u username:API_TOKEN)
curl -s -XPOST 'http://example.com/createItem?name=yourJobName' -u username:API_TOKEN \
    --data-binary @mylocalconfig.xml \
    -H "$CRUMB" \
    -H "Content-Type:text/xml"


方法二、關閉 CSFR 保護(不建議):Manage Jenkins => Configure Global Security => CSRF Protection

相關鏈接

Jenkins/Remote access API

參考文獻

How to create a job using the REST API and cURL?
Jenkins -> 403 No valid crumb was included in the request #2067
How to update Jenkins Job config.xml file using curl
How to get the API Token for Jenkins - Stack Overflow









































































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章