问题描述

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

更多相关文章

  1. SpringBoot实现POI报表操作
  2. SpringBoot结合POI百万级数据报表操作
  3. 每日学习-ansible replace模块
  4. Java 8 Lambda 表达式和流操作如何让你的代码变慢 5 倍
  5. Java8 Lambda 表达式和流操作如何让你的代码变慢 5 倍
  6. Scala 与 Java 的交互操作
  7. 怎样用 JavaScript 操作 Cookie[每日前端夜话0xC4]
  8. jQuery的DOM操作实例(3)——创建节点&&编写一个弹窗
  9. jQuery编程基础精华02(属性、表单过滤器,元素的each,表单选择器,子元

随机推荐

  1. android log 学习
  2. 有关Android调用服务全解析
  3. Android 之ndk开发
  4. Android的文件系统
  5. 解决Android(安卓)Studio 无法在线更新的
  6. Android实时直播,一千行java搞定不依赖jni
  7. android平台搭建详情
  8. Android之——模拟实现检测心率变化的应
  9. Android调Ajax和动态添加JS中的token(And
  10. 自定义风格和主题