2011-06-19 14 views
13

Parameterized Trigger Pluginを使用して、下流ビルドをトリガーします。ダウンストリームジョブが失敗した場合、上流のJenkins/Hudsonを失敗としてマークします。

ダウンストリームで障害が発生した場合にアップストリームジョブが失敗するように指定する方法を教えてください。上流のジョブは、実際にはパラメータが下流に渡されるダミージョブです。

答えて

1

Fail hudson build with groovy scriptをご覧ください。あなたは上流の仕事にアクセスすることができますが、そのビルドに失敗します... Hudson/Jenkinsのビルド後のアクションは今すぐ注文を指定することができません:あなたのgroovyスクリプトが他のポストビルドアクションがビルドの結果(つまりテスト結果の解析)に影響する場合、Jenkinsがgroovyスクリプトの後に実行することを決定した場合、アップストリームジョブのステータスを更新することはできません。

14

ダウンストリームジョブを実行するために正しい手順を使用していることを確認してください。私は私が "ビルド後のステップ"として私のところを実行していたので、 "トリガーされたプロジェクトがビルドを完了するまで"ブロックしていないことを発見しました。 「ビルド後の作業」ではなく「ビルドタスク」に変更して、パラメータ化されたトリガープラグインで探しているオプションを見つけることができました。

enter image description here

+0

唯一のものは、長いパイプラインのためにあなたが心の中でそれを露出する必要があるので、ブロックされたジョブがまだビルドエグゼキュータを占めているということです。しかし、この回答をお寄せいただきありがとうございます。同じことをやろうとしていて、ビルドステップの使用についても考えていませんでした。 – Jason

+0

これは "postbuild-task"プラグインを使用しますか? –

+0

ありがとうございました(私の最後の質問は無視してください) –

4

このコードは不安定な上流のビルドをマークする/下流ジョブのステータスに基づいて失敗しました。私は追加したい

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

ダウンストリームジョブが失敗した場合にアップストリームジョブをSUCCESSとマークすることはできますか? – yair

関連する問題