Jenkins Multijob 最终结果

标签 jenkins jenkins-plugins

我有多个作业结构:

Master MultiJob Project (Job)
 |----- Phase 1
            |------> JOB A 
            |------> JOB D
 |----- Phase 2
            |------> JOB B
            |------> JOB D
 |----- Phase 2
            |------> JOB C

作业 D 总是失败,但对于这个项目来说还可以。 如何从最终结果中排除结果作业 D? (因为所有其他工作都是成功的,但最终结果是FAILED)

最佳答案

无论JOB D执行结果如何,您都希望Master MultiJob Project (Job)成功。但是,JOB AJOB BJOB C 应该会成功。

您可以使用 Groovy Postbuild Plugin 来成功完成Master Multijob Project (Job) .

在 Jenkins 中安装此插件后,您将在 Post-build Actions 部分中看到 Groovy Postbuild 步骤。选择 Groovy Postbuild 步骤,它将提供一个选项来添加 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
    }
  }
}

上面的脚本将执行的操作是,如果父作业失败,则将其更改为成功。但是,这里的问题是,对于您阶段中的任何子作业失败,它都会将构建状态更改为成功。

您只想忽略JOB D 的 FAILURE 状态,而不是其他作业。因此,我们能做的就是确定JOB AJOB BJOB C的执行结果。如果其中任何一个失败,我们可以阻止 Groovy 脚本将父作业的构建状态更改为成功。

现在,确定 JOB AJOB BJOB 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 AJOB B 的构建结果和作业 C

if((manager.build.@result == 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()) {
        manager.build.@result = hudson.model.Result.SUCCESS
    }
  }
}

现在,它将忽略JOB D的构建结果,然后检查JOB A, B & C的构建结果是否成功。如果它们成功,那么它会将您的 Multijob 的构建结果更改为 SUCCESS。

关于Jenkins Multijob 最终结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45934504/

相关文章:

java - 运行 Maven 测试时 Jenkins Java VM 错误 - 无法识别的 VM 选项 'MaxPermSize-128m'

Jenkins SSH 管道步骤 -- com.jcraft.jsch.JSchException : invalid privatekey: [B@84d6b5c

jenkins - 安装 Jenkins 角色策略插件后 - 所有登录失败

jenkins - Jmeter --- 为每次运行生成单独的 .jtl 结果文件

java - Jenkins中的算法协商失败SSH

jenkins - Gitlab Webhook 和 Jenkins : No Data Received

jenkins - Jenkins 自增发布版本

jenkins - 即使设置了--prefix也无法通过--prefix值访问Jenkins

jenkins - 如何在 Jenkins 矩阵项目中绘制基准数据

jenkins - 构建通过后运行 shell 脚本