web-dev-qa-db-ja.com

try / catch / finallyは、Groovyコンパイラー例外の場合にJenkinsfileの問題をマスクします

私のJenkinsfileには次のようなコードがあります:

node {
   checkout scm
   // do some stuff
   try {
       // do some maven magic
   } catch (error) {
       stage "Cleanup after fail"
       emailext attachLog: true, body: "Build failed (see ${env.BUILD_URL}): ${error}", subject: "[JENKINS] ${env.JOB_NAME} failed", to: '[email protected]'
       throw error
   } finally {
       step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
   }
}

try { }のjenkins-pipeline関連エラーのために上記のコードが失敗した場合(たとえば、未承認の静的メソッドを使用)、スクリプトはサイレントに失敗します。 try/catch/finallyを削除すると、エラーが表示されます。私は何か間違っていますか? errorを再スローして、パイプラインエラーをログに表示すべきではありませんか?

編集:私は問題をグルーヴィーな構文に特定することができました。まだ割り当てられていない変数を使用します。例:echo foofooがどこでも宣言/割り当てられていない場合、Jenkinsはビルドに失敗し、例外を再試行するtry/catch/finally内にある場合は理由を表示しません。

23

これは、finallyブロック内またはcatch内の再スローの前に追加の例外がスローされたときに発生します。これらの場合、RejectedAccessExceptionは飲み込まれ、script-securityはキャッチしません。

7
amuniz