Groovy已经提供了GStringTemplateEngine、SimpleTemplateEngine、XmlTemplateEngine 三个模板引擎实现。利用SimpleTemplateEngine就能够实现一个简单的邮件模板的渲染功能。下面是一个简单的实现: java
定义一个email_content.template, 内容以下: 测试
GENERAL INFO BUILD ${build.result} Build URL: ${rooturl}${build.url} Project: ${project.name} Build duration: ${build.durationString}Groovy 脚本能够这么写
import groovy.text.SimpleTemplateEngine import groovy.text.Template import groovy.text.TemplateEngine TemplateEngine engine = new SimpleTemplateEngine() Template template = engine.createTemplate(new File("./src/templateStudy/email_content_compoenent.template")) //声明要绑定(或者叫合并)到模板的一个 Map 对象 build = [result:"failed",url:"1",durationString:"10s"] rooturl ="http://jenkins:8080/" project =[name:"testPro"] //把模型数据归并到模板中,经过 Map 来传递参数 Writable result = template.make(build:build,project:project,rooturl:rooturl) //把归并后的结果输出来控制台 result.writeTo(new PrintWriter(System.out)) //或者不用上面的 writeTo() 方法,直接println 能获得同样的结果 println result
运行脚本,控制台就会输出 ui
GENERAL INFO BUILD failed Build URL: http://jenkins:8080/1 Project: testPro Build duration: 10s在上面的例子中,我是将build以及project的信息直接写好,只是做为测试,而在实际状况中,这些信息都是能够从Jenkins的API来得到的。
我是将email单独放在一个job中,而后在编译的job中调用发送mail的job,因此个人Groovy代码能够这样写 url
import hudson.model.*; import hudson.util.*; import hudson.scm.*; def thr = Thread.currentThread(); def build = thr?.executable; def upstreamBuild = null getUpstreamBuild(){ //build.getUpstreamBuilds() ? def cause = build.causes.find { if(it instanceof hudson.model.Cause.UpstreamCause) { println "upstreamCause is exist" return true } println "upstreamCause is not exist" return false } if(cause != null) { upstreamBuild = hudson.model.Hudson.instance.getItem(cause.upstreamProject).getBuildByNumber(cause.upstreamBuild) println upstreamBuild.result } }这样,我得到了上游job的build信息,我就能够将upstreamBuild做为模型数据传给template了
Writable result = template.make(build:upstreamBuil,project:project,rooturl:rooturl)
同理我能够得到其余数据模型来填充模板中的参数。 spa
目前,在真实环境中尚未测试过,等过两天所有的功能都完成了再来update code