簡體   English   中英

如果下游作業失敗,則將上游Jenkins / Hudson標記為失敗

[英]Marking upstream Jenkins/Hudson as failed if downstream job fails

我使用參數化觸發插件來觸發下游構建。

如果下游失敗,如何指定我的上游作業應該失敗? 上游作業實際上是虛擬作業,參數傳遞給下游。

確保使用正確的步驟執行下游作業; 我發現自從我執行我的“后構建步驟”以來,我沒有“阻止直到被觸發的項目完成他們的構建”選項。 將其更改為“構建任務”而不是“后構建任務”,允許我在參數化觸發器插件中找到您要查找的選項。

在此輸入圖像描述

此代碼將根據下游作業狀態標記上游構建不穩定/失敗。

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

看看下面的響應: 使用groovy腳本構建失敗的hudson 您可以訪問上游作業並使其構建失敗但是......請注意Hudson / Jenkins現在的后構建操作不允許指定任何排序這一事實:如果除了其他后期構建之外還指定了groovy腳本動作,這些動作會影響構建的結果(即:解析測試結果),如果Jenkins決定在你的groovy腳本之后運行它們,你將無法更新上游作業的狀態。

在Build步驟下,在其他項目上配置Trigger / Call構建,選擇下游作業。 選擇“阻止直到觸發的項目完成其構建”。 保存其下的默認設置。 此設置將使上游作業失敗,下游失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM