【问题标题】:Marking upstream Jenkins/Hudson as failed if downstream job fails如果下游作业失败,则将上游 Jenkins/Hudson 标记为失败
【发布时间】:2011-09-18 05:30:44
【问题描述】:

我正在使用Parameterized Trigger Plugin 来触发下游构建。

如果下游失败,我如何指定上游作业应该失败?上游作业实际上是虚拟作业,参数传递给下游。

【问题讨论】:

    标签: continuous-integration hudson jenkins hudson-plugins


    【解决方案1】:

    确保您使用正确的步骤来执行您的下游作业;我发现,由于我是作为“构建后步骤”执行的,所以我没有“在触发的项目完成构建之前阻止”选项。将其更改为“构建任务”而不是“构建后任务”,让我可以在参数化触发器插件中找到您正在寻找的选项。

    【讨论】:

    • 我唯一要补充的是,被阻止的作业仍然占用构建执行程序,因此对于长管道,您需要牢记这一点。非常感谢这个答案 - 我自己也在尝试做同样的事情,甚至没有考虑过使用构建步骤。
    • 这使用“postbuild-task”插件呢?
    【解决方案2】:

    此代码将根据下游作业状态标记上游构建不稳定/失败。

    /*************************************************
    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");
    }
    

    【讨论】:

    • 如果重建失败的下游作业,是否可以将上游作业标记为成功?
    • 父上游作业完成后是否可以更改状态?
    【解决方案3】:

    查看以下回复:Fail hudson build with groovy script。您可以访问上游作业并使其构建失败但是......请注意 Hudson/Jenkins 构建后操作现在不允许指定任何顺序的事实:如果您的 groovy 脚本是在其他构建后指定的操作,并且这些操作会影响构建结果(即:解析测试结果),那么如果 Jenkins 决定在您的 groovy 脚本之后运行它们,您将无法更新上游作业的状态。

    【讨论】:

      【解决方案4】:

      在 Build step configure Trigger/Call builds on other projects 下,选择下游作业。选择“阻止直到触发的项目完成构建”。在它下面保存默认设置。此设置将使上游作业失败是下游失败。

      【讨论】:

        猜你喜欢
        • 2019-01-18
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        • 2020-03-21
        • 2011-09-02
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多