一、流程介绍
- 自动化代码构建:代码构建过程已自动化,可选择自动触发,无需手动干预。
- 审批流程:引入流程审批节点,确保发布前经过审批流程的验证。
- 通知机制:通过钉钉、企业微信等平台的机器人,自动触发发布审批信息,实现及时通知。
- 确认审批:审批人登录Jenkins平台,在指定界面填写随机Token,用于确认发布审批。
- 发布通知:在Token认证成功后,系统会自动发送站内信通知,提供详细的发版时间信息。
- 自动发布:到达预定发布时间后,系统将自动触发线上K8s集群的发布操作。
通过这个优化后的流程,实现了从代码构建到发布的端到端自动化,结合审批节点和通知机制,确保了流程的可控性和透明度,进一步提升了整体的流程效率和管理质量

特别提示:本文仅概述建设过程,附上核心代码,不适合
相关的Jenkinsfile文件已经上传至本人的GitHub仓库,可自行进行克隆下载;如果对您有帮助别忘记点个
start
二、核心代码
#!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"
}
}
}
}
三、效果演示




感谢分享,学习
感谢分享,学习
感谢分享,学习
感谢分享,学习
厉害了,学习下
厉害了,学习下