Я провожу некоторые испытания в моем трубопроводе.Моя цель заключается в том, чтобы при наличии файла ошибки сборка не удалась.Но если по какой-либо причине в тестах возникло исключение и не было записано ни файла ошибки, ни файла успешной работы, конвейер также должен завершиться неудачей.Если ни одно из условий сбоя не выполнено, я бы хотел, чтобы выполнялась вышестоящая работа.
Я написал ее поэтапно, и изначально она выглядела так:
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}
}
Приведенный выше кодработает.Когда выполняемые тесты записывают файл ошибок, конвейер завершается ошибкой.Затем я попытался изменить код, чтобы обслужить результат, где не пишутся ни файлы ошибок, ни успехов.
stage('system tests') {
steps {
dir(project_root) {
def error_exists = sh(
script: 'ls error.txt', returnStatus: true
)
def success_exists = sh(
script: 'ls success.txt', returnStatus: true
)
if (error_exists == 0) {
currentBuild.result = 'FAILED'
return
} else if (success_exists == 1 && error_exists == 1) {
currentBuild.result = 'FAILED'
return
}
build job: 'my-job;
}
}
}
Я смоделировал ситуацию, когда ни один файл не был записан, и конвейер не вышел из строя, и вместо этого он запустил сборку восходящего потока.Почему я не вхожу в предложение else if
, если результат обоих сценариев оболочки ложен?Я взял логические операторы из здесь и думаю, что они должны быть выполнены (приведенный ниже код выводится из сценариев оболочки в конвейере нового задания)
[new-job] Running shell script
+ ls error.txt
ls: cannot access error.txt: no such file or directory
[new-job] Running shell script
+ ls success.txt
ls: cannot access success.txt: no such file or directory