Блок Try-catch в сценарии конвейера Дженкинса

Я пытаюсь использовать следующий код для выполнения сборок и, в конце концов, выполнять действия после сборки, когда сборки были успешными. Тем не менее, я получаю MultipleCompilationErrorsException, говоря, что мой блок try не является допустимым определением раздела. Пожалуйста, помогите, я много пытался реорганизовать блок, но, похоже, не могу решить проблему.

#!/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")
                }   
            }   
        }
    }
}

2 ответов


вы используете декларативный стиль указания конвейера, поэтому вы не должны использовать блоки try/catch (которые предназначены для сценариев конвейеров), но раздел post. Смотри:https://jenkins.io/doc/book/pipeline/syntax/#post-conditions


попробуйте так (Не каламбур предназначен кстати)

script {
  try {
      sh 'do your stuff'
  } catch (Exception e) {
      sh 'Handle the exception!'
  }
}

ключ должен поставить try...catch в блоке скрипта в декларативном синтаксисе конвейера. Тогда это сработает. Это может быть полезно, если вы хотите сказать продолжить выполнение конвейера, несмотря на сбой (например: тест не удался, все еще нужны отчеты..)