如果下游任务失败,将上游Jenkins/Hudson标记为失败

19
4个回答

19

确保您使用正确的步骤执行下游作业;我发现由于我将我的作业设置为“后构建步骤”,所以我没有“阻止触发的项目完成其构建”的选项。将它更改为“构建任务”而不是“后构建任务”,使我能够在Parameterized Trigger插件中找到您正在寻找的选项。

输入图像描述


1
我要补充的是,阻塞的作业仍然占用构建执行器,因此对于长管道,您需要牢记这一点。非常感谢您的答案 - 我一直在尝试做同样的事情,甚至没有想到使用构建步骤。 - Jason
这是使用 "postbuild-task" 插件吗? - grepit

5

此代码基于下游作业状态,将向上游构建标记为不稳定/失败。

/*************************************************
Description: This script needs to put in Groovy 
Postbuild plugin of Jenkins as a Post Build task.
*************************************************/

import hudson.model.*

void log(msg) {
  manager.listener.logger.println(msg)
}

def failRecursivelyUsingCauses(cause) {
     if (cause.class.toString().contains("UpstreamCause")) {
        def projectName = cause.upstreamProject
        def number = cause.upstreamBuild
        upstreamJob = hudson.model.Hudson.instance.getItem(projectName)
        if(upstreamJob) {
             upbuild = upstreamJob.getBuildByNumber(number)
             if(upbuild) {
                 log("Setting to '" + manager.build.result + "' for Project: " + projectName + " | Build # " + number)
                 //upbuild.setResult(hudson.model.Result.UNSTABLE)
                 upbuild.setResult(manager.build.result);
                 upbuild.save()

                 // fail other builds
                 for (upCause in cause.upstreamCauses) {
                     failRecursivelyUsingCauses(upCause)
                 }
             }
        } else {
            log("No Upstream job found for " + projectName);
        }
    }
}


if(manager.build.result.isWorseOrEqualTo(hudson.model.Result.UNSTABLE)) {
    log("****************************************");
    log("Must mark upstream builds fail/unstable");
    def thr = Thread.currentThread()
    def build = thr.executable
    def c = build.getAction(CauseAction.class).getCauses()

    log("Current Build Status: " + manager.build.result);
    for (cause in c) {
        failRecursivelyUsingCauses(cause)
    }
    log("****************************************");
}
else {
    log("Current build status is: Success - Not changing Upstream build status");
}

在下游作业重建失败的情况下,是否有可能将上游作业标记为成功? - yair
即使上游父作业已完成,是否仍然可以更改状态? - Anton Krug

1
请查看以下响应:使用Groovy脚本失败的Hudson构建。您可以访问上游作业并使其构建失败,但是...要注意的是,目前Hudson/Jenkins后构建操作不允许指定任何顺序:如果您的Groovy脚本与其他后构建操作一起指定,并且这些操作会影响构建的结果(例如:测试结果的解析),那么如果Jenkins决定在您的Groovy脚本之后运行它们,则无法更新上游作业的状态。

0
在构建步骤中配置触发/调用其他项目的构建,选择下游作业。选择“阻止直到触发的项目完成其构建”。将默认设置保存在其下面。这些设置将使上游作业在下游作业失败时也失败。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接