Получить причину сбоя сборки Maven внутри конвейера Jenkins - PullRequest
2 голосов
/ 18 апреля 2019

У меня есть настроенный конвейер Jenkins, где я выполняю несколько сборок Maven. Я хочу относиться к одному из них как к несмертельному, если причина известна.

Я попытался достичь этого, изучив сообщение об исключении, например,

try {
    sh "mvn -U clean verify sonar:sonar ${sonarcloudParams}"
} catch ( Exception e ) {
    if ( e.getMessage().contains("not authorized to run analysis")) {
        echo "Marking build unstable due to missing SonarCloud onboarding. See https://cwiki.apache.org/confluence/display/SLING/SonarCloud+analysis for steps to fix."
        currentBuild.result = 'UNSTABLE'
    }
}

Проблема в том, что сообщение об исключении не от Maven, а вместо этого "скрипт вернул код завершения 1".

Нет дополнительной информации в e.getCause().

Как я могу получить доступ к причине сбоя сборки Maven внутри моего скриптового конвейера?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Вы можете получить вывод команды, а затем проанализировать ее в определенных сообщениях.

def output = sh(
        script: "mvn -U clean verify sonar:sonar ${sonarcloudParams}",
        returnStdout: true
    ).trim()

echo "mvn cmd output: ${output}"

if(output.contains('not authorized to run analysis')) {
    currentBuild.result = 'UNSTABLE'
}


// parse jenkins job build log
def logUrl = env.BUILD_URL + 'consoleText'

def cmd = "curl -u \${JENKINS_AUTH} -k ${logUrl} | tail -n 50"

def output = sh(returnStdout: true, script: cmd).trim()

echo "job build log: ${output}"

if(output.contains('not authorized to run analysis')) {
    currentBuild.result = 'UNSTABLE'
}
1 голос
/ 18 апреля 2019

Один из вариантов - проверить последние строки журнала, используя

def sonarCloudNotEnabled = currentBuild.rawBuild.getLog(50).find { 
    line -> line.contains("not authorized to run analysis") 
}

Однако по умолчанию это не работает.В экземпляре Jenkins я использую ошибки из-за сценариев

, которым нельзя использовать метод org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild.Администраторы могут решить, утвердить или отклонить эту подпись.

...