Конвейер Jenkins завершится, если скрипт на любом этапе завершится неудачно - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть конвейерные задания jenkins, внутри которых выполняются сценарии оболочки. даже если сценарии оболочки не будут выполнены, задание будет отображаться только как пройденное.

Мой конвейер:

stage('Code Checkout') {
timestamps {
step([$class: 'WsCleanup'])
echo "check out======GIT =========== on ${env.gitlabBranch}"
checkout scm
}                                     
}
stage("build") {
sh 'sh script.sh'  
}
}
catch(err){
currentBuild.result = 'FAILURE'
emailExtraMsg = "Build Failure:"+ err.getMessage()
throw err
}
}
} 
LOG:
+ sh script.sh
$RELEASE_BRANCH is empty
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

1 Ответ

0 голосов
/ 07 апреля 2020

Похоже, ваш скрипт возвращается с нулевым кодом состояния. В противном случае он выдаст исключение, как описано в sh описание шага . Проблема может заключаться в том, что состояние выхода sh sctipt.sh является состоянием выхода последней выполненной команды , и ваш сценарий может что-то сделать после возникновения ошибки (например, echo что-то перед выходом). Самый простой и грубый способ убедиться, что каждая ошибка возвращена, это использовать поставить set -e вверху вашего скрипта.

Вам не нужен catch, чтобы иметь эту функциональность (я имею в виду сбой на ошибка сценария), если вы не хотите делать дополнительные операции в случае ошибки. Но если вы это сделаете, то вы должны заключить выполнение скрипта в предложение try:

stage("build") {
  try {
    sh 'sh script.sh'  
  }
  catch (err) {
    currentBuild.result = 'FAILURE'
    emailExtraMsg = "Build Failure:"+ err.getMessage()
    throw err
  }
}
...