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

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

開發(fā) 前端
當(dāng)使用 RBAC 時(shí),通過分析系統(tǒng)用戶的實(shí)際情況,基于共同的職責(zé)和需求,授予他們不同角色。你可以授予給用戶一個(gè)或多個(gè)角色,每個(gè)角色具有一個(gè)或多個(gè)權(quán)限,這種 用戶-角色、角色-權(quán)限 間的關(guān)系,讓我們可以不用再單獨(dú)管理單個(gè)用戶,用戶從授予的角色里面繼承所需的權(quán)限。

什么是RBAC

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

圖片圖片

當(dāng)使用 RBAC 時(shí),通過分析系統(tǒng)用戶的實(shí)際情況,基于共同的職責(zé)和需求,授予他們不同角色。你可以授予給用戶一個(gè)或多個(gè)角色,每個(gè)角色具有一個(gè)或多個(gè)權(quán)限,這種 用戶-角色、角色-權(quán)限 間的關(guān)系,讓我們可以不用再單獨(dú)管理單個(gè)用戶,用戶從授予的角色里面繼承所需的權(quán)限。

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

用戶角色分為管理員、開發(fā)、運(yùn)維,各個(gè)角色并具備不同的權(quán)限。每個(gè)用戶也具備單個(gè)與多個(gè)角色。

圖片圖片

需求說明

本章節(jié)是通過一個(gè)企業(yè)案例進(jìn)行講解,需求如下:

圖片圖片

接下來,我們根據(jù)上圖的組織架構(gòu)來創(chuàng)建用戶與組。

Jenkins權(quán)限如何分配:

  • 開發(fā)組:只讀權(quán)限
  • 運(yùn)維組:管理員權(quán)限
  • 測試組:執(zhí)行權(quán)限

配置權(quán)限

配置角色

圖片圖片

分配權(quán)限

圖片圖片

權(quán)限驗(yàn)證

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

圖片圖片

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

圖片圖片

張三(執(zhí)行權(quán)限),下圖可以看到是有執(zhí)行權(quán)限的:

圖片圖片

配置Pipeline權(quán)限

需求說明

實(shí)際情況中,我們是通過Pipeline進(jìn)行管理流水線的,接下來咱們針對(duì)Pipeline進(jìn)行配置權(quán)限控制,詳情如下圖:

圖片圖片

權(quán)限配置:

  • 運(yùn)維組:管理員權(quán)限
  • 開發(fā)組:非生產(chǎn)環(huán)境只讀權(quán)限
  • 測試組:非生產(chǎn)環(huán)境執(zhí)行權(quán)限

權(quán)限配置

以Ruoyi- Gateway為例,在Pipeline里配置權(quán)限:

DeployDev階段(修改submitter配置):

