Остановите работу конвейера jenkins рано
в нашей работе конвейера Дженкинса у нас есть несколько этапов, и я хотел бы, чтобы любой из этапов потерпел неудачу, а затем остановить сборку и не продолжать на дальнейших этапах.
вот пример одного из этапов:
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
}
}
сценарий завершится ошибкой, и результат сборки будет обновлен, но задание продолжит работу на следующих этапах. Как я могу прервать или остановить работу, когда это происходит?
2 ответов
в основном это то, что sh
шаг делает. Если вы не получите результат в переменной, вы можете просто запустить:
sh "./build"
это выйдет, если скрипт повторит ненулевой код выхода.
Если вам нужно сначала сделать что-то, и нужно захватить результат, вы можете использовать шаг оболочки, чтобы выйти из задания
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
}
будет.
другой способ добиться такого поведения-создать исключение. На самом деле, это именно то, что делает сам Дженкинс. Таким образом, вы также можете установить статус сборки либо ABORTED
или FAILURE
. Этот пример прерывает построение:
stage('Building') {
currentBuild.rawBuild.result = Result.ABORTED
throw new hudson.AbortException('Guess what!')
echo 'Further code will not be executed'
}
выход:
[Pipeline] stage
[Pipeline] { (Building)
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
ERROR: Guess what!
Finished: ABORTED