私の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 foo
foo
がどこでも宣言/割り当てられていない場合、Jenkinsはビルドに失敗し、例外を再試行するtry/catch/finally内にある場合は理由を表示しません。
これは、finally
ブロック内またはcatch
内の再スローの前に追加の例外がスローされたときに発生します。これらの場合、RejectedAccessException
は飲み込まれ、script-security
はキャッチしません。