2016-12-01 11 views
7

ジェンキンスパイプラインの仕事では、いくつかのステージがありますが、ステージのいずれかが失敗した場合は、ビルドを停止して次のステージに進む必要はありません。ジェンキンスパイプラインの仕事を早期に中止する

stage('Building') { 
    def result = sh returnStatus: true, script: './build.sh' 
    if (result != 0) { 
     echo '[FAILURE] Failed to build' 
     currentBuild.result = 'FAILURE' 
    } 
} 

スクリプトが失敗し、ビルド結果が更新されますが、ジョブは次のステージへで続行:

は、ここではステージの一つの例です。これが起こると、どのようにして仕事を中止することができますか?

答えて

7

基本的には、shのステップが行うことです。あなたは変数に結果をキャプチャしていない場合は、あなただけで実行できます。

sh "./build" 

スクリプトがゼロ以外の終了コードをreurns場合、これは終了します。

あなたが最初のものを行う必要があり、その結果をキャプチャする必要がある場合は、あなたが仕事

stage('Building') { 
    def result = sh returnStatus: true, script: './build.sh' 
    if (result != 0) { 
     echo '[FAILURE] Failed to build' 
     currentBuild.result = 'FAILURE' 
     // do more stuff here 

     // this will terminate the job if result is non-zero 
     // You don't even have to set the result to FAILURE by hand 
     sh "exit ${result}" 
    } 
} 

を終了するには、シェルの手順を使用することができますが、次はあなたに同じを与えるが、より正気思われますdo

stage('Building') { 
    try { 
     sh './build.sh' 
    } finally { 
     echo '[FAILURE] Failed to build' 
    } 
} 

コードでリターンを呼び出すこともできます。しかし、あなたがstageの中にいる場合、それはその段階から戻ってくるだけです。だから、

stage('Building') { 
    def result = sh returnStatus: true, script: './build.sh' 
    if (result != 0) { 
     echo '[FAILURE] Failed to build' 
     currentBuild.result = 'FAILURE' 
     return 
    } 
    echo "This will not be displayed" 
} 
echo "The build will continue executing from here" 

は文句を言わない仕事を終了しますが、

stage('Building') { 
    def result = sh returnStatus: true, script: './build.sh' 
} 
if (result != 0) { 
    echo '[FAILURE] Failed to build' 
    currentBuild.result = 'FAILURE' 
    return 
} 

意志。

3

この動作を実現する別の方法は、例外をスローすることです。実際、これはJenkins自身がやっていることです。こうすることで、ビルドステータスをABORTEDまたはFAILUREに設定することもできます。この例では、ビルドを中止します:

stage('Building') { 
    currentBuild.rawBuild.result = Result.ABORTED 
    throw new hudson.AbortException('Guess what!') 
    echo 'Further code will not be executed' 
} 

出力:

[Pipeline] stage 
[Pipeline] { (Building) 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] End of Pipeline 
ERROR: Guess what! 
Finished: ABORTED 
+0

をジェンキンズ2.89.3では、これは誤りです: 'org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:スクリプトは、新しいを使用することはできませんhudson.AbortException java.lang.String' –

+0

サンドボックスモードが有効になっているように見え、その例外をスローすることは禁じられています。奇妙な、しかし、サンドボックスモードを無効にするのは、そのトリックを行う必要があります。 – Jazzschmidt

+0

また、Manage Jenkins> In-process Script Approvalを使用して使用を許可することもできます – Jazzschmidt

関連する問題