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
}