2016-04-26 4 views
0

を中断された場合はジェンキンスさんが判断するために照会するには?どのようにあなたはそれが中止された場合伝えるために、実行中のジョブの状態を照会しますどのように、まだ建物のパイプラインジョブがJenkinfileパイプラインスクリプト内

は通常FlowInterruptedExceptionまたはAbortException(スクリプトが実行されていた場合)が発生しますが、これらはキャッチして無視することができます。また、複数のステートメントがある場合、スクリプトはすぐに終了しません。

私は「currentBuild.Result」を見てみましたが、ビルドが完了になるまで設定されていないようです。おそらく 'currentBuild.rawBuild'の中の何か?

答えて

1

例外がキャッチされた場合、自動的にビルド・ステータスを設定します何もありません。あなたはそのような例外は、ビルドのステータスを設定しますが、スクリプトを続行させたい場合、あなたは一例

try { 
    somethingSlow() 
} catch (InterruptedException x) { 
    currentBuild.result = 'ABORTED' 
    echo 'Ignoring abort attempt at this spot' 
} 
// proceed 
+0

おかげでジェシー。私の「somethingSlowは」シェルスクリプトかもしれないとして、残念ながら私のcatchブロックは、もう少し複雑である必要があり、作業が終了したときには、InterruptedExceptionあるのではなく、AbortExceptionを発生させます。中止されたシェルスクリプトが正しい終了コードを返すと仮定すると、それが中止されたかどうかはわかりますが、100%ではないことがわかります。 –

+0

あなたはまた、次のものを使用することもできます: 'sh 'some-script;エコー$? >結果 '; def exit = Integer.parseInt(readFile( 'result')。trim()); if(exit!= 0){...} ' –

+0

あなたの返信をありがとう!残念ながら、終了コードをファイルに書き込むことは、ジョブの終了を検出する良い方法ではありません。ウィンドウ上のバッチファイルは、ジェンキー終了後にいくつかの余分な行を実行することがあります。 「結果」ファイルはほとんど常に書き込まれるので、終了コードが実際のエラーか終了かを把握しなければなりません。 –

0

のために書くことができますあなたは、並列ステップでウォッチドッグブランチを実装することができます。それは、危険な可能性のあるウォッチドッグ状態を追跡するためにグローバルを使用しています。「並列」のグローバルにアクセスするのがスレッドセーフであるかどうかはわかりません。 'bat'が終了を無視して例外を発生させない場合でも機能します。

コード:

runWithAbortCheck { abortState -> 
    // run all tests, print which failed 

    node ('windows') { 
     for (int i = 0; i < 5; i++) { 
      try { 
       bat "ping 127.0.0.1 -n ${10-i}" 
      } catch (e) { 
       echo "${i} FAIL" 
       currentBuild.result = "UNSTABLE" 
       // continue with remaining tests 
      } 
      abortCheck(abortState) // sometimes bat doesn't even raise an exception! so check here 
     } 
    } 
} 


def runWithAbortCheck(closure) { 
    def abortState = [complete:false, aborted:false] 
    parallel (
     "_watchdog": { 
      try { 
       waitUntil { abortState.complete || abortState.aborted } 
      } catch (e) { 
       abortState.aborted = true 
       echo "caught: ${e}" 
       throw e 
      } finally { 
       abortState.complete = true 
      } 
     }, 

     "work": { 
      try { 
       closure.call(abortState) 
      } 
      finally { 
       abortState.complete = true 
      } 
     }, 

     "failFast": true 
    ) 
} 

def _abortCheckInstant(abortState) { 
    if (abortState.aborted) { 
     echo "Job Aborted Detected" 
     throw new org.jenkinsci.plugins.workflow.steps.FlowInterruptedException(Result.ABORTED) 
    } 
} 

def abortCheck(abortState) { 
    _abortCheckInstant(abortState) 
    sleep time:500, unit:"MILLISECONDS" 
    _abortCheckInstant(abortState) 
} 
関連する問題