当前位置:首页 > 科技  > 软件

Jenkins Pipeline用户权限管理新技巧:打造安全高效的流水线!

来源: 责编: 时间:2024-05-24 08:46:06 246观看
导读什么是RBAC基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,这实现了更灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。图片当使用 RBAC 时,通过分析系统

什么是RBAC

基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,这实现了更灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,授予他们不同角色。你可以授予给用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色、角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从授予的角色里面继承所需的权限。5Xt28资讯网——每日最新资讯28at.com

大家可以看一下的案例更容易理解:5Xt28资讯网——每日最新资讯28at.com

用户角色分为管理员、开发、运维,各个角色并具备不同的权限。每个用户也具备单个与多个角色。5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

需求说明

本章节是通过一个企业案例进行讲解,需求如下:5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

接下来,我们根据上图的组织架构来创建用户与组。5Xt28资讯网——每日最新资讯28at.com

Jenkins权限如何分配:5Xt28资讯网——每日最新资讯28at.com

  • 开发组:只读权限
  • 运维组:管理员权限
  • 测试组:执行权限

配置权限

配置角色

图片图片5Xt28资讯网——每日最新资讯28at.com

分配权限

图片图片5Xt28资讯网——每日最新资讯28at.com

权限验证

张三(管理员),下图可以看到什么权限都有:5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

李四(只读),下图可以看到只有只读权限:5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

张三(执行权限),下图可以看到是有执行权限的:5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

配置Pipeline权限

需求说明

实际情况中,我们是通过Pipeline进行管理流水线的,接下来咱们针对Pipeline进行配置权限控制,详情如下图:5Xt28资讯网——每日最新资讯28at.com

图片图片5Xt28资讯网——每日最新资讯28at.com

权限配置:5Xt28资讯网——每日最新资讯28at.com

  • 运维组:管理员权限
  • 开发组:非生产环境只读权限
  • 测试组:非生产环境执行权限

权限配置

以Ruoyi- Gateway为例,在Pipeline里配置权限:5Xt28资讯网——每日最新资讯28at.com

DeployDev阶段(修改submitter配置):5Xt28资讯网——每日最新资讯28at.com

