Как отловить исключение в Groovy? - PullRequest
0 голосов
/ 22 февраля 2019

В приведенном ниже коде:

def build(arg1, arg2, arg3, arg4, arg5){

    try{

        executeBuildCommand(commandString, component)
    }
    }catch(Exception e){

        print ' build() method raised exception'
        print "Error cause: ${e}"
        error('Build stage - failed')
    }
}


def executeBuildCommand(arg1, arg2){

    try{
        // BUILD_FULL = sh('build the code')

        if(BUILD_FULL == true){
            def data = new URL(${BUILD_URL}).getText()
        }        
    }catch(Exception e){
        throw e
    }   
}

Я понимаю, что "${BUILD_URL}" интерполирует во время выполнения

Но блок catch в методе build() не вызывает исключениеброшенный на линии (def data = new URL(${BUILD_URL}).getText())

вместо этого я получаю стек исключений

java.lang.NoSuchMethodError: No such DSL method '$' found among steps [ArtifactoryGradleBuild, MavenDescriptorStep, acceptGitLabMR, 
addGitLabMRComment, addInteractivePromotion, ansiColor, archive, artifactoryDistributeBuild,... ]  or 
globals [Artifactory, LastChanges, currentBuild, docker, env, params, pipeline, scm]
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:201)
    at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122)

Как обрабатывать исключения?

1 Ответ

0 голосов
/ 22 февраля 2019

В вашем executeBuildCommand есть как минимум две проблемы:

  1. new URL(${BUILD_URL}) означает, что вы пытаетесь вызвать какой-то метод $, в котором единственным аргументом является замыкание.Вы, конечно, хотели, чтобы он выглядел как new URL("${BUILD_URL}"), чтобы интерполировать BUILD_URL.Или почему бы не использовать просто new URL(BUILD_URL)?
  2. В результате пункта 1 вы получите java.lang.NoSuchMethodError для $.Но вы пытаетесь поймать Exception, который не является суперклассом NoSuchMethodError.Последний имеет java.lang.Error в качестве суперкласса.Если бы вы попытались поймать Error, вы бы увидели ваши сообщения
...