I have code similar to the one below in my 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' } }
If the above code fails because of some jenkins-pipeline related errors in the try { }
(e.g. using unapproved static method) the script fails silently. When I remove the try/catch/finally I can see the errors. Am I doing something wrong? Shouldn't rethrowing error
make the pipeline errors appear in the log?
EDIT: I've managed to nail down the problem to groovy syntax, when e.g. I use a variable that hasn't been assigned yet. Example: echo foo
If foo
is not declared/assigned anywhere Jenkins will fail the build and won't show the reason if it is inside the try/catch/finally which rethrows the exception.
The Jenkinsfile is written using the Groovy Domain-Specific Language and can be generated using a text editor or the Jenkins instance configuration tab. The Declarative Pipelines is a relatively new feature that supports the concept of code pipeline.
Jenkins features a Groovy script console which allows one to run arbitrary Groovy scripts within the Jenkins controller runtime or in the runtime on agents.
try/catch is scripted syntax. So any time you are using declarative syntax to use something from scripted in general you can do so by enclosing the scripted syntax in the scripts block in a declarative pipeline. So your try/catch should go inside stage >steps >script.
This happens when an additional exception is thrown inside the finally
block or before the re-throw inside catch
. In these cases the RejectedAccessException
is swallowed and script-security
does not catch it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With