Jenkins 2.x下如何备份基于项目的矩阵授权策略配置?
备份Jenkins 2.x「基于项目的矩阵授权策略」的脚本化方案
针对你问的Jenkins 2.x下备份「基于项目的矩阵授权策略」的需求,这里分享几个实用的脚本化方案,以及一些插件替代思路,正好覆盖你想要的非手动XML/Thin Backup的方式:
一、用Groovy脚本备份全局矩阵授权配置
Jenkins原生支持Groovy脚本控制台,我们可以直接通过Jenkins API读取全局授权配置,避免手动操作XML的繁琐。
你可以在Jenkins的「脚本控制台」(路径:Manage Jenkins > Script Console)执行下面的脚本,它会自动检查当前全局授权策略是否为目标类型,然后提取所有用户/组的权限并保存到指定文件:
import jenkins.model.Jenkins import hudson.security.ProjectMatrixAuthorizationStrategy def jenkins = Jenkins.get() def authStrategy = jenkins.getAuthorizationStrategy() if (authStrategy instanceof ProjectMatrixAuthorizationStrategy) { // 提取所有已配置的权限 def permissions = authStrategy.getGrantedPermissions() def backupContent = new StringBuilder() backupContent.append("=== 全局基于项目的矩阵授权策略备份 ===\n") backupContent.append("备份时间: ${new Date()}\n\n") permissions.each { sid, perms -> backupContent.append("用户/组: ${sid}\n") perms.each { perm -> backupContent.append(" - ${perm}\n") } backupContent.append("\n") } // 自定义备份路径,记得替换成你实际的Jenkins目录 def backupFile = new File("/var/jenkins_home/backup/global_matrix_auth_backup.txt") backupFile.parentFile.mkdirs() backupFile.text = backupContent.toString() println("✅ 全局矩阵授权配置已备份到: ${backupFile.absolutePath}") } else { println("⚠️ 当前全局授权策略不是基于项目的矩阵授权策略,跳过备份") }
二、批量备份单个作业的矩阵授权配置
如果你的部分作业启用了独立的基于项目的矩阵授权(而非继承全局配置),可以用下面的脚本批量备份所有作业的权限配置:
import jenkins.model.Jenkins import hudson.security.ProjectMatrixAuthorizationStrategy def jenkins = Jenkins.get() // 自定义备份目录 def backupDir = new File("/var/jenkins_home/backup/job_matrix_auths") backupDir.mkdirs() jenkins.items.each { job -> def authStrategy = job.getAuthorizationStrategy() if (authStrategy instanceof ProjectMatrixAuthorizationStrategy) { def backupContent = new StringBuilder() backupContent.append("=== 作业[${job.name}]的基于项目的矩阵授权策略备份 ===\n") backupContent.append("备份时间: ${new Date()}\n\n") def permissions = authStrategy.getGrantedPermissions() permissions.each { sid, perms -> backupContent.append("用户/组: ${sid}\n") perms.each { perm -> backupContent.append(" - ${perm}\n") } backupContent.append("\n") } def backupFile = new File(backupDir, "${job.name}_matrix_auth_backup.txt") backupFile.text = backupContent.toString() println("✅ 作业[${job.name}]的矩阵授权配置已备份完成") } else { println("ℹ️ 作业[${job.name}]未启用独立的基于项目的矩阵授权,跳过备份") } }
三、让备份自动化
如果想要定期自动执行备份,可以这么做:
- 创建一个自由风格的Jenkins作业
- 安装
Groovy插件后,在「构建步骤」里添加「执行系统Groovy脚本」,把上面的脚本粘贴进去 - 设置构建触发器为定时任务,比如每天凌晨1点执行:
0 1 * * *
四、插件替代思路
你提到暂未找到专门的插件,这里给两个可行的方向:
- Configuration as Code (JCasC):把Jenkins的所有配置(包括全局矩阵授权)写成YAML文件,备份这个YAML就相当于备份了授权配置,还能实现「配置即代码」的版本管理。全局矩阵授权的YAML示例大概是这样:
jenkins: authorizationStrategy: projectMatrix: grantedPermissions: - "hudson.model.Hudson.Administer:admin" - "hudson.model.Item.Read:dev-team" # 按需添加更多权限配置 - 自定义轻量插件:如果有Java开发能力,可以基于Jenkins的API开发一个小插件,专门做矩阵授权的导出/导入,不过这个成本相对高一些,适合有定制需求的场景。
另外补充你提到的小细节:当作业启用了独立的矩阵授权后,全局配置的禁用/恢复确实不会影响作业的配置,因为作业的权限配置是存在各自的job/config.xml文件里,和全局配置是独立存储的。
内容的提问来源于stack exchange,提问作者soBusted
相关产品推荐
相关产品推荐

