成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

什么是RBAC

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

圖片圖片

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

大家可以看一下的案例更容易理解:

用戶角色分為管理員、開發、運維,各個角色并具備不同的權限。每個用戶也具備單個與多個角色。

圖片圖片

需求說明

本章節是通過一個企業案例進行講解,需求如下:

圖片圖片

接下來,我們根據上圖的組織架構來創建用戶與組。

Jenkins權限如何分配:

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

配置權限

配置角色

圖片圖片

分配權限

圖片圖片

權限驗證

張三(管理員),下圖可以看到什么權限都有:

圖片圖片

李四(只讀),下圖可以看到只有只讀權限:

圖片圖片

張三(執行權限),下圖可以看到是有執行權限的:

圖片圖片

配置Pipeline權限

需求說明

實際情況中,我們是通過Pipeline進行管理流水線的,接下來咱們針對Pipeline進行配置權限控制,詳情如下圖:

圖片圖片

權限配置:

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

權限配置

以Ruoyi- Gateway為例,在Pipeline里配置權限:

DeployDev階段(修改submitter配置):

...
    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配置):

....
    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配置):

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配置):

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: "??  Jenkins 應用發布成功",
                        text: [
                            "?? **應用名稱**:[${JOB_NAME}](${JOB_URL})",
                            "?? **應用環境**:Prod",
                            "?? **任務編號**:[${BUILD_DISPLAY_NAME}](${BUILD_URL})",
                            "?? **發布狀態**: <font color='green'>成功</font>",
                            "?? **鏡像版本**: $Tag",
                            "?? **鏡像倉庫**: harbor.kubesre.com:8443/kubesre/$Project_Name",
                            "?? **執  行 者**: ${env.BUILD_USER}",
                            "<at id=all></at>"
                        ],
                        buttons: [
                           [
                              title: "更改記錄",
                              url: "${BUILD_URL}changes"
                           ],
                           [
                              title: "控制臺",
                              type: "danger",
                              url: "${BUILD_URL}console"
                           ]
                        ]
                    )}
                }
            }
        }

驗證

觸發流水線,開發組李四用戶登錄:

圖片圖片

觸發流水線,測試組王五用戶登錄:

圖片圖片

觸發流水線,運維組張三用戶登錄:

圖片 圖片

責任編輯:武曉燕 來源: 云原生運維圈
相關推薦

2023-05-10 15:08:00

Pipeline設計模式

2017-03-02 14:12:13

流水線代碼Clojure

2019-11-07 09:00:39

Jenkins流水線開源

2018-10-23 16:35:19

華為云

2017-02-28 15:40:30

Docker流水線Azure

2013-06-06 09:31:52

2023-05-26 08:31:09

2021-06-26 14:22:34

Tekton流水線Kubernetes

2022-01-26 08:12:42

Jenkins開源流水線

2024-01-07 12:47:35

Golang流水線設計模式

2021-11-08 07:41:16

Go流水線編程

2017-02-28 16:00:45

DevOpsMarkdownreST

2022-07-18 06:05:28

Gitlab流水線

2021-10-12 08:47:01

Nexus存儲庫管理器DevOps

2021-12-24 08:02:48

GitLabCI模板庫流水線優化

2023-08-18 10:24:52

GitLabCI 流水線

2020-10-25 11:28:12

開源端到端流水線

2021-06-18 05:48:02

Tekton DevopsKubernetes

2023-09-27 08:24:49

2021-06-28 06:32:46

Tekton Kubernetes Clone
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久久久久国产精华液 | 久久久免费电影 | 亚洲人成网站777色婷婷 | 性大毛片视频 | 2019天天干夜夜操 | 国产在线一区观看 | 国产成人精品一区二区三区 | 99爱在线视频 | 视频在线亚洲 | 欧美日韩在线免费观看 | 免费在线观看成人 | 亚洲高清视频在线 | 伊人青青久久 | 91毛片在线看 | 国产一区二区三区在线 | 日本不卡一区二区三区在线观看 | 91伦理片 | 男人电影天堂 | 婷婷综合网 | 欧美一区二区网站 | 亚洲视频在线观看一区二区三区 | 丁香婷婷在线视频 | 欧美一区永久视频免费观看 | 国产精品成人一区二区三区 | 国产欧美日韩在线 | 成人黄色在线 | 免费看黄色国产 | 欧美精品欧美精品系列 | 国产精品久久久久久久久大全 | 日日夜夜精品视频 | 亚洲精品9999久久久久 | 亚洲www啪成人一区二区 | 中国毛片免费 | 黄色网址大全在线观看 | 亚洲国产欧美一区二区三区久久 | 国产乱码精品一区二区三区中文 | 狠狠av | 欧美日韩大陆 | 午夜看片网站 | 久久99精品久久久水蜜桃 | 欧美日韩午夜精品 |