如何获取Jenkins MultiJob 下游Job(子Job)
如题,本文章记录的是如何获取Jenkins MultiJob 下游Job(子Job)的状态,并且发送邮件。
写在前面:
第一种方式适用于:
1.具有Jenkins 插件安装权限
2.不发送Email,只用于查看子Job状态 ,并且自己做进一步处理
3.没有任何基础也能懂,因为只是装个插件,并且使用
想简便并且发送邮件,请直接查看第二种方式。
第二种方式适用于:
1.没有Jenkins安装权限,但是现有Jenkins已经安装了 Email-ext plugin (Email Extension)
2.需要将子Job状态整理发送邮件
第一种方式:
首先,如果只是想获取子Job的状态,参考链接:Jenkins MultiJob - Send Results e-mail with data from inner Jobs
本人尝试了下,具体步骤如下:
1.创建 MultiJob (已有请跳过)
3.部分Jenkins在安装Groovy Postbuild插件的时候会失败,并且提示更新其他插件,按照提示更新即可
4.配置MultiJob的相关内容
MultiJob --> Configure --> Post-build Actions --> add Post-build Actions -->Groovy Postbuild
如图1
图1接下来在Groovy Script的输入框内输入
subBuilds = manager.build.getSubBuilds()
//print the each sub build instance to the console log and its result
subBuilds.each{
manager.listener.logger.println "${it}, ${it.getResult()}"
}
结果如下图3
图3第二种方式:
1.创建 MultiJob (已有请跳过)
2.安装 Email-ext plugin (Email Extension)(已安装请跳过).
3.MultiJob配置
MultiJob --> Configure --> Post-build Actions --> add Post-build Actions --> Editable Email Notification (添加发送邮件的组件)-->Advanced Settings(高级设置)-->Pre-send Script
在Pre-send Script里面加上
import groovy.json.JsonSlurper; //msg使用的类需要先引用包
def EmailContent = msg.getContent().getBodyPart(0).getContent() //logger.print("$EmailContent")
String newContent = """$EmailContent Test change content"""
def subBuilds = build.getSubBuilds()
subBuilds.each{
// logger.print("${it.jobName}")
logger.print("${it}, ${it.getResult()}")
newContent +="""${it} ${it.getResult()} """ } //获取每个子job的状态
//logger.print("$subBuilds")
//logger.print("$newContent")
msg.setContent(newContent, "text/html; charset=utf-8"); //设置邮件内容
这部分代码是学习了Andrew's Blog 里面关于配置Jnekins发送邮件,访问github获取最新Commit信息 这篇文章之后,改的比较简单的版本,如果对相关内容感信息,可以去这篇博客学习。
暂时还没进行美化,不过邮件也已经达到了效果。
邮件如果想要之获取JobName,buildNumber,和result的等相关参数
修改下面这句话就好了
newContent +="""${it} ${it.getResult()} """ } //获取每个子job的状态,并且加到邮件内容
${it.getJobName()} // 获取每个Job的名字
${it.getBuildNumber()}//获取每个Job的Build Number