前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins结合钉钉/企微机器人实现CICD审批功能

Jenkins结合钉钉/企微机器人实现CICD审批功能

原创
作者头像
浅时光博客
发布2022-09-11 11:08:55
2.3K0
发布2022-09-11 11:08:55
举报
文章被收录于专栏:云原生K8s云原生K8s

一、实现流程

1.代码自动构建(我这里做的手动触发,你可以调整为自动触发构建)

2.流转审批节点

3.触发钉钉或企业微信或其他平台机器人发布审批信息

4.审批人登入Jenkins填写随机Token确认审批发布

5.Token认证成功,发布站内信进行通知发版具体时间

6.到达发布时间即可自动发布线上K8s集群

说明:本文不会详细描述整个过程,只是把大致流程讲一下,将核心的代码贴出来,大家可自行根据自己的项目去改造。相关的 Jenkinsfile文件已经上传至本人的 GitHub仓库,可自行进行克隆下载;如果对您有帮助别忘记点个start

二、核心代码

代码语言:text
复制
#!groovy
@Library('jenkinslib') _  
//调用方法库文件
def approval = new org.devops.library()

def skipRemainingStages = false   //当前节点是否跳过
def input_message   //提示语
def randomToken    //发布秘钥
def skipadminUser = false


pipeline {
    agent any
    options {
        timestamps() // 在日志中打印时间
        skipDefaultCheckout() // 删除隐式的checkout scm 语句
        timeout(time:1, unit:'HOURS') // 流水线超时设置为1H
    }
    environment {
        //生成随机数0-10000
        max = 100000
        randomToken = "${Math.abs(new Random().nextInt(max+1))}"
        approve = "${approve}"  //jenkins参数化构建定义审批人员名单
    }

        stage("发送审批通知"){
            when {
                expression { env.approve != 'NO' }
            }

            steps{
                wrap([$class: 'BuildUser']) {
                script {
                    //获取当前登录用户账户、姓名
                    Applier_id = "${env.BUILD_USER_ID}"
                    Applier_name = "${env.BUILD_USER}"
                    }
                }
                script{
                    //判断审批人
                    if ("$adminUser" != ""){
                        adminUser = "$adminUser"
                        //如果审批人为自己,则退出任务
                        if (Applier_id == adminUser){
                            error '审批人不能为本人,任务已终止'
                        } 
                    } else{
                        error '审批人不能为空,任务已终止'
                    }
                    if ("$adminUser" == "dingqz") {
                        env.approvalDD = "xxx"
                        input_message = "$Applier_name 申请发布生产"
                        approval.HttpReq("生产发布申请")
                    } else if ("$adminUser" == "xxx") {
                        env.approvalDD = "xxxx"   //定义变量,赋值对应审批人手机号,实现钉钉消息推送@指定审批人员
                        input_message = "$Applier_name 申请发布生产"
                        approval.HttpReq("生产发布申请")
                    } else {
                        error '审批人信息获取失败,任务已终止'
                    }
                }
            }
        }
   
        stage("等待审批"){
            when {
                expression { env.approve != 'NO' }
            }
            steps{
                script{
                    def isAbort  = false   //取消按钮
                    timeout(time:1, unit:'HOURS'){  //等待审批人审批,并通过timeout设置任务过期时间,防止任务永远挂起
                        try {
                           def token = input(
                               id: 'inputap', message: "$input_message", ok:"同意", submitter:"$adminUser", parameters: [
                               [$class: 'StringParameterDefinition',defaultValue: "", name: 'token',description: '请输入发布的秘钥' ]
                               ])
                            if ( "${token}" == env.randomToken) {
                            } else {
                               error '秘钥错误,任务已终止'
                            }
                        }catch(e) { // input false
                           throw e
                       }
                   }
                }
            }
        }
          
        stage('版本发布') {
            steps{
                script {
                    printSh("""
                      echo "版本发布"
                    """)
                }
            }
        }
    }
    post {
        success {
            script {
                echo "success"
            }
        }
        failure {
            script {
                echo "failure"
            }
        }
        aborted {           
            script {
                echo "aborted"
            }
        }
    }
}

三、效果演示

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实现流程
  • 二、核心代码
  • 三、效果演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档