侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

用Groovy渲染邮件模板

2022-06-24 星期五 / 0 评论 / 0 点赞 / 59 阅读 / 3062 字

Groovy已经提供了GStringTemplateEngine、SimpleTemplateEngine、XmlTemplateEngine 三个模板引擎实现。利用SimpleTemplateEng

Groovy已经提供了GStringTemplateEngine、SimpleTemplateEngine、XmlTemplateEngine 三个模板引擎实现。利用SimpleTemplateEngine就可以实现一个简单的邮件模板的渲染功能。下面是一个简单的实现:

 定义一个email_content.template, 内容如下:

GENERAL INFOBUILD ${build.result}Build URL: ${rooturl}${build.url}Project: ${project.name}Build duration: ${build.durationString}
Groovy 脚本可以这么写

import groovy.text.SimpleTemplateEngineimport groovy.text.Templateimport groovy.text.TemplateEngineTemplateEngine 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

运行脚本,控制台就会输出

GENERAL INFOBUILD failedBuild URL: http://jenkins:8080/1Project: testProBuild duration: 10s
在上面的例子中,我是将build以及project的信息直接写好,只是作为测试,而在实际情况中,这些信息都是可以从Jenkins的API来获得的。

我是将email单独放在一个job中,然后在编译的job中调用发送mail的job,所以我的Groovy代码可以这样写

import hudson.model.*;import hudson.util.*;import hudson.scm.*;def thr = Thread.currentThread();def build = thr?.executable;def upstreamBuild = nullgetUpstreamBuild(){    //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)

同理我可以获得其他数据模型来填充模板中的参数。

目前,在真实环境中还没有测试过,等过两天全部的功能都完成了再来update

广告 广告

评论区