Как прервать стадию Jenkins после неудачных испытаний
Я использую Jenkins для запуска пользовательской среды BDD. В настоящее время он настроен на ежедневную работу, и весь набор тестов запускается каждый раз. Теперь я пытаюсь настроить свой конвейер (используя декларативный конвейер) таким образом, чтобы у меня было несколько этапов ежедневных прогонов: предварительная проверка, основной прогон, отправка отчетов и т. Д. Моя цель - провести этап предварительной проверки, который будет покажите, что работает несколько ключевых функций, а после этого - запустить основной пакет. И я столкнулся с проблемой, когда мне нужно прервать следующий этап, если мои сценарии предварительной проверки потерпят неудачу. Пока я не нашел решения, поэтому буду признателен, если кто-нибудь поделится идеей. Проблема заключается в том, что выполнение команды оболочки всегда успешно, набор тестов не дает сбоя, просто сценарии тестирования могут дать сбой. Таким образом, в зависимости от этого мне нужно продолжить / прервать следующий этап. Вот так выглядит мой файл конвейера:
...
pipeline {
agent {
...
}
environment {
...
}
options {
...
}
triggers {
...
}
parameters {
...
}
stages {
stage('Setup Environment') {
steps {
script {
...
}
...
}
}
stage('Phase 1: Pre-run Check') {
steps {
sh "bash -c '. ~/.rvm/scripts/rvm; bin/hal test ${hal_env} ${params.Browser} --tags @phase-1-check'"
}
}
stage('Test On Firefox') {
parallel {
stage('Runner A') {
steps {
sh "bash -c '. ~/.rvm/scripts/rvm; bin/hal test ${hal_env} ${params.Browser} --tags @phase-2-test --retry 2 --parallel [1,4] || true'"
}
}
...
}
}
stage('Send Daily results') {
steps {
...
}
}
}
post {
always {
...
}
}
}
...
2 ответа
Я не мог заставить свой набор тестов вернуть код завершения, но вместо этого я использовал '| tee output'команда для вывода журнала в файл, который я мог впоследствии прочитать (с помощью команды awk) и найти ошибки в журнале. Итак, проблема решена, и вот мое решение:
def phase1_status;
...
stage('Phase 1: Pre-run Check') {
steps {
sh "bash -c '<Start Command> | tee hal_output'"
script {
phase1_status = sh( returnStatus: true, script: "awk \'/scenario.*failed/ {exit 1}\' hal_output")
}
}
}
stage('Test On Firefox') {
when {
equals expected: 0, actual: phase1_status
}
...
"""
Можете ли вы убедиться, что ваш набор тестов возвращает ненулевой код завершения, если тесты не пройдены?