在 Jenkins (Pipeline) 中,我们可以通过设置邮件,来通知构建结果。
但是邮件通知较慢,这是因为:邮件客户端以定时查收(轮询)的方式收取邮件;即使服务端支持 IDLE 命令,由于客户端的实现不同,也不能保证立刻收到消息;
我们希望在构建结束时,“立刻”收到通知,这可以使用即时通讯工具。
该笔记将记录:在 Jenkins Pipeline 中,如何发送即时消息(IM)通知。
虽然邮件通知较慢,但是我们依旧保留邮件通知方法,作为归档。如下为使用方法:
1)在 Manage Jenkins / Configure System / Extended E-mail Notification 中,设置邮箱帐号信息;
2)如下为在 Jenkins Pipeline 中,使用邮件通知的方法:
mail( to: "[email protected],[email protected],[email protected]", subject: "// 邮件标题", body: "// 邮件内容" )
参考 Pipeline: Basic Steps / mail: Mail 文档获取详细使用方法。
很多 IM 应用(即时通讯软件),比如企业微信、钉钉、Slack,提供的 Web API 接口来发送消息。这也是我们更倾向的方法,灵活且无需担心插件更新问题。当然,这也需要我们进行简单的开发,通常仅需要使用 httpRequest 调用发送接口。
方法一、通过创建应用。该方法分为以下几个步骤:
1)添加小程序
2)获取ACCESS_TOKEN凭证。参考官方「获取access_token」文档。
3)发送消息。参考官方「文本消息」文档。调用接口发送消息即可。
方法二、创建群机器人。该方法分为以下几个步骤:
1)创建群组;
2)添加群机器人;
3)调用接口发送消息;
我们使用方法二,因为更加简单,且能满足需求(但是无法推送给特定的用户)。
有着与「企业微信」相同的两种方式。
但是「添加应用」更加复杂,比如需要 IP 白名单,否则无法发送消息。也就是说,如果没有公网服务器,想要推送提醒的话,只能使用群机器人进行通知。
在 Jenkins Pipeline 中,使用扩展来发送即时消息,更为简便。通过安装这些扩展,并使用其提供的 Pipeline Steps 进行消息发送操作,比调用 Web API 更加简单易用。
比如 Slack Notification Slack 集成。在构建结束后,我们的 Slack Channel 会立即收到构建结果。
目前(08/27/2019),支持以下两大类型的即时消息通知扩展:
1)基于 instant-messaging 扩展的 Skype、GCM Notification、IRC、Jabber 等等即时通讯工具。
2)以及 企业微信、钉钉、Slack Notification 等等,自行实现的扩展。
参考官方文档,以获取插件的详细介绍,比如 Jabber (XMPP) notifier and control 插件。
这里将介绍我们使用到的插件:
1)发送 IRC 通知:IRC Notification
2)发送 Slack 通知:Slack Notification
我们的博客是 Jenkins Pipeline 构建发布的,在构建结束之后,是没有通知的。现在要加上通知。有以下选择:
方案 | 是否采用 | 为选择用原因 |
---|---|---|
Skype | 太旧 | |
GCM Notification | 国内网络环境不允许 | |
Jabber | 不支持在Pipeline中使用,还处于开发阶段(08/27/2019)。 | |
IRC | 可以考虑 | 倒是可以,但是密码明文,在国内也不通用,还要搭建自己的服务。(还有其他更好的方案) |
企业微信的Jenkins Pipeline插件 | 插件版本旧,不够灵活,而且有更好的方案,Web API,可以解决这个问题。 | |
企业微信Web API接口 - 群机器人 | 可以考虑 | 这是一个不错的方案,灵活,可定义,可实现各种功能。没有采用的原因是公司采用了企业微信,我的企业微信又是另外一个组织,手机切换组织后,电脑端也切换了。 |
企业微信Web API接口 - 自建应用 | 可以考虑 | 与「群机器人」的方法类似,但是可能稍微复杂一点,但是更加灵活。没有采用的原因与上一个原因一致。 |
钉钉的Jenkins Pipeline插件 | 插件版本旧,不够灵活,而且有更好的方案,Web API,可以解决这个问题。 | |
钉钉的Web API接口 - 自建应用 | 可以考虑 | 与企业微信的自建应用是类似的,但是这个需要IP白名单,否则无法调用接口。而Jenkins不再公网服务器上,所以不能采用这个方案。 |
钉钉的Web API接口 - 群机器人 | 最终方案 | 只需要一个Web Hook地址,没有IP白名单,可以解决问题。一分钟只能推送20次,足够了。 |
注意:标为“可以考虑”的方案,在日后的工作中可以考虑使用。
安装插件,然后在 Job 页面中进行配置即可。
在构建的过程中,可以执行 Shell 脚本进行消息发送。
「Jenkins Pipeline」- 常用 JSON 操作
「Jenkins Pipeline」- SSH
「Jenkins Pipeline」- 常见问题处理
「Jenkins Pipeline」- 集成 Selenium 测试
「Jenkins Pipeline」- 发送 HTTP 请求
Let Jenkins Keep You Notified! (with the Instant Messaging Plugin)
Jenkins/Pages/Home/Plugins/Instant Messaging Plugin
IMAP IDLE - Wikipedia
Sending Notifications in Pipeline