持续集成之Jenkins插件使用(二)- 邮件通知模板化

接着 上次 的继续,这次只介绍一个插件, Email-ext Plugin

相信大家一定对这个插件很是熟悉,大多的Jenkins都安装了这个插件,并且在job中大量使用这个插件来发送邮件通知。对于这个插件的配置就不多说了,重点来看看这个插件提供的邮件模板化功能。

安装完这个插件后,进入${JENKINS_HOME}\plugins\email-ext\WEB-INF\classes\hudson\plugins\emailext\templates目录,会发现有一些template文件,这些就是插件自带的邮件模板,支持Jelly和Groovy的扩展。

以Groovy为例,插件本身提供了两个模板文件groovy-html.template和groovy-text.template,分别可以通过在邮件内容中设置${SCRIPT, template="groovy-html.template"}或 ${SCRIPT, template="groovy-text.template"}来启用相应的邮件模板文件
持续集成之Jenkins插件使用(二)- 邮件通知模板化 - 网易杭州QA - 网易杭州 QA Team

现在来看看邮件模板的内容,还是以 groovy-html.template为例。
打开文件一看,这是一个以HTML和Groovy脚本混合的文本文件,也就是通过Groovy脚本访问Jenkins的API,获取job和build的相关信息,动态地生成一份HTML文件。在模板中已经定义了几块邮件模板内容。
  • 本次构建的基本信息,包括构建结果/构建url/项目名/构建开始时间/构建持续时间
           持续集成之Jenkins插件使用(二)- 邮件通知模板化 - 网易杭州QA - 网易杭州 QA Team
  
  • 本次构建相关的SCM改动信息
           持续集成之Jenkins插件使用(二)- 邮件通知模板化 - 网易杭州QA - 网易杭州 QA Team
 
  • 本次构建的产出物
           持续集成之Jenkins插件使用(二)- 邮件通知模板化 - 网易杭州QA - 网易杭州 QA Team
 
  • 本次构建的console输出

           持续集成之Jenkins插件使用(二)- 邮件通知模板化 - 网易杭州QA - 网易杭州 QA Team
 
看了这个例子,相信大家已经对如何编写Groovy脚本有了初步认识了吧。通过这种方式,可以非常便捷地访问当次构建的信息,比如通过${build.result}获取构建的结果,${project.name}得到job的名字,${rooturl}获得Jenkins的url地址等等。

接下来,再来看几个经常可能需要用到的例子
  • 获取当前job中的参数信息。如果在SCM里配置了SVN或是GIT,大家都知道可以在job里使用${SVN_REVISION}和${GIT_REVISION}来获取版本库信息,那在Groovy脚本的邮件模板中呢?答案是可以通过以下的代码来实现

<% def svnRevision = build.getEnvironment()["SVN_REVISION"] %>
<% def svnUrl = build.getEnvironment()["SVN_URL"] %>

  • 获取当前job的下游job信息。要注意的是,得到的是一个map,也就是说是一个无序的结果

<% def downstreamBuildsMap = build.getDownstreamBuilds() %>

  • 通过获取触发条件得到上游job的信息。

<%
def printCausesRecursively(cause, upstreamBuilds) {
pattern = /project "(.*)" build number ([0-9]+)/
if (cause.class.toString().contains("UpstreamCause")) {
matcher = (cause.getShortDescription() =~ pattern)
if (matcher) {
job_name = matcher[0][1]
build_number = matcher[0][2]
upstream_job = hudson.model.Hudson.instance.getItem(job_name)
upstream_build = upstream_job.getBuildByNumber(build_number.toInteger())
upstreamBuilds.push(upstream_build)
upstreamBuildDuration = upstreamBuildDuration + upstream_build.duration.toInteger()
if (upstream_build.result.toString() == 'FAILURE') {
upstreamBuildStatus = 'FAILURE'
}
}
for (upCause in cause.upstreamCauses) {
printCausesRecursively(upCause, upstreamBuilds)
}
}
}

for (cause in build.causes) {
upstreamBuilds = []
printCausesRecursively(cause, upstreamBuilds)
upstreamBuilds = upstreamBuilds.reverse()
}

%>

关于详细的Jenkins API,可以参考  http://javadoc.jenkins-ci.org/jenkins/model/package-summary.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值