Jenkins Pipeline Script Try Catch Set Stage as Failed but Continue
Try-catch block in Jenkins pipeline script
Solution 1
You're using the declarative style of specifying your pipeline, so you must not use try/catch blocks (which are for Scripted Pipelines), but the post section. See: https://jenkins.io/doc/book/pipeline/syntax/#post-conditions
Solution 2
try like this (no pun intended btw)
script { try { sh 'do your stuff' } catch (Exception e) { echo 'Exception occurred: ' + e.toString() sh 'Handle the exception!' } } The key is to put try...catch in a script block in declarative pipeline syntax. Then it will work. This might be useful if you want to say continue pipeline execution despite failure (eg: test failed, still you need reports..)
Solution 3
Look up the AbortException class for Jenkins. You should be able to use the methods to get back simple messages or stack traces. In a simple case, when making a call in a script block (as others have indicated), you can call getMessage() to get the string to echo to the user. Example:
script { try { sh "sudo docker rmi frontend-test" } catch (err) { echo err.getMessage() echo "Error detected, but we will continue." } ...continue with other code... } Solution 4
This answer worked for me:
pipeline { agent any stages { stage("Run unit tests"){ steps { script { try { sh ''' # Run unit tests without capturing stdout or logs, generates cobetura reports cd ./python nosetests3 --with-xcoverage --nocapture --with-xunit --nologcapture --cover-package=application cd .. ''' } finally { junit 'nosetests.xml' } } } } stage ('Speak') { steps{ echo "Hello, CONDITIONAL" } } } } Solution 5
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 holds true for any other scripted pipeline syntax you would like to use in a declarative pipeline as well.
Related videos on Youtube
Comments
-
I'm trying to use the following code to execute builds, and in the end, execute post build actions when builds were successful. Still, I get a MultipleCompilationErrorsException, saying that my try block is Not a valid section definition. Please help, I tried a lot reorganize the block but can't seem to be able to solve the issue.
#!/usr/bin/env groovy pipeline{ agent any try { stages{ stage("Parallel 1") { steps { parallel ( 'firstTask' : { build( "DSL-Controll-Demo-Fibonacci-1" ) }, 'secondTask' : { build( "DSL-Controll-Demo-Fibonacci-2" ) } ) } } stage("Feature") { steps { build( "DSL-Controll-Demo-Fibonacci-5" ) build( "DSL-Controll-Demo-Fibonacci-6" ) } } stage("Parallel 2") { steps{ parallel ( "thirdTask" : { build( "DSL-Controll-Demo-Fibonacci-3" ) }, "forthTask" : { build( "DSL-Controll-Demo-Fibonacci-4" ) } ) } } } } catch(all) { currentBuild.result = 'FAILURE' } if(currentBuild.result != 'FAILURE') { stages{ stage("Post Build") { steps { build("DSL-Controll-Demo-Fibonacci-7") } } } } } -
Using the declarative script{} step, is there a way to to translate an exception to a human readable form? Eg: when a build variable doesn't match a regex how can you deliberately break the build with an error message? IndexOutOfBoundsException doesn't really tell anything about the problem at hand..
-
There is only 1 post section in a declarative pipeline, so if you use parallel blocks, you cannot cleanup and archive logs in each parallel (which could run on a separate node) without a try/catch.
-
Note that the generic
Exceptionis the only exception allowed (by default) by the Jenkins security sandbox.
Recents
Related
Source: https://9to5answer.com/try-catch-block-in-jenkins-pipeline-script
0 Response to "Jenkins Pipeline Script Try Catch Set Stage as Failed but Continue"
Post a Comment