通过 Jenkins 的 REST API 创建单个 Job,核心是向 Jenkins 发送包含 Job 配置的 XML 数据。以下是详细步骤和示例:
### **前提条件**
1. **Jenkins 地址**:如 `http://your-jenkins-url:8080`。
2. **认证信息**:
- 用户名(登录 Jenkins 的账号)。
- API Token(获取方式:登录 Jenkins → 点击右上角用户名 → **设置** → **API Token** → 生成并记录)。
3. **Job 配置 XML**:
可以通过两种方式获取:
- 从现有 Job 导出(参考前文「获取已有 Job 的配置」)。
- 手动编写符合 Jenkins 格式的 XML(需包含基本配置,如源码管理、构建步骤等)。
### **核心接口**
创建 Job 的 API 端点为:
```
POST http://<jenkins-url>/createItem?name=<新Job名称>
```
- 请求体:包含 Job 完整配置的 XML 数据。
- 请求头:`Content-Type: application/xml`。
### **操作步骤**
#### **1. 准备 XML 配置文件**
假设创建一个简单的自由风格 Job(`config.xml`),示例如下(可根据需求修改):
```xml
<?xml version='1.1' encoding='UTF-8'?>
<project>
<actions/>
<description>通过 API 创建的测试 Job</description>
<keepDependencies>false</keepDependencies>
<properties/>
<!-- 源码管理(此处示例为无源码,如需 Git 可添加 <scm> 标签) -->
<scm class="hudson.scm.NullSCM"/>
<canRoam>true</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers/> <!-- 触发器(如定时构建可添加 <hudson.triggers.TimerTrigger>) -->
<concurrentBuild>false</concurrentBuild>
<!-- 构建步骤(示例:执行一条 Shell 命令) -->
<builders>
<hudson.tasks.Shell>
<command>echo "Hello from API-created job!"</command>
</hudson.tasks.Shell>
</builders>
<publishers/>
<buildWrappers/>
</project>
```
#### **2. 用 curl 命令创建 Job**
执行以下命令,通过 curl 发送请求:
```bash
# 替换为你的信息
JENKINS_URL="http://your-jenkins-url:8080"
NEW_JOB_NAME="api-created-job" # 新 Job 的名称
USER="your-username"
TOKEN="your-api-token"
XML_FILE="config.xml" # 上述 XML 配置文件的路径
# 发送 POST 请求创建 Job
curl -u "${USER}:${TOKEN}" -X POST \
-H "Content-Type: application/xml" \
--data-binary "@${XML_FILE}" \
"${JENKINS_URL}/createItem?name=${NEW_JOB_NAME}"
```
- 成功时,返回状态码 `200`,且 Jenkins 页面中会出现名为 `api-created-job` 的新 Job。
- 失败时,根据返回的状态码排查问题(如 401 表示认证失败,403 表示权限不足,400 可能是 XML 格式错误)。
#### **3. 用 Python 脚本创建 Job**
更灵活的方式(可动态修改 XML 配置):
```python
import requests
JENKINS_URL = "http://your-jenkins-url:8080"
NEW_JOB_NAME = "api-created-job"
USER = "your-username"
TOKEN = "your-api-token"
# 读取 XML 配置(或动态生成)
with open("config.xml", "r") as f:
job_xml = f.read()
# 发送请求
url = f"{JENKINS_URL}/createItem?name={NEW_JOB_NAME}"
response = requests.post(
url,
auth=(USER, TOKEN),
headers={"Content-Type": "application/xml"},
data=job_xml
)
if response.status_code == 200:
print(f"Job {NEW_JOB_NAME} 创建成功!")
else:
print(f"创建失败:状态码 {response.status_code},原因:{response.text}")
```
### **关键注意事项**
1. **XML 格式正确性**:
Jenkins 对 XML 格式要求严格,缺少必填标签或格式错误会导致创建失败。建议先通过 Jenkins 页面手动创建一个 Job,导出其 `config.xml` 作为模板修改。
2. **文件夹中的 Job**:
若要在文件夹(如 `my-folder`)中创建 Job,URL 需包含文件夹路径:
```
POST http://<jenkins-url>/job/my-folder/createItem?name=<新Job名称>
```
3. **权限检查**:
确保用户有「创建 Job」的权限(在 Jenkins 「系统管理 → 全局安全配置 → 授权策略」中配置)。
4. **特殊字符处理**:
若 Job 名称包含空格或特殊字符,需在 URL 中进行 URL 编码(如空格编码为 `%20`)。
通过以上方法,可快速通过 API 创建单个 Jenkins Job,适用于自动化场景或集成到脚本中。
jenkins通过 REST API创建JOB
稀样2026-03-12 10:16
相关推荐
kjmkq15 小时前
适合卫星物联网的存储模块 天硕(TOPSSD)为万物互联的太空网络提供存储支撑运维成长记15 小时前
关于jenkins和gitlab的集成操作DianSan_ERP14 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线小道仙9715 天前
jenkins对接、jenkins-restvx_Biye_Design15 天前
【关注可免费领取源码】云计算及其应用网络教学系统--毕设附源码35183啊哈哈哈哈哈啊哈哈17 天前
Spring MVC 项目结构学习笔记百锦再18 天前
Jenkins 全面精通指南:从入门到脚本大师隔壁老王的代码18 天前
Jenkins的流水线详解衍生星球18 天前
【JSP程序设计】Servlet对象 — page对象