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

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

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

一、实现流程

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

2.流转审批节点

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

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

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

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

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

二、核心代码

代码语言:text
AI代码解释
复制
#!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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​微服务CI/CD实践-GitOps完整设计与实现
首先准备一个代码库:https://github.com/DevOpsCICDCourse/microservicescicd/blob/main/microservice-demo-service-master.zip
DevOps云学堂
2021/02/26
1.3K0
基于Jenkins+Argocd+Argo Rollouts的DevOps实现并用金丝雀发布
本文主要介绍使用Jenkins配合argocd以及argo rollouts实现CI/CD。其中jenkins配合argocd做CI/CD前面已经介绍过了,这里不再赘述,不懂的地方可以移步《使用Jenkins和Argocd实现CI/CD》。
没有故事的陈师傅
2021/01/04
4.8K1
基于Jenkins+Argocd+Argo Rollouts的DevOps实现并用金丝雀发布
史诗级整理 Jenkins 流水线详解
jenkins 有 2 种流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。
我的小碗汤
2023/03/19
8.1K0
史诗级整理 Jenkins 流水线详解
Jenkins(八)
Jenkins pipeline中定义参数使用parameters指令,只允许放在pipeline块下
zx钟
2019/07/18
1.6K0
Jenkins(八)
Yearning钉钉审批思路分享(一)
上篇内容我们大致说明了一下Yearning如何集成外部工单通知,使其解耦支持更多自定义通知渠道。前几天有小伙伴提起如何集成飞书在线审批呢,当然飞书也好,钉钉也好实现思路都是一样的。因此我们这里简单的说明一下如何实现钉钉在线审批思路。
用户1107783
2024/06/17
2720
Yearning钉钉审批思路分享(一)
2.Jenkins进阶之流水线pipeline语法入门学习
Q: 什么是 Groovy 语言 答: Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高(编程语言的开发效率和性能是相互矛盾的,越高级的编程语言性能越差,因为意味着更多底层的封装,不过开发效率会更高,需结合使用场景做取舍)
全栈工程师修炼指南
2022/09/29
18.3K0
2.Jenkins进阶之流水线pipeline语法入门学习
基于Jenkins和Argocd实现CI/CD
CI/CD并不是陌生的东西,大部分企业都有自己的CI/CD,不过今天我要介绍的是使用Jenkins和GitOps实现CI/CD。
没有故事的陈师傅
2020/12/02
2.4K0
基于Jenkins和Argocd实现CI/CD
pipeline input步骤
执行imput步骤会暂停pipeline,直到用户输入参数。这是一种特殊的参数化pipeline的方法。
陈不成i
2021/06/03
1.7K0
Jenkins API+Pipeline深度实践之input的自动化
首先回过头再来看看pipeline input的语法及功能,参考我之前总结的pipeline input语法
仙人技术
2021/03/24
2.3K0
Jenkins2 学习系列11 -- 参数化构建
有些项目的构建需要动态的传入一些参数,比如需要用户输入一些内容,或者上传一个文件,或者为一些配置打钩,作为不同的参数,当构建时这些参数作为环境变量来影响具体的构建过程。
mafeifan
2019/07/22
1.3K0
Jenkins2 学习系列11 -- 参数化构建
基于Jira的运维发布平台的设计与实现
环节看似简单,但是中间其实是有断层的。一般企业在走上线流程都是通过一些公共渠道,比如邮件、钉钉、飞书的流程,这些都很难和运维执行上线发布平台进行关联上,而且也不够直观。所以我们就需要解决以下几个问题:
没有故事的陈师傅
2021/06/24
1.6K0
基于Jira的运维发布平台的设计与实现
使用Jenkins Pipeline自动化构建发布Java项目
Pipeline,简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
星哥玩云
2022/07/26
1.1K0
使用Jenkins Pipeline自动化构建发布Java项目
Jenkins Pipeline+SonarQube+Python集成钉钉群消息自动通知(webhook版)
SonarQube 最需要的功能之一是能够在质量未达到预期水平时使通知或构建失败。我们知道在 SonarQube 中具有质量阀的内置概念,在上文 Jenkins+SonarQube+Gitlab集成钉钉群消息自动通知(Python版) 我们是试图通过在主动等待其执行结束来获取扫描结果功能。但该解决方案并不是最好的,这意味着Jenkins 将“等待”忙碌,并且必须这个时间可控。
高楼Zee
2019/10/13
4.5K0
『高级篇』docker之gitlab和jenkins-CICD流程(43)
PS:最后总结下,建议jenkins不要使用容器安装,我用容器安装入了至少十几个坑,对了解命令还是有好处的。我总结几点
IT架构圈
2018/12/17
2.9K0
『高级篇』docker之gitlab和jenkins-CICD流程(43)
Jenkinsfile里定义对象和函数,获取git提交人, 发送钉钉通知
自从开始使用Jenkinsfile作为Jenkins配置后就一发不可收,因为开发者自定义CI脚本实在太方便了。
Ryan-Miao
2020/03/27
2.1K0
从0搭建属于自己的Jenkins持续集成平台
Jenkins在日常工作中占据了一个非常重要的角色,帮助我们节省了大量用于构建的时间。有些公司有运维大哥对Jenkins进行维护,如果没有那只能自己动手了。俗话说的好自己动手丰衣足食,所以本文就从0开始搭建属于自己的Jenkins持续平台。主要包含,普通项目构建、流水线构建、多分支流水线构建并将构建结果辅以钉钉通知。
不一样的科技宅
2020/07/08
1.1K1
基于Jenkins Pipeline构建企业级CI/CD
本设计通过Jenkins Generic Webhook Trigger 插件实现了基于Webhook自动触发流水线构建。
用户1107783
2024/05/21
2570
基于Jenkins Pipeline构建企业级CI/CD
【Jenkins系列】-Pipeline语法全集
parameters指令提供用户在触发Pipeline时的参数列表。这些参数值通过该params对象可用于Pipeline步骤
DevOps在路上
2023/05/16
2.2K0
【Jenkins系列】-Pipeline语法全集
钉钉机器人自动关联 GitHub 发送 approval prs
摘要:用技术来解决 PM 枯燥的 approval pr 工作,本文将阐述如何自动化获取 GitHub Organization 下各个 repo 待 merge 的 pull requests 并通知相关人员,告别每日的手动操作。
NebulaGraph
2020/06/17
1.5K0
钉钉机器人自动关联 GitHub 发送 approval prs
3.Jenkins进阶之流水线pipeline基础使用实践
描述:此处重新不在累述新建流水线任务(maven-pipeline-helloword)而是直接进行配置测试等关键项; 流程:代码拉取 -> 代码检测 -> 代码构建 -> 代码部署 -> 消息通知
全栈工程师修炼指南
2022/09/29
4.7K0
3.Jenkins进阶之流水线pipeline基础使用实践
推荐阅读
相关推荐
​微服务CI/CD实践-GitOps完整设计与实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档