无论JOB D
执行结果如何,您都希望Master MultiJob Project (Job)
成功。但是,JOB A
,JOB B
和JOB C
应该是成功的。您可以使用Groovy Postbuild Plugin使Master Multijob Project (Job)
成功。
在Jenkins中安装此插件后,您将在Post-build Actions
部分获得Groovy Postbuild
步骤。选择Groovy Postbuild
步骤,它将提供添加Groovy脚本来操纵工作行为的选项。
添加下面的脚本有:
if([email protected] == hudson.model.Result.FAILURE){
errpattern = ~/[FAILURE].*/;
manager.build.logFile.eachLine{ line ->
errmatcher=errpattern.matcher(line)
if (errmatcher.find()) {
[email protected] = hudson.model.Result.SUCCESS
}
}
}
什么上面的脚本需要做的是改变你的父作业的构建状态到成功,如果失败。但是,这里的问题是它会将阶段中的任何子作业失败的构建状态更改为成功。
你只想忽略JOB D
的失败状态而不是其他工作。因此,我们可以做的是确定JOB A
,JOB B
和JOB C
的执行结果。如果其中任何一个失败,我们可以阻止Groovy脚本将父作业的构建状态更改为SUCCESS。
现在,以确定JOB A
,JOB B
和JOB C
构建结果
我们可以使用下列内容:
JOBA_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBA/$BUILD_ID/api/json" | jq -r '.result')
JOBB_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBB/$BUILD_ID/api/json" | jq -r '.result')
JOBC_BUILD_STATUS=$(curl --silent "http://<jenkins_URL>/job/JOBC/$BUILD_ID/api/json" | jq -r '.result')
在您的多任务配置的Build
部分,毕竟相添加Execute shell
步骤并添加上面的脚本。
现在,我们来调整groovy脚本来忽略JOB D
的构建结果,并考虑JOB A
,JOB B
和JOB C
的构建结果。现在
if((ma[email protected] == hudson.model.Result.FAILURE) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBA_BUILD_STATUS"))) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBB_BUILD_STATUS"))) && ("SUCCESS".equals(manager.build.buildVariables.get("JOBC_BUILD_STATUS")))){
errpattern = ~/[FAILURE].*/;
manager.build.logFile.eachLine{ line ->
errmatcher=errpattern.matcher(line)
if (errmatcher.find()) {
[email protected] = hudson.model.Result.SUCCESS
}
}
}
,它会忽略的JOB D
构建结果,然后检查是否为JOB A, B & C
构建结果成功与否。如果他们成功了,那么它会将Multijob的构建结果更改为SUCCESS。
即使失败,您是否可以从配置中排除或禁用JOB D? – ANIL
它需要一些关于项目的额外信息。不,我不能从Multijob中排除或禁用它。 – Andrey