По умолчанию, если сценарий, переданный шагу sh
, существует с ненулевым кодом выхода, шаг конвейера завершается ошибкой и генерируется исключение.В этом случае следующая строка кода, где вы читаете файл, не выполняется.
Jenkins 'sh
step поддерживает опцию returnStatus
.Если вы установите его на true
, он сделает sh
шаговый код возврата возврата и не будет выдавать никаких исключений, если этот код выхода будет отличным от нуля.Однако в этом случае вы должны отреагировать, если код выхода сообщит вам об ошибке.Рассмотрим следующий пример:
stage ('Build') {
def exitCode = sh(script: 'mvn clean -B org.jacoco:jacoco-maven-plugin:prepare-agent install > commandResult', returnStatus: true)
def result = readFile('commandResult').trim()
if (exitCode != 0) {
// error happened
step([$class: 'XUnitBuilder', testTimeMargin: '3000', thresholdMode: 1, thresholds: [
[$class: 'FailedThreshold', failureThreshold: '', unstableThreshold: '1'],
[$class: 'SkippedThreshold', failureThreshold: '', unstableThreshold: '']
],tools: [
[$class: 'JUnitType', deleteOutputFiles: false, failIfNotNew: false, pattern: '**/target/surefire-reports/TEST-*.xml', skipNoTestFiles: true, stopProcessingIfError: false]
]])
}
// do something with result
echo "{$result}"
// e.g mark build as error
error 'Maven command failed!'
}
Ссылка: https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
Использование mvn --log-file
вместо >
Вы можететакже попробуйте:
stage ('Build') {
def exitCode = sh(script: 'mvn --log-file commandResult clean -B org.jacoco:jacoco-maven-plugin:prepare-agent install', returnStatus: true)
def result = readFile('commandResult').trim()
if (exitCode != 0) {
// error happened
step([$class: 'XUnitBuilder', testTimeMargin: '3000', thresholdMode: 1, thresholds: [
[$class: 'FailedThreshold', failureThreshold: '', unstableThreshold: '1'],
[$class: 'SkippedThreshold', failureThreshold: '', unstableThreshold: '']
],tools: [
[$class: 'JUnitType', deleteOutputFiles: false, failIfNotNew: false, pattern: '**/target/surefire-reports/TEST-*.xml', skipNoTestFiles: true, stopProcessingIfError: false]
]])
}
// do something with result
echo "{$result}"
// e.g mark build as error
error 'Maven command failed!'
}