如何获取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 (已有请跳过)

2.安装Groovy Postbuild Plugin 

3.部分Jenkins在安装Groovy Postbuild插件的时候会失败,并且提示更新其他插件,按照提示更新即可

4.配置MultiJob的相关内容

MultiJob --> Configure --> Post-build Actions --> add Post-build Actions -->Groovy Postbuild

如图1


如何获取Jenkins MultiJob 下游Job(子Job)的状态并且发送邮件_第1张图片
图1


如何获取Jenkins MultiJob 下游Job(子Job)的状态并且发送邮件_第2张图片
图2

接下来在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


如何获取Jenkins MultiJob 下游Job(子Job)的状态并且发送邮件_第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信息 这篇文章之后,改的比较简单的版本,如果对相关内容感信息,可以去这篇博客学习。

暂时还没进行美化,不过邮件也已经达到了效果。


如何获取Jenkins MultiJob 下游Job(子Job)的状态并且发送邮件_第4张图片
邮件

如果想要之获取JobName,buildNumber,和result的等相关参数

修改下面这句话就好了

newContent +="""${it} ${it.getResult()} """ } //获取每个子job的状态,并且加到邮件内容

${it.getJobName()} // 获取每个Job的名字

${it.getBuildNumber()}//获取每个Job的Build Number

你可能感兴趣的:(如何获取Jenkins MultiJob 下游Job(子Job)的状态并且发送邮件)