「Jenkins」- 使用接口批量创建任务

更新日期:2020年03月07日

问题描述

12/26/2019 在源码仓库中有很多项目(大约200个),现在需要为这些项目创建 Jenkins 自动化流水(Jenkins Pipeline)。我们想通过接口创建所有项目,而不是手工创建(避免巨大工作量)。我们通过HTTP接口操作,并且只演示关键步骤,没有面面俱到,具体操作需要各位看官自行发挥。

03/06/2020 如果条件允许,可以通过 Jenkins 的 Python 模块进行批量操作(编程)。我们使用 python-jenkins 1.7.0 模块,仓库地址官方文档。也可以使用其他模块,请根据需要自行取用。

解决办法

第一步、获取 config.xml 文件

首先,获取已定义任务的config.xml文件(用作模板):

#!/bin/sh

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定义新任务:

#!/bin/sh

curl -s -XPOST 'http://<example.com>/createItem?name=<yourJobName>' \
    -u "<username>:<API_TOKEN>" \
    --data-binary "@<mylocalconfig.xml>" \
    -H "Content-Type: text/xml"

(显示使用<>标记的地方需要替换)

补充:如果需要更新旧任务

与创建新任务类似,只是需要修改请求地址:

#!/bin/sh

curl -X POST 'http://<example.com>/job/<your-job-name>/config.xml' \
    -u "<username>:<password>" \
    --data-binary "@<config.xml>" \
    -H "Content-Type: text/xml"

(显示使用<>标记的地方需要替换)

常见错误

#1 Error 403 No valid crumb was included in the request

如果遇到上述操作,则表示 Jenkins 启用 CSRF 保护,解决方法如下所述。

方法一、在请求前,先获取CRUMB字段:

#!/bin/sh

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

参考文献


ToC

问题描述

解决办法

第一步、获取 config.xml 文件

第二步、修改 config.xml 文件

第三步、创建新任务

补充:如果需要更新旧任务

常见错误

#1 Error 403 No valid crumb was included in the request

相关链接

参考文献