You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:42:41