「Jenkins」- 使用接口批量建立任务 @20210118

问题描述

在仓库中,有不少项目(大约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

相关连接

Jenkins/Remote access API

参考文献

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

相关文章
相关标签/搜索