...
    stage('DeployDev'){
            steps {
                echo "部署開發(fā)環(huán)境"
                script {
                    def userInput = input (
                        message: '確定要發(fā)布到DEV環(huán)境嗎?',
                        parameters:[
                            choice(name: '操作', choices: ['發(fā)布', '跳過'])
                        ],
                        ok: '確定',
                        submitter: 'ops,qa', // 配置ops,qa組即可
                        submitterParameter: 'APPROVER'
                    )
                    if (userInput['操作'] == '發(fā)布'){
                        echo "部署Dev環(huán)境開始"

                        ....

DeployUat階段(修改submitter配置):

....
    stage('DeployUat'){
            steps {
                echo "部署測試環(huán)境"
                 script {
                    def userInput = input (
                        message: '確定要發(fā)布到UAT環(huán)境嗎?',
                        parameters:[
                            choice(name: '操作', choices: ['發(fā)布', '跳過'])
                        ],
                        ok: '確定',
                        submitter: 'ops,qa', // 配置ops,qa組即可
                        submitterParameter: 'APPROVER'
                    )
                    if (userInput['操作'] == '發(fā)布'){
                        echo "發(fā)布"


                        ....

DeployGray階段(修改submitter配置):

stage('DeployGray'){
            steps {
                echo "部署灰度環(huán)境"
                 script {
                    def GraysMode = input (
                        message: '確定要灰度驗(yàn)證嗎?',
                        parameters:[
                            choice(name: 'operation', choices: ['基于權(quán)重灰度','基于請(qǐng)求頭灰度','跳過'])
                        ],
                        ok: '確定',
                        submitter: 'ops',
                        submitterParameter: 'APPROVER'
                    )
                    if (GraysMode['operation'] == '基于權(quán)重灰度'){
                        def WeightMode = input (
                        message: '請(qǐng)輸入權(quán)重比例!',
                        parameters:[
                            string(name: 'workload_weight',defaultValue: '',description: ''),
                            string(name: 'grayload_weight',defaultValue: '',description: '')
                        ],
                        ok: '確定',
                        submitter: 'ops',
                        submitterParameter: 'APPROVER'
                    )
                    sh """
                     echo $pipeline_dir
                     echo "打印編排文件詳細(xì)信息"
                     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 "配置權(quán)重"

                     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'] == '基于請(qǐng)求頭灰度'){
                        GrayHeaderMode = input (
                        message: '請(qǐng)輸入請(qǐng)求頭!',
                        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 "打印編排文件詳細(xì)信息"

                     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 "配置請(qǐng)求頭"
                     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
                    """
                    }
                    // 默認(rèn)模式為yes,如果跳過為no
                    if (GraysMode['operation'] == '跳過'){
                        GrayEnable='no'
                    }
                }
            }

DeployProd階段(修改submitter配置):

stage('DeployProd'){
            steps {
                echo "部署生產(chǎn)環(huán)境"
                 script {
                    def userInput = input (
                        message: '確定要發(fā)布到生產(chǎn)環(huán)境嗎?',
                        parameters:[
                            choice(name: '操作', choices: ['發(fā)布', '跳過'])
                        ],
                        ok: '確定',
                        submitter: 'ops',
                        submitterParameter: 'APPROVER'
                    )
                    if (userInput['操作'] == '發(fā)布'){
                        echo "發(fā)布"
                        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 "開始部署生產(chǎn)環(huán)境"
                        echo "打印編排文件詳細(xì)信息"

                        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 "不發(fā)布"
                    }
                }
            }
            post {
                success {
                    wrap([$class: 'BuildUser']) {
                    lark (
                        robot: "2026ab67-7d07-46ec-a309-bebebaeaffbc",
                        type: "CARD",
                        title: "??  Jenkins 應(yīng)用發(fā)布成功",
                        text: [
                            "?? **應(yīng)用名稱**:[${JOB_NAME}](${JOB_URL})",
                            "?? **應(yīng)用環(huán)境**:Prod",
                            "?? **任務(wù)編號(hào)**:[${BUILD_DISPLAY_NAME}](${BUILD_URL})",
                            "?? **發(fā)布狀態(tài)**: <font color='green'>成功</font>",
                            "?? **鏡像版本**: $Tag",
                            "?? **鏡像倉庫**: harbor.kubesre.com:8443/kubesre/$Project_Name",
                            "?? **執(zhí)  行 者**: ${env.BUILD_USER}",
                            "<at id=all></at>"
                        ],
                        buttons: [
                           [
                              title: "更改記錄",
                              url: "${BUILD_URL}changes"
                           ],
                           [
                              title: "控制臺(tái)",
                              type: "danger",
                              url: "${BUILD_URL}console"
                           ]
                        ]
                    )}
                }
            }
        }

驗(yàn)證

觸發(fā)流水線,開發(fā)組李四用戶登錄:

圖片圖片

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

圖片圖片

觸發(fā)流水線,運(yùn)維組張三用戶登錄:

圖片 圖片

責(zé)任編輯:武曉燕 來源: 云原生運(yùn)維圈
相關(guān)推薦

2023-05-10 15:08:00

Pipeline設(shè)計(jì)模式

2017-03-02 14:12:13

流水線代碼Clojure

2018-10-23 16:35:19

華為云

2019-11-07 09:00:39

Jenkins流水線開源

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開源流水線

2017-02-28 16:00:45

DevOpsMarkdownreST

2022-07-18 06:05:28

Gitlab流水線

2024-01-07 12:47:35

Golang流水線設(shè)計(jì)模式

2021-11-08 07:41:16

Go流水線編程

2021-10-12 08:47:01

Nexus存儲(chǔ)庫管理器DevOps

2021-12-24 08:02:48

GitLabCI模板庫流水線優(yōu)化

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
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品国产乱码久久久久久果冻传媒 | 国产高清视频 | 自拍偷拍精品 | 国产精产国品一二三产区视频 | 日韩成人一区 | 国产高潮好爽受不了了夜夜做 | 超级碰在线 | 久久久久久亚洲欧洲 | caoporn视频在线 | 黄色免费网站在线看 | 国产视频一区在线观看 | 狠狠av | 精品国产三级 | 欧美一级欧美三级在线观看 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 久久精品一区二区三区四区 | 欧美1区2区| 日日骚av | 999久久久免费精品国产 | 国产成人福利在线观看 | 北条麻妃99精品青青久久主播 | 欧美日韩高清一区二区三区 | 91成人在线视频 | 成人在线h| 亚洲午夜精品一区二区三区他趣 | 欧洲成人免费视频 | aaa一区 | 国产精品视频中文字幕 | 亚洲成人三级 | 欧美影院| 日韩亚洲视频在线 | 久久av一区二区三区 | 精品91 | 欧美日韩手机在线观看 | 91成人精品 | 欧美成人免费在线 | 国产ts人妖另类 | 中文字幕男人的天堂 | 亚洲欧洲一区二区 | 中文字幕精品视频在线观看 | 福利网址 |