设为首页 收藏本站
查看: 1070|回复: 0

[经验分享] Jenkins邮件配置,实现邮件发送策略(可实现每个Job对应不同的发送邮箱)

[复制链接]

尚未签到

发表于 2018-1-7 22:03:42 | 显示全部楼层 |阅读模式
  前言:
  首先,要有一个用来发送的邮箱,首选网易!参考:http://www.cnblogs.com/EasonJim/p/6051636.html,这里我注册了网易的免费企业邮箱。
  并且我新建没多个邮箱用来对应不同的Job。
  技巧:
  先确保邮箱的smtp功能能正常使用,现在jenkins机器上装一个foxmail,确定能正常收发。
  很多种情况邮箱类型很多,先用最简单的网易邮箱配置好后,测试收发正常。待正常后再换成特定的企业邮箱来配置。
  正题:
  Jenkins发送邮件有几种配置方式:
  1、使用内置的邮件插进(使用全局的配置,只能有一个接收方)
  2、使用邮件扩展插件【Email Extension Plugin】(使用全局的配置,能有多个接收方,但是只能有一个发送方)
  3、使用邮件扩展插件【Email Extension Plugin】+Groovy脚本(实现每个Job对应不同的发送邮件,多个发送方)
  4、开发邮件转发中间件或者使用Foxmail这些工具来转发(每个Job发送到对应的邮箱,然后中间件负责转发到成员列表的邮箱。对发送插件没什么要求,只要能发送即可)
  5、走国际路线,使用【Googole网上论坛】即groups.google.com(通过邀请实现进入群组,然后jenkins只要发送邮件到这个群组油箱即可)
  具体操作:
  注意:操作涉及的邮箱为163免费企业邮箱
  1、使用内置的邮件插进
  【系统管理】->【系统设置】->【邮件通知】->【高级】,配置如下:

  参照如上配置,勾选【通过发送测试邮件测试配置】进行发送配置。
  如果出现“Failed to send out e-mail”,那么说明没有配置好【系统管理员邮件地址】

  配置【系统管理员邮件地址】时,要和SMTP认证的用户名保持一致,不然无法发送。

  上面的发送时有个小技巧,【显示的名称 <邮件地址>】(中间有个空格),这样的形式发送后会在邮件提示窗口显示邮件的别名。
  最后,在Job页面上增加【增加构建后操作步骤】->【E-mail Notification】,配置要接收人的邮箱,很显然,这里只能写一个人的地址,且配置单一。如果要发送到多人,可以尝试上述第4点开发中间件实现。

  2、使用邮件扩展插件
  【系统管理】->【系统设置】->【Extended E-mail Notification】->【高级】,配置如下:

  其余都留空,根据需要配置。
  同样,【Use SMTP Authentication】下的【User Name】也要和【系统管理员邮件地址】保持一致
  配置【系统管理员邮件地址】时,要和SMTP认证的用户名保持一致,不然无法发送。

  最后,在Job页面上增加【增加构建后操作步骤】->【Editable Email Notification】,配置要接收人的邮箱列表

  很显然,这里可以配置多个收件人,且配置点很多,包括构建点的触发发送,都可选择。
  提示:触发点一般时always,这样发送的时候不管成功还是失败都会有日志。

  提示2:构建的日志一般附带上去,这样方便排查

  3、使用邮件扩展插件+Groovy脚本
  通过上面第2部的配置可以发现,邮件发送人只能配置一个,而且只能是全局的;那么要对应每个Job对应不同的发送人就需要用到Groovy脚本去实现。
  通过研究邮件扩展插件【Email Extension Plugin】的源码发现,其提供的接口无法实现在每个Job下动态设置临时发送人,只能设置到全局的配置上面;如果设置到全局会有一个弊端,比如构建在同一个时间点发送邮件,那么可能存在零界点的情况导致发送人错乱,不过一般构建不会搭建太多,所以也可忽视。
  在Job的【Editable Email Notification】上,打开【Advanced Settings...】,在【Pre-send Script】(Pre-send表示在发送前的事件)上写入设置邮件的Groovy脚本:
  

import jenkins.model.*  
import hudson.model.
*  
import javax.mail.internet.InternetAddress
  

  

//设置发送邮件的用户名密码  
def username="project1@email.com"
  
def password="123456"
  

  
//写入发送邮件的用户名密码到全局配置上,同时也可以设置smtp server这些选项;这里由于我采用统一的邮箱服务商,所以只需设置两项
  
def descriptor1 = Jenkins.instance.getDescriptorByType(hudson.plugins.emailext.ExtendedEmailPublisherDescriptor.class)
  
descriptor1.setSmtpAuthUsername(username)
  
descriptor1.setSmtpAuthPassword(password)
  
descriptor1.save()
  

  
//写入系统管理员邮件地址到全局配置上
  
def descriptor2 = Jenkins.instance.getDescriptorByType(hudson.tasks.Mailer.DescriptorImpl.class)
  
descriptor2.setAdminAddress(String.format("JenkinsJobEmail <%s>",username))
  
descriptor2.save()
  

  
//经过测试,这个是临时设置发送人的系统管理员邮件地址,不然上面设置后,发送时还是不会发生改变
  
def email = new InternetAddress(String.format("JenkinsJobEmail <%s>", username))
  
msg.setFrom(email)
  

  

  4、开发邮件转发中间件(开发比较复杂,不建议使用)
  每个Job发送到对应的邮箱,然后中间件负责转发到成员列表的邮箱。
  中间件可以是服务,进程,或者用pythone写一个进程,运行在linux上,通过时间间隔获取指定邮箱的邮件,有新邮件时,再进行转发的特定的邮箱列表。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432747-1-1.html 上篇帖子: jenkins+donet core持续集成环境搭建 下篇帖子: 如何在jenkins上新建一个项目及其简单配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表