如何通过Python脚本实现Jenkins矩阵权限配置自动化?
用Python自动化Jenkins矩阵权限配置的实现方案
核心思路
Jenkins的矩阵权限配置本质是修改全局或项目的config.xml配置文件,通过API提交修改后的配置内容即可完成权限更新,无需依赖专门的权限API。
具体步骤
1. 获取目标配置文件
- 全局权限配置:请求
http://<jenkins-url>/config.xml - 项目级权限配置:请求
http://<jenkins-url>/job/<job-name>/config.xml - 使用Python的
requests库发送GET请求,带上Jenkins认证信息(API Token或用户名密码)
2. 解析并修改XML配置
- 用
xml.etree.ElementTree或lxml库解析返回的XML内容 - 定位矩阵权限节点:全局配置找
<authorizationStrategy>下的<matrix>;项目级找<properties>下的<hudson.security.AuthorizationMatrixProperty>里的<matrix> - 添加/修改权限:在
<matrix>下新增<permission>节点,格式为权限类:用户名,例如hudson.model.Item.Build:user1
3. 提交修改后的配置
- 将修改后的XML转为字符串,发送POST请求到原配置URL,带上
Content-Type: application/xml请求头和认证信息
代码示例
import requests import xml.etree.ElementTree as ET from requests.auth import HTTPBasicAuth # Jenkins基础配置 JENKINS_URL = "http://your-jenkins-url" USERNAME = "your-username" API_TOKEN = "your-api-token" JOB_NAME = "your-job-name" # 项目级配置需填写,全局配置可忽略 def update_jenkins_permissions(is_global=True, permissions=None): # 确定配置文件URL config_url = f"{JENKINS_URL}/config.xml" if is_global else f"{JENKINS_URL}/job/{JOB_NAME}/config.xml" # 获取当前配置 response = requests.get(config_url, auth=HTTPBasicAuth(USERNAME, API_TOKEN)) response.raise_for_status() root = ET.fromstring(response.content) # 定位矩阵权限节点 matrix_node = root.find(".//authorizationStrategy/hudson.security.GlobalMatrixAuthorizationStrategy/matrix") if is_global else root.find(".//properties/hudson.security.AuthorizationMatrixProperty/matrix") # 清除目标用户原有权限(可选操作) if permissions: for perm in permissions: user = perm.split(":")[1] existing_perms = matrix_node.findall(f".//permission[contains(text(),':{user}')]") for ep in existing_perms: matrix_node.remove(ep) # 新增权限 for perm in permissions: perm_element = ET.SubElement(matrix_node, "permission") perm_element.text = perm # 转换为XML字符串并提交 updated_xml = ET.tostring(root, encoding="utf-8") headers = {"Content-Type": "application/xml"} response = requests.post(config_url, data=updated_xml, headers=headers, auth=HTTPBasicAuth(USERNAME, API_TOKEN)) response.raise_for_status() print("权限配置更新成功") # 示例1:给user1添加项目构建、查看权限(项目级) update_jenkins_permissions( is_global=False, permissions=[ "hudson.model.Item.Build:user1", "hudson.model.Item.Read:user1" ] ) # 示例2:给user2添加全局读取权限(全局级) update_jenkins_permissions( is_global=True, permissions=[ "hudson.model.Hudson.Read:user2" ] )
注意事项
- 操作前务必备份
config.xml,避免配置错误导致权限混乱 - 确保操作账号拥有
Overall/Administer(全局配置)或Job/Configure(项目级)权限 - 批量处理用户时建议分批次提交,避免单次请求数据量过大超时
- 可结合CSV/Excel批量导入用户权限列表,循环调用函数完成批量配置
内容的提问来源于stack exchange,提问作者sudhar chrome
相关产品推荐
相关产品推荐

