一、安装所需插件
实现邮箱审批功能,需要使用到下面的几个插件工具,需
Pipeline:Stage View:管道阶段视图插件Conditional BuildStep:有条件的构建步骤AnsiColor:Jenkins ANSI颜色插件Email Extension:电子邮件扩展build user vars:jenkins用户相关变量插件,使得在构建过程中可以使用用户相关环境变量,我们这里用来获取运行JOB的用户名Email Extension Template:电子邮件扩展模板
二、相关插件配置
- 这里主要配置下邮件,默认情况下Jenkins是可以发出来邮件的,只是
html格式有问题,这里需要我们配置下

三、创建Job任务

四、编写Pipeline
def skipRemainingStages = false //是否跳过生产部署
def timeout_mins = 5 //超时时间,单位分
def input_message //提示语
def randomToken //发布秘钥
def skipadminUser = false
//系统个人信息
def Applier_id
def Applier_name
def Applier_mail
pipeline{
agent any
options { //调用颜色插件
ansiColor('xterm')
skipDefaultCheckout(true)
}
environment {
Applier_name = ""
Applier_mail = ""
Operator_mail = ""
input_message = ""
}
stages{
stage('构建初始化') {
steps("拉取代码"){
echo "3[32m ******开始拉取代码分支代码,****** 3[0m"
}
}
stage("发送审批邮件"){
steps{
wrap([$class: 'BuildUser']) {
script {
//获取当前登录用户账户、姓名、邮箱
Applier_id = "${env.BUILD_USER_ID}"
Applier_name = "${env.BUILD_USER}"
Applier_mail = "${env.BUILD_USER_EMAIL}"
}
}
script{
//判断当前任务是否需要审批
if ("$Mode" == "NO"){
skipadminUser = true
Exec = true
return
}
//判断审批人
if ("$adminUser" != ""){
adminUser = "$adminUser".split('@')[0] //只取审批人@前面字符
//如果审批人为自己,则退出任务
if (Applier_id == adminUser){
echo "3[31m 审批人不能为本人,任务已终止。 3[0m"
skipRemainingStages = true //跳过下一个stage
currentBuild.result = 'ABORTED' //当前stage build result设置为 aborted
return
}
}else{
echo "3[31m 审批人不能为空,任务已终止。 3[0m"
skipRemainingStages = true
currentBuild.result = 'ABORTED' //修改任务状态为终止状态
return
}
skipRemainingStages = false
echo "3[32m ******发布生产操作需审批,接下来执行生产审批流程****** 3[0m"
randomToken = sh (script: "echo $RANDOM" , returnStdout: true).trim()
input_message = " $Applier_name 申请发布生产"
emailext(
subject:"【请审批】${env.JOB_NAME}(#${env.BUILD_NUMBER})生产部署任务",
body:"""$input_message,随机验证码是:${randomToken}!!! <br> <a href="${BUILD_URL}input">请点击该链接登录后审批填入token发布</a><br><h3>或者将token值${randomToken}告诉运维人员:${Applier_name},让其输入token进行确认</h3>""",
to:"${emails}"
)
echo "3[32m ******申请邮件已经发送,待 $adminUser 审批****** 3[0m"
}
}
}
stage("等待审批"){
when { expression {!skipRemainingStages}}
steps{
script{
def isAbort = false //取消按钮
timeout(timeout_mins){ //等待审批人审批,并通过timeout设置任务过期时间,防止任务永远挂起
try {
def userInput = input(
id: 'inputap', message: "$input_message", ok:"同意", submitter:"$adminUser", parameters: [
[$class: 'StringParameterDefinition',defaultValue: "", name: 'token',description: '请输入发布的秘钥' ]
])
if (userInput == randomToken) {
skipRemainingStages = false
} else {
skipRemainingStages = true
echo "3[31m 秘钥错误 3[0m"
}
echo "3[31m 当前输入秘钥为: ${userInput} 3[0m"
}catch(err) { // input false
echo "3[31m ******任务已被审批人 $adminUser 拒绝****** 3[0m"
currentBuild.result = 'ABORTED' //修改任务状态为终止状态
return
}
}
}
}
}
}
}
五、执行构建任务

- 点击
Input然后输入邮件中的token,点击同意即可发布完成


十年之约的博客必须细看品味
最近正要学习jenkins,谢谢分享!
学习了,666
这里学习了
pipeline的学习一直不得启发,这里学习了
来了来了我又来了
查看下具体实现内容
慢慢喜欢你
6666 可以
学习了,666