Jenkins 提供了强大的 RESTful API,允许用户从 Jenkins 服务器中提取各种数据,包括构建信息、Job 状态、配置详情等。这些 API 可用于自动化脚本、外部应用集成、监控和报告生成等场景。本文将介绍如何使用 Jenkins API 提取数据,展示一些常用的 API 调用和示例。
一、Jenkins API 基础
Jenkins API 使用 HTTP 请求进行数据交互,支持 JSON 和 XML 格式的响应数据。大部分请求都需要进行身份验证,可以使用 API Token 或 Basic Auth 进行认证。
API Token 获取
API 请求格式
http://<jenkins-server>/api/json
复制代码
二、常用 API 调用示例
获取 Jenkins 概况
curl -u <username>:<api-token> http://<jenkins-server>/api/json
复制代码
返回的数据包括 Jenkins 版本、节点信息、插件等。
2.获取所有 Jobs 列表
curl -u <username>:<api-token> http://<jenkins-server>/api/json?tree=jobs[name,color]
复制代码
tree
参数用于指定所需的数据字段,减少不必要的数据传输。
3. 获取特定 Job 信息
curl -u <username>:<api-token> http://<jenkins-server>/job/<job-name>/api/json
复制代码
返回的数据包括 Job 的配置、最近构建状态、健康报告等。
4.获取特定构造信息
curl -u <username>:<api-token> http://<jenkins-server>/job/<job-name>/<build-number>/api/json
复制代码
返回的数据包括构建参数、触发原因、构建日志 URL 等。
5.触发构建
curl -u <username>:<api-token> -X POST http://<jenkins-server>/job/<job-name>/build
复制代码
可以通过添加参数来触发带参数的构建:
curl -u <username>:<api-token> -X POST http://<jenkins-server>/job/<job-name>/buildWithParameters?PARAM1=value1&PARAM2=value2
复制代码
三、API 数据提取示例
以下是一些常见的 API 数据提取示例,使用 Python 和 requests
库进行演示。
安装 requests
库
2.提取 Jenkins 概况信息
import requests
from requests.auth import HTTPBasicAuth
jenkins_url = "http://<jenkins-server>/api/json"
username = "<username>"
api_token = "<api-token>"
response = requests.get(jenkins_url, auth=HTTPBasicAuth(username, api_token))
data = response.json()
print(data)
复制代码
3.获取所有 Jobs 列表
jenkins_url = "http://<jenkins-server>/api/json?tree=jobs[name,color]"
response = requests.get(jenkins_url, auth=HTTPBasicAuth(username, api_token))
jobs = response.json()['jobs']
for job in jobs:
print(f"Job Name: {job['name']}, Status: {job['color']}")
复制代码
4.获取特定 Job 的最近构建状态
job_name = "<job-name>"
jenkins_url = f"http://<jenkins-server>/job/{job_name}/api/json"
response = requests.get(jenkins_url, auth=HTTPBasicAuth(username, api_token))
job_info = response.json()
last_build = job_info['lastBuild']
last_build_url = last_build['url'] + 'api/json'
last_build_info = requests.get(last_build_url, auth=HTTPBasicAuth(username, api_token)).json()
print(f"Last Build Number: {last_build_info['number']}, Status: {last_build_info['result']}")
复制代码
5.触发构建并传递参数
job_name = "<job-name>"
params = {"PARAM1": "value1", "PARAM2": "value2"}
jenkins_url = f"http://<jenkins-server>/job/{job_name}/buildWithParameters"
response = requests.post(jenkins_url, params=params, auth=HTTPBasicAuth(username, api_token))
print("Build triggered" if response.status_code == 201 else "Failed to trigger build")
复制代码
四、最佳实践
安全性
高效性
错误处理
检查 HTTP 响应状态码,处理不同的错误情况。
使用重试机制处理临时性网络问题。
通过使用 Jenkins API,你可以高效地提取和管理 Jenkins 的数据,实现自动化脚本、监控、报告生成等功能。这不仅提高了工作效率,还增强了 Jenkins 的可操作性和灵活性。
评论