Jenkins 配置邮件通知

时间:2024-03-19 09:57:26

Jenkins 配置邮件通知

前言

可以在Jenkins 中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题。

Jenkins 邮件通知功能的插件主要包括:

  • Mailer Plugin (默认的发送邮件插件)
  • Email Extension Plugin (功能更强大的发送邮件插件)

建议同时安装这两个插件。

下面来介绍如何在Jenkins 中通过这两个插件来配置邮件通知。

发送邮件原理

在Jenkins中配置邮件通知之前,先来解释一下发送邮件的原理。

通常我们要发送邮件,需要以下条件:

  • Email from: 写信人 (必须)
  • Mail Server: 邮件服务器 (必须,比如SMTP服务器就是一种邮件服务器)
  • Mail Transfer Protocol: 邮件传输协议 (必须)
    • 比如SMTP服务器使用的就是SMTP协议或SMPTS协议
    • SMTP协议默认端口有25、587
    • SMTPS协议默认端口有465
    • 具体的SMTP/SMTPS协议端口以邮箱供应商提供为准
  • Email to: 收信人(必须)
  • Email cc: 抄送人 (选填)
  • Email bcc: 秘密抄送人 (选填)
  • Email reply to: 回信人 (选填)
  • Email subject: 邮件标题(选填,一般需要填写)
  • Email content: 邮件内容 (选填,一般需要填写)
  • Email attached: 附件 (选填)

在Jenkins中配置写信人

打开 Manage Jenkins -> Configure System,搜索”mail“找到” System Admin e-mail address “,填入写信人邮箱地址。

如果不配置”System Admin e-mail address” 会导致Jenkins发送邮件时的”Connect time out”问题。

开通SMTP服务

如果使用的是外部邮箱(比如QQ邮箱)默认SMTP服务不会开启,需要登陆邮箱后申请开启。

以QQ邮箱为例,开启SMTP服务的步骤如下:

  1. 登陆上一步System Admin e-mail address的邮箱地址
  2. 打开 设置 -> 账号,开启”POP3/SMTP服务“
  3. 根据提示进行操作,并记录自动生成的16位的SMTP服务密码

如果是公司邮箱,请联系公司邮箱管理员咨询如何连接公司邮箱SMTP服务器。

在Jenkins中配置”E-mail Notification”

打开 Manage Jenkins -> Configure System,搜索”mail“找到” E-mail Notification“。该项下的内容为Mailer Plugin的配置项。

以QQ邮箱为例,填写以下内容:

  • SMTP server
  • 勾选“Use SMTP Authentication”,然后输入邮箱地址和上一步的SMTP服务密码(不是邮箱密码)
  • 勾选”Use SSL“(即使用SMTPS协议)
  • SMTP Port可以留空(在勾选”Use SSL“时默认是465,否则是25)

然后勾选”Test configuration by sending test e-mail”, 填入一个收件人邮箱地址,点击“Test configuraiton” 按钮测试是否可以发送邮件成功。

E-mail Notification配置截图如下:

Jenkins 配置邮件通知

在Jenkins中配置Extended E-mail Notification

打开 Manage Jenkins -> Configure System,搜索”mail“找到” Extended E-mail Notification“。该项下的内容为Email Extension Plugin的配置项。

以QQ邮箱为例,填写以下内容:

  • SMTP server
  • 勾选“Use SMTP Authentication”,然后输入邮箱地址和上一步的SMTP服务密码(不是邮箱密码)
  • 勾选”Use SSL“(即使用SMTPS协议)
  • SMTP Port可以留空(在勾选”Use SSL“时默认是465,否则是25)
  • 在Default Recipients中填入默认的收件人邮箱
  • 勾选“Enable Debug Mode”(方便调试时查看错误信息,调试成功后可以取消勾选)
  • 勾选”Allow sending to unregister users” (支持发送邮件到未注册邮箱)

Extended E-mail Notification没有“Test configuration”功能,需要创建一个Job来测试(见下一步)。

Extended E-mail Notification配置截图如下:

Jenkins 配置邮件通知

Jenkins 配置邮件通知

创建一个Job测试Extended E-mail Notification

以创建Freestyle job为例,增加一个”Post-build action“,选择”Editable Email Notification”。

如果选择“Email Notification” 则会使用Mailer Plugin的”Email Notification“的配置项。

在测试时候,”Editable Email Notification”的其它项可以保持默认,但是以下地方需要修改:

  • Triggers中的Failed Any的“Send To”删除掉默认的Developers,增加”Recipient List“ (因为在测试时候可能没有commit记录,Jenkins无法找到要通知的邮箱;选择”Recipient List”时,默认使用上一步配置的“Default Recipients”)。
  • 为了测试方便,在Triggers中增加一个Always的trigger,选择收件人为“Recipient List”,无论构建成功还是失败都会发邮件通知。

配置调优

上面只是说明了Jenkins发送邮件通知的基本用法,请参考Email Extension Plugin的文档进行配置调优,以满足实际需要。

比如:

  • 邮件格式改为HTML,更美观
  • 使用模板来配置邮件内容
  • 为不同的Job配置不一样的收件人
  • 为不同的事件配置不一样的trigger
  • 在Jenkins pipeline中集成发送邮件通知功能

Trouble Shooting

Q: Jenkins 发送邮件失败,错误信息为“Connect time out”或”Connect refused“

A: 请按以下步骤检查:

  1. 阅读上面的”发送邮件原理“,对照检查是否漏了填写必填项
  2. 阅读上面的”在Jenkins中配置写信人“,检查是否漏了填写”System Admin e-mail address”
  3. 阅读上面配置步骤,检查是否填写错误
  4. 如果使用外部邮箱,检查是否已经开通了SMTP服务,并填写正确的SMTP服务密码(不是邮箱密码)
  5. 如果是公司网络,检查是否网络防火墙禁止访问外部SMTP服务,比如在Jenkins服务器上运行telnet smtp.qq.com 465 看是否可以连接上QQ的SMTP服务器
  6. 如果在公司电脑上安装Jenkins,检查是否本机杀毒软件或防火墙禁止或关闭了访问外部SMTP服务