Ответ 1
В основном это то, что делает шаг sh
. Если вы не зафиксируете результат в переменной, вы можете просто запустить:
sh "./build"
Это приведет к завершению, если script возвращает ненулевой код выхода.
Если вам нужно сначала сделать материал, и вам нужно зафиксировать результат, вы можете использовать шаг оболочки для выхода из задания
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
// do more stuff here
// this will terminate the job if result is non-zero
// You don't even have to set the result to FAILURE by hand
sh "exit ${result}"
}
}
Но следующее даст вам то же самое, но кажется более разумным делать
stage('Building') {
try {
sh './build.sh'
} finally {
echo '[FAILURE] Failed to build'
}
}
Также можно вызвать возврат в коде. Однако, если вы находитесь внутри stage
, он будет возвращаться только на этом этапе. Итак,
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
return
}
echo "This will not be displayed"
}
echo "The build will continue executing from here"
не удастся выполнить задание, но
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
}
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
return
}
будет.