用Groovy渲染郵件模板

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

相關文章
相關標籤/搜索