日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Jenkins Pipeline用戶權限管理新技巧:打造安全高效的流水線!

來源: 責編: 時間:2024-05-24 08:46:06 157觀看
導讀什么是RBAC基于角色的訪問控制(Role-based access control,簡稱 RBAC),指的是通過用戶的角色(Role)授權其相關權限,這實現了更靈活的訪問控制,相比直接授予用戶權限,要更加簡單、高效、可擴展。圖片當使用 RBAC 時,通過分析系統

什么是RBAC

基于角色的訪問控制(Role-based access control,簡稱 RBAC),指的是通過用戶的角色(Role)授權其相關權限,這實現了更靈活的訪問控制,相比直接授予用戶權限,要更加簡單、高效、可擴展。acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

當使用 RBAC 時,通過分析系統用戶的實際情況,基于共同的職責和需求,授予他們不同角色。你可以授予給用戶一個或多個角色,每個角色具有一個或多個權限,這種 用戶-角色、角色-權限 間的關系,讓我們可以不用再單獨管理單個用戶,用戶從授予的角色里面繼承所需的權限。acH28資訊網——每日最新資訊28at.com

大家可以看一下的案例更容易理解:acH28資訊網——每日最新資訊28at.com

用戶角色分為管理員、開發、運維,各個角色并具備不同的權限。每個用戶也具備單個與多個角色。acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

需求說明

本章節是通過一個企業案例進行講解,需求如下:acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

接下來,我們根據上圖的組織架構來創建用戶與組。acH28資訊網——每日最新資訊28at.com

Jenkins權限如何分配:acH28資訊網——每日最新資訊28at.com

  • 開發組:只讀權限
  • 運維組:管理員權限
  • 測試組:執行權限

配置權限

配置角色

圖片圖片acH28資訊網——每日最新資訊28at.com

分配權限

圖片圖片acH28資訊網——每日最新資訊28at.com

權限驗證

張三(管理員),下圖可以看到什么權限都有:acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

李四(只讀),下圖可以看到只有只讀權限:acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

張三(執行權限),下圖可以看到是有執行權限的:acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

配置Pipeline權限

需求說明

實際情況中,我們是通過Pipeline進行管理流水線的,接下來咱們針對Pipeline進行配置權限控制,詳情如下圖:acH28資訊網——每日最新資訊28at.com

圖片圖片acH28資訊網——每日最新資訊28at.com

權限配置:acH28資訊網——每日最新資訊28at.com

  • 運維組:管理員權限
  • 開發組:非生產環境只讀權限
  • 測試組:非生產環境執行權限

權限配置

以Ruoyi- Gateway為例,在Pipeline里配置權限:acH28資訊網——每日最新資訊28at.com

DeployDev階段(修改submitter配置):acH28資訊網——每日最新資訊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配置):acH28資訊網——每日最新資訊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配置):acH28資訊網——每日最新資訊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配置):acH28資訊網——每日最新資訊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.www897cc.com/showinfo-26-90502-0.htmlJenkins Pipeline用戶權限管理新技巧:打造安全高效的流水線!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: 很強!五個 python 高級技巧

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 江安县| 沙雅县| 西林县| 镇平县| 九龙县| 诏安县| 成安县| 伊吾县| 土默特右旗| 东乌珠穆沁旗| 六枝特区| 西盟| 乌兰县| 灌阳县| 潍坊市| 博野县| 榆中县| 怀远县| 黔西| 荥阳市| 琼海市| 方山县| 余江县| 武乡县| 普安县| 丘北县| 二连浩特市| 阿拉善左旗| 株洲市| 左权县| 桂平市| 怀安县| 鱼台县| 阿图什市| 嘉禾县| 额济纳旗| 陇西县| 九龙城区| 原平市| 万山特区| 北海市|