問題描述
在倉庫中,有不少項目(大約200個),如今須要爲這些項目建立 Jenkins 自動化流水(Jenkins Pipeline)。 node
咱們想經過接口批量建立全部項目,而不是手工建立(避免巨大工做量)。 python
該筆記見記錄:如何經過 API 操做 Jenkins 服務。 git
注意事項
咱們僅記錄解決問題的關鍵步驟,沒有面面俱到,具體操做須要根據需求調整。 github
解決辦法
方案1、經過 REST API 操做(使用 Python jenkins 模塊)。經過 Jenkins 的 Python 模塊進行批量操做(編程)。咱們使用 python-jenkins 1.7.0 模塊。 編程
方案2、經過 Shell 命令(curl),發送 HTTP 請求 json
方案1、使用 Jenkins 模塊(Python)
最開始,準備工做
咱們須要在 Jenkins 中建立用於請求認證的 TOKEN 信息:
1)Click your name (upper-right corner).
2)Click Configure (left-side menu).
3)在建立 TOKEN 後,要保存頁面,並將 TOKEN 記錄(刷新頁面將沒法查看) api
演示程序(Demo)
以下示例,演示如何使用 python-jenkins 模塊獲取全部 Job 定義,並過濾出全部使用 Join plugin 的 Job: curl
#!/usr/bin/python3 # 打印全部 Job from jenkins import Jenkins jks = Jenkins("https://jenkins.example.com/", "username", "token") job_list = jks.get_all_jobs() print(job_list) # 美化輸出 import json print(json.dumps(joblist, sort_keys=True, indent=4))
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 ide
方案2、經過 Shell 命令(cURL)
最開始,準備工做
咱們須要在 Jenkins 中建立用於請求認證的 TOKEN 信息:
1)Click your name (upper-right corner).
2)Click Configure (left-side menu).
3)在建立 TOKEN 後,要保存頁面,並將 TOKEN 記錄(刷新頁面將沒法查看) url
第一步、獲取 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 保護,解決方法以下所述。
方法1、在請求前,先獲取 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"
方法2、關閉 CSFR 保護(不建議):Manage Jenkins => Configure Global Security => CSRF Protection
相關連接
參考文獻
WikiNotes/使用接口批量建立任務
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