搞定Jenkins的groovy模板的邮件通知
#介绍# 上次在Travis CI会替代Jenkins吗?中简单介绍了Travis CI,它的邮件通知做的也是很到位的。
在标题中,清晰地告诉你构建的状态,内容也很干净(像晓斌说的“小清新”)。它的服务是由Postmark提供的。
很多时候这是用户体验的极佳表现:界面一目了然,要的东西一下子就能看到,而不是让你反复点链接。当然看起来也蛮酷的。
那这个是不是很难做呢?能不能在现有的Jenkins中使用呢?
简单地说:可以,但是需要好的模板。先让你看看我做的效果,有兴趣再看下去。
email-ext插件
Jenkins社区果然庞大,很快就搜索到能发HTML通知邮件的email-ext插件。同时也很高兴在晓斌的网站上看见Jdonee贡献过一篇博客使用email-ext替换Jenkins(Hudson)的默认邮件通知。其中详细介绍了怎么使用,不过并没有深入探讨html模板的使用。
还有一个是email-ext插件中除了Jelly外,还支持Groovy。
使用Groovy模板
照着Jenkins Email Extension Plugin上的说明,配置了
Content type: HTML (text/html)
Default content: ${SCRIPT, template="groovy-html.template"}
结果发现了两个问题:
- 不管结果成功与否,显示总是黄色(错误)。实际上成功(Success)的时候应该显示蓝色,只有黄色才是失败。
- 我用的是git,只要又提交,收到的信提示hudsonUser找不到。
啃了半天Groovy的知识,结果意识到这些是BUG,就顺手在Jenkins网站上注册了:JENKINS-13191,JENKINS-13192 。
第一个BUG的补丁的提交在我在Github中Pull request
不久就合并进去了。
第二个有点复杂(可能涉及到SVN,CVS),希望他们自己解决,我自己使用的时候就简化了。
然后套用了Travis-CI的HTML格式就接近完美了。
标准模板的问题
再来谈谈email-ext提供的Groovy标准HTML模板:groovy-html.template的问题,这里先简单介绍一点Groovy的知识(我也只学了几个小时而已)。
Groovy是一种Java平台语言。它能够与Java代码很好地结合,也能用于扩展现有代码。来看看groovy-html.template源文件
<% def changeSet = build.changeSet
if(changeSet != null) {
def hadChanges = false %>
<TABLE width="100%">
<TR><TD class="bg1" colspan="2"><B>CHANGES</B></TD></TR>
<% changeSet.each() { cs ->
hadChanges = true
def aUser = cs.hudsonUser %>
build
就是Groovy能访问到的jenkins的构建build
实例,changeSet
就是他的一个函数getChangeSet
,可以看看AbstractBuild.java
现在的文档还很烂,如果碰到出错了,需要查查Java的源文件。
第一个补丁我就发现是build.result
的返回不是String
。所以比较总是false
。查看原代码后,强制转换成String
就好了。
总结
可能你会觉得怎么没有讨论HTML,实际上这只是个模板,你只要有心(UX),参照一般的email newsletter的模板(如Getting Started with HTML Emails,套上Jenkins构建任务的一些参数(参见标准模板)就可以了。
我有空再做一个,这个毕竟是有“盗版嫌疑”。
不管怎样,如果把你的HTML通知邮件简单改造一下,效果会好很多。
非常希望你也贡献一些模板到这个插件中去!
相关阅读
- 自己的博客:Travis CI会替代Jenkins吗?http://larrycai.github.com/2012/03/06/travis-ci-is-evolution.html
- Juvenxu网站上:使用email-ext替换Jenkins(Hudson)的默认邮件通知:http://www.juvenxu.com/2011/05/18/hudson-email-ext/
- email-ext插件: http://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin