jenkins通过 REST API创建JOB

复制代码
通过 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,适用于自动化场景或集成到脚本中。
相关推荐
kjmkq15 小时前
适合卫星物联网的存储模块 天硕(TOPSSD)为万物互联的太空网络提供存储支撑
网络·物联网·servlet
运维成长记15 小时前
关于jenkins和gitlab的集成操作
servlet
DianSan_ERP14 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
小道仙9715 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest
vx_Biye_Design15 天前
【关注可免费领取源码】云计算及其应用网络教学系统--毕设附源码35183
java·spring·spring cloud·servlet·eclipse·云计算·课程设计
啊哈哈哈哈哈啊哈哈17 天前
Spring MVC 项目结构学习笔记
java·spring boot·spring·servlet·maven
百锦再18 天前
Jenkins 全面精通指南:从入门到脚本大师
运维·后端·python·servlet·django·flask·jenkins
隔壁老王的代码18 天前
Jenkins的流水线详解
运维·servlet·jenkins
衍生星球18 天前
【JSP程序设计】Servlet对象 — page对象
java·开发语言·servlet·jsp·jsp程序设计