Jenkins2 学习系列13 -- 邮件和Slack通知

需求:需要把Jenkins的构建情况通过邮件,钉钉,Slack等通知告诉相关的测试,开发人员。
结合之前讲的 post钩子 更进一步可以实现失败时只通知给开发人员,成功通知给所有人员等。

邮件通知

这个需要在Jenkins中配置发件人的信息,如SMTP服务器,默认的邮件内容等
来到Jenkins的Configure System

  1. 首先在配置页面搜索 Location 配置Jenkins管理员的邮箱
Jenkins2 学习系列13 -- 邮件和Slack通知_第1张图片
image.png
  1. 搜索'E-mail Notification'

可能会发现有两个E-mail Notification,一个是Extended E-mail Notification另一个是E-mail Notification。前者是安装Jenkins时顺便安装的插件,后者是自带的。

自带的E-mail Notification功能较弱,我们配置 Extended E-mail Notification,配置项比较多,不同的点问号图标。

Jenkins2 学习系列13 -- 邮件和Slack通知_第2张图片
image.png
  1. 来到Pipeline项目的配置页面,
    通过点击 Pipeline Syntax 来到 Snippet Generator, 生成pipeline脚本。
    Step 选择 mailtext: Extended Email。
Jenkins2 学习系列13 -- 邮件和Slack通知_第3张图片
image.png

修改pipeline,添加发送邮件的步骤,放到pipeline的post部分的always块内,你也可以改为failure

    post {
      always {
        emailext to: '[email protected]', subject: "Job [${env.JOB_NAME}] - Status: ${currentBuild.result?: 'success'}", body: 
"""

EXECUTED: Job \' ${env.JOB_NAME}:${env.BUILD_NUMBER}\'

View console output at " ${env.JOB_NAME}:${env.BUILD_NUMBER}"

(Build log is attached.)

""", attachLog: true, compressLog: true }

效果如下:

Jenkins2 学习系列13 -- 邮件和Slack通知_第4张图片
image.png

关于一些参数

  • attachLog(可选):将构建日志以附件形式发送
  • compressLog(可选):压缩日志
  • recipientProviders(可选): List 类型,收件人列表类型
  • replyTo(可选):回复邮箱
  • recipientProviders (可选):收件人列表类型
类型名称 helper方法名 描述
Culprits culprits() 引发构建失败的人。最后一次构建成功和最后一次构建失败之间的变更提交者列表
Developers developers() 此次构建所涉及的变更的所有提交者列表
Requestor requestor() 请求构建的人,一般指手动触发构建的人
Upstream Committers upstreamDevelopers() 上游job变更提交者的列表

更多参数见文档

Slack 通知

Slack 号称邮件杀手,是一款国外很火的消息聚合平台服务,通过建立不同的频道降低团队沟通的干扰。

  1. Jenkins 安装 Slack Notification Plugin

  2. 打开插件Github官网,根据提示没有账号的话先申请账号

  3. Slack 端集成Jenkin CI,需要选择一个要推送通知的频道

Jenkins2 学习系列13 -- 邮件和Slack通知_第5张图片
image.png
  1. 根据指引配置就可以了,非常人性,下图在FreeStyle类型的项目中可配
Jenkins2 学习系列13 -- 邮件和Slack通知_第6张图片
image.png
Jenkins2 学习系列13 -- 邮件和Slack通知_第7张图片
image.png
  1. 如果需要通过Pipeline代码触发
post {
  always {
    slackSend channel: "#机器人", message: "Build Started: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
  }

更多参数还是参见非常好用的Pipeline Syntax 的 Snippet Generator

Jenkins2 学习系列13 -- 邮件和Slack通知_第8张图片
image.png

效果:

Jenkins2 学习系列13 -- 邮件和Slack通知_第9张图片
image.png

钉钉通知

Slack 有时候国内速度访问比较慢,如果公司喜欢用钉钉,也可以集成钉钉通知。
步骤是类似的,不再赘述,见文档

问题

使用邮件,想把构建日志作为邮件内容发送出去,但是使用 ${env.BUILD_LOG} 返回 null,可以改为\${BUILD_LOG} groovy 会展开所有的变量,然后留给email ext 处理这个变量
网上也有人问了类似的问题,可以使用 currentBuild.rawBuild.getLog(15) 获取最后的15行日志,不过需要在 scriptApproval 页面批准下 method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild

Jenkins2 学习系列13 -- 邮件和Slack通知_第10张图片
image.png

参考

https://jenkins.io/doc/pipeline/steps/email-ext/
https://www.cnblogs.com/yangxia-test/p/4366172.html
https://github.com/jenkinsci/slack-plugin
Jenkins 钉钉通知插件
http://www.mydlq.club/article/7/

你可能感兴趣的:(Jenkins2 学习系列13 -- 邮件和Slack通知)