Jenkins多任务filnaly结果
我有多重工作结构:Jenkins多任务filnaly结果,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我有多重工作结构: Master MultiJob Project (Job) |----- Phase 1 |------> JOB A |------> JOB D |----- Phase 2 |------> JOB B |------> JOB D |----- Phase 2 |------> JOB C 作业D总是失败的,但
Master MultiJob Project (Job)
|----- Phase 1
|------> JOB A
|------> JOB D
|----- Phase 2
|------> JOB B
|------> JOB D
|----- Phase 2
|------> JOB C
作业D总是失败的,但是对于这个项目来说没问题。
如何从最终结果中排除结果作业D?(因为所有其他作业都成功,但最终结果失败)您希望使
主多作业项目(作业)
成功,而不管作业D
执行结果如何。但是,作业A
、作业B
和作业C
应该是成功的
您可以使用使主多作业项目(作业)成功
在Jenkins中安装此插件后,您将在Post-build Actions
部分获得Groovy-Postbuild
步骤。选择groovypostbuild
step,它将提供添加Groovy脚本以操纵作业行为的选项
在此处添加以下脚本:
if( manager.build.@result == hudson.model.Result.FAILURE){
errpattern = ~/[FAILURE].*/;
manager.build.logFile.eachLine{ line ->
errmatcher=errpattern.matcher(line)
if (errmatcher.find()) {
manager.build.@result = hudson.model.Result.SUCCESS
}
}
}
上面的脚本将在父作业失败时将其生成状态更改为success。但是,这里的问题是,对于您的阶段中的任何子作业失败,它都会将构建状态更改为成功
您只想忽略作业D的故障状态,而不想忽略其他作业。因此,我们可以确定作业A
、作业B
和作业C
的执行结果。如果其中任何一个失败,我们可以阻止Groovy脚本将父作业的构建状态更改为成功
现在,要确定作业A
、作业B
和作业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')
现在,它将忽略作业D的生成结果,然后检查作业A、B和C的生成结果是否成功。如果它们成功了,那么它会将多任务的构建结果更改为成功 另一个使用groovy脚本的解决方案。将其添加为多重作业中的生成后操作
def subjobStatusMap = [:]
manager.build.getSubBuilds().each { subBuild->
subJobName = subBuild.getJobName()
subJobNumber = subBuild.getBuildNumber()
job = hudson.model.Hudson.instance.getItem(subBuild.getJobName())
results = job.getLastCompletedBuild().getResult()
subjobStatusMap.put((subJobName), results)
}
manager.listener.logger.println(subjobStatusMap)
if(("SUCCESS".equals(subjobStatusMap.get("JOB_A").toString()))&& ("SUCCESS".equals(subjobStatusMap.get("JOB_B").toString())) && ("SUCCESS".equals(subjobStatusMap.get("JOB_C").toString()))) {
manager.build.@result = hudson.model.Result.SUCCESS
}
试试这个:
- 下载Jenkins插件
Groovy Postbuild
- 添加后期构建步骤:Groovy后期构建
- 键入如下代码:
导入hudson.model*
jobA=Hudson.instance.getJob(“jobA”)
jobB=Hudson.instance.getJob(“jobB”)
jobC=Hudson.instance.getJob(“jobC”)
jobD=Hudson.instance.getJob(“jobD”)
if(“SUCCESS”.equals(jobA.getLastBuild().getResult().toString())&&
“SUCCESS”.equals(jobB.getLastBuild().getResult().toString())&&
“SUCCESS”.equals(jobC.getLastBuild().getResult().toString())
){
manager.build@result=hudson.model.result.SUCCESS
}
您不能从配置中排除或禁用作业D,因为即使它失败也没问题吗?它需要一些有关project的附加信息。不,我不能从Multijob中排除或禁用它。谢谢,这是一个很好的问题解决方案,但不幸的是,我们无法安装插件。
def subjobStatusMap = [:]
manager.build.getSubBuilds().each { subBuild->
subJobName = subBuild.getJobName()
subJobNumber = subBuild.getBuildNumber()
job = hudson.model.Hudson.instance.getItem(subBuild.getJobName())
results = job.getLastCompletedBuild().getResult()
subjobStatusMap.put((subJobName), results)
}
manager.listener.logger.println(subjobStatusMap)
if(("SUCCESS".equals(subjobStatusMap.get("JOB_A").toString()))&& ("SUCCESS".equals(subjobStatusMap.get("JOB_B").toString())) && ("SUCCESS".equals(subjobStatusMap.get("JOB_C").toString()))) {
manager.build.@result = hudson.model.Result.SUCCESS
}