图说jenkins pipeline处理前端项目--(5)job执行前/后发送邮件

143 阅读1分钟

上一篇

图说jenkins pipeline处理前端项目--(4)执行远程主机上的脚本 - 掘金 (juejin.cn)

job执行前/后为什么要发邮件

job执行前发邮件的目的是:

告知你的开发小伙伴,jenkins开始发版了,服务可能暂时不可用。

job执行成功之后发邮件的目的是:

告知你的开发小伙伴,jenkins发版成功了,做了哪些改动,服务又可以用了。

job执行失败之后发邮件的目的是:

告知自己,jenkins发版失败了,快去看看是哪里出了问题。

前置条件

做好jenkins的邮件配置

配置方式见:jenkins配置126邮箱 - 掘金 (juejin.cn)

为不同的人创建不同的jenkins账户,并都配置名字和邮箱,并不再使用管理员账号执行job

image.png

image.png

image.png

image.png

job执行成功后发送邮件

image.png

post {
        success{
            script {
                // 获取git最近30条提交记录
                result = sh(script: "git log --pretty=format:'SHA-1:%h - 创建人:%an 时间:%ad 提交信息:%s' --date=format:'%y-%m-%d %H:%M:%S' -30", returnStdout: true).trim()
                // 设置邮件接收人邮箱
                mail to: 'test@126.com',
                // 邮件主题
                subject: "Jenkins任务 ${currentBuild.fullDisplayName} 构建成功",
                // 邮件内容
                body: " ${env.JOB_NAME} # ${env.BUILD_NUMBER}!\n 通过这个url地址 ${env.BUILD_URL} 查看构建信息.\n最新30条git日志为:\n${result}"
            }
        }
    }

result = sh(script: "git log --pretty=format:'SHA-1:%h - 创建人:%an 时间:%ad 提交信息:%s' --date=format:'%y-%m-%d %H:%M:%S' -30", returnStdout: true).trim()

这里是执行shell脚本,并将执行结果放到result变量

${currentBuild.fullDisplayName}: 这个是jenkins内置变量,包含job名以及当前job执行id

${env.JOB_NAME}:这个是jenkins内置变量,job名称

${env.BUILD_NUMBER}: 这个是jenkins内置变量,job执行id

${env.BUILD_URL}: 这个是jenkins内置变量,当前job的此次执行结果的url

image.png

image.png

image.png

job执行失败后发送邮件

注意: 这里使用的Email Extension | Jenkins plugin插件发送的邮件,需要先安装

failure{
            script {
                 result = sh(script: "git log --pretty=format:'SHA-1:%h - 创建人:%an 时间:%ad 提交信息:%s' --date=format:'%y-%m-%d %H:%M:%S' -30", returnStdout: true).trim()
                 emailext (
                    subject: "Jenkins任务 ${currentBuild.fullDisplayName} 构建失败",
                    body: "${env.BUILD_USER}\n ${env.JOB_NAME} # ${env.BUILD_NUMBER}!构建失败\n 通过这个url地址 ${env.BUILD_URL} 检查控制台输出.\n最新30条git日志为:\n${result}",
                    to: "${env.BUILD_USER_EMAIL}",
                    replyTo: '${env.BUILD_USER_EMAIL}',
                    mimeType: 'text/plain'
                 )   
            }
        }