...    stage('DeployDev'){            steps {                echo "部署开发环境"                script {                    def userInput = input (                        message: '确定要发布到DEV环境吗?',                        parameters:[                            choice(name: '操作', choices: ['发布', '跳过'])                        ],                        ok: '确定',                        submitter: 'ops,qa', // 配置ops,qa组即可                        submitterParameter: 'APPROVER'                    )                    if (userInput['操作'] == '发布'){                        echo "部署Dev环境开始"                        ....

DeployUat阶段(修改submitter配置):5Xt28资讯网——每日最新资讯28at.com

....    stage('DeployUat'){            steps {                echo "部署测试环境"                 script {                    def userInput = input (                        message: '确定要发布到UAT环境吗?',                        parameters:[                            choice(name: '操作', choices: ['发布', '跳过'])                        ],                        ok: '确定',                        submitter: 'ops,qa', // 配置ops,qa组即可                        submitterParameter: 'APPROVER'                    )                    if (userInput['操作'] == '发布'){                        echo "发布"                        ....

DeployGray阶段(修改submitter配置):5Xt28资讯网——每日最新资讯28at.com

stage('DeployGray'){            steps {                echo "部署灰度环境"                 script {                    def GraysMode = input (                        message: '确定要灰度验证吗?',                        parameters:[                            choice(name: 'operation', choices: ['基于权重灰度','基于请求头灰度','跳过'])                        ],                        ok: '确定',                        submitter: 'ops',                        submitterParameter: 'APPROVER'                    )                    if (GraysMode['operation'] == '基于权重灰度'){                        def WeightMode = input (                        message: '请输入权重比例!',                        parameters:[                            string(name: 'workload_weight',defaultValue: '',description: ''),                            string(name: 'grayload_weight',defaultValue: '',description: '')                        ],                        ok: '确定',                        submitter: 'ops',                        submitterParameter: 'APPROVER'                    )                    sh """                     echo $pipeline_dir                     echo "打印编排文件详细信息"                     if [ -e "$pipeline_dir/prod/$Project_Name/deployment-gray.yml" ]; then                        cat $pipeline_dir/prod/$Project_Name/deployment-gray.yml | sed  "s/TAG/${Tag}/g"                         cat $pipeline_dir/prod/$Project_Name/deployment-gray.yml | sed  "s/TAG/${Tag}/g" | /usr/bin/kubectl apply -f  -                     fi                     echo "配置权重"                     echo ${WeightMode['grayload_weight']}                     if [ -e "$pipeline_dir/prod/$Project_Name/ingress-gray-weight.yml" ]; then                        cat $pipeline_dir/prod/$Project_Name/ingress-gray-weight.yml | sed  "s/WEIGHT-VALUE/${WeightMode['grayload_weight']}/g"                         cat $pipeline_dir/prod/$Project_Name/ingress-gray-weight.yml | sed  "s/WEIGHT-VALUE/${WeightMode['grayload_weight']}/g" | /usr/bin/kubectl apply -f  -                     fi                    """                    }                    if (GraysMode['operation'] == '基于请求头灰度'){                        GrayHeaderMode = input (                        message: '请输入请求头!',                        parameters:[                            string(name: 'header_key',defaultValue: '',description: ''),                            string(name: 'header_value',defaultValue: '',description: '')                        ],                        ok: '确定',                        submitter: 'ops',                        submitterParameter: 'APPROVER'                    )                                        sh """                     echo ${GrayHeaderMode['header_value']}                     echo $pipeline_dir                     echo "打印编排文件详细信息"                     if [ -e "$pipeline_dir/prod/$Project_Name/deployment-gray.yml" ]; then                        cat $pipeline_dir/prod/$Project_Name/deployment-gray.yml | sed  "s/TAG/${Tag}/g"                         cat $pipeline_dir/prod/$Project_Name/deployment-gray.yml | sed  "s/TAG/${Tag}/g" | /usr/bin/kubectl apply -f  -                     fi                                          echo "配置请求头"                     echo ${GrayHeaderMode['header_key']}                     echo ${GrayHeaderMode['header_value']}                     if [ -e "$pipeline_dir/prod/$Project_Name/ingress-gray-header.yml" ]; then                        cat $pipeline_dir/prod/$Project_Name/ingress-gray-header.yml | sed  "s/header-key/${GrayHeaderMode['header_key']}/g" | sed  "s/header-value/${GrayHeaderMode['header_value']}/g"                        cat $pipeline_dir/prod/$Project_Name/ingress-gray-header.yml | sed  "s/header-value/${GrayHeaderMode['header_key']}/g" | sed  "s/header-value/${GrayHeaderMode['header_value']}/g" | /usr/bin/kubectl apply -f  -                     fi                    """                    }                    // 默认模式为yes,如果跳过为no                    if (GraysMode['operation'] == '跳过'){                        GrayEnable='no'                    }                }            }

DeployProd阶段(修改submitter配置):5Xt28资讯网——每日最新资讯28at.com

stage('DeployProd'){            steps {                echo "部署生产环境"                 script {                    def userInput = input (                        message: '确定要发布到生产环境吗?',                        parameters:[                            choice(name: '操作', choices: ['发布', '跳过'])                        ],                        ok: '确定',                        submitter: 'ops',                        submitterParameter: 'APPROVER'                    )                    if (userInput['操作'] == '发布'){                        echo "发布"                        Namespace_Prod = sh(script: "cat $pipeline_dir/prod/$Project_Name/deployment.yml | grep namespace | awk -F ':' '{print /$2}'", returnStdout: true).trim()                        DeploymentName = sh(script: "cat $pipeline_dir/prod/$Project_Name/deployment.yml | grep name: |  head -n 1 | awk -F ':' '{print /$2}'", returnStdout: true).trim()                        Revsion_Prod = sh(script: "kubectl get deployment $DeploymentName -n ${Namespace_Prod} -o=jsnotallow='{.spec.template.spec.containers[*].image}' | awk -F ':' '{print /$NF}'", returnStdout: true).trim()                        GrayDeploymentName = sh(script: "cat $pipeline_dir/prod/$Project_Name/deployment-gray.yml | grep name: |  head -n 1 | awk -F ':' '{print /$2}'", returnStdout: true).trim()                        GrayServiceName = sh(script: "cat $pipeline_dir/prod/$Project_Name/service-gray.yml | grep name: |  head -n 1 | awk -F ':' '{print /$2}'", returnStdout: true).trim()                        GrayIngressName = sh(script: "cat $pipeline_dir/prod/$Project_Name/ingress-gray-header.yml | grep name: |  head -n 1 | awk -F ':' '{print /$2}'", returnStdout: true).trim()                        sh '''                        echo $pipeline_dir                        echo "开始部署生产环境"                        echo "打印编排文件详细信息"                        if [ -e "$pipeline_dir/prod/$Project_Name/deployment.yml" ]; then                          cat $pipeline_dir/prod/$Project_Name/deployment.yml | sed  "s/TAG/${Tag}/g"                          cat $pipeline_dir/prod/$Project_Name/deployment.yml | sed  "s/TAG/${Tag}/g" | /usr/bin/kubectl apply -f  -                        fi                        if [ -e "$pipeline_dir/prod/$Project_Name/service.yml" ]; then                           cat $pipeline_dir/prod/$Project_Name/service.yml                           cat $pipeline_dir/prod/$Project_Name/service.yml  | /usr/bin/kubectl apply -f  -                        fi                        if [ -e "$pipeline_dir/prod/$Project_Name/ingress.yml" ]; then                          cat $pipeline_dir/prod/$Project_Name/ingress.yml                          cat $pipeline_dir/prod/$Project_Name/ingress.yml  | /usr/bin/kubectl apply -f  -                        fi                        '''                        if (GrayEnable == 'yes'){                            sh """                        kubectl delete deployment ${GrayDeploymentName} -n ${Namespace_Prod}                        kubectl delete service  ${GrayServiceName} -n ${Namespace_Prod}                        kubectl delete ingress  ${GrayIngressName} -n ${Namespace_Prod}                        """                        }                    } else {                        echo "不发布"                    }                }            }            post {                success {                    wrap([$class: 'BuildUser']) {                    lark (                        robot: "2026ab67-7d07-46ec-a309-bebebaeaffbc",                        type: "CARD",                        title: " 
                

本文链接:http://www.28at.com/showinfo-26-90502-0.htmlJenkins Pipeline用户权限管理新技巧:打造安全高效的流水线!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Angular 18 正式发布,一起来看看都有哪些更新

下一篇: 很强!五个 python 高级技巧

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top