Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Try-catch block in Jenkins pipeline script

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")                 }                }            }     } } 
like image 467
lenkovi Avatar asked May 16 '17 14:05

lenkovi


2 Answers

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..)

like image 60
Ciado Avatar answered Sep 21 '22 04:09

Ciado


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

like image 44
Mike Avatar answered Sep 23 '22 04:09

Mike