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