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服务的步骤如下:
- 登陆上一步System Admin e-mail address的邮箱地址
- 打开 设置 -> 账号,开启”POP3/SMTP服务“
- 根据提示进行操作,并记录自动生成的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中配置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配置截图如下:
创建一个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: 请按以下步骤检查:
- 阅读上面的”发送邮件原理“,对照检查是否漏了填写必填项
- 阅读上面的”在Jenkins中配置写信人“,检查是否漏了填写”System Admin e-mail address”
- 阅读上面配置步骤,检查是否填写错误
- 如果使用外部邮箱,检查是否已经开通了SMTP服务,并填写正确的SMTP服务密码(不是邮箱密码)
- 如果是公司网络,检查是否网络防火墙禁止访问外部SMTP服务,比如在Jenkins服务器上运行
telnet smtp.qq.com 465
看是否可以连接上QQ的SMTP服务器 - 如果在公司电脑上安装Jenkins,检查是否本机杀毒软件或防火墙禁止或关闭了访问外部SMTP服务