Как прервать стадию 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
            }
...

"""

Можете ли вы убедиться, что ваш набор тестов возвращает ненулевой код завершения, если тесты не пройдены?

Другие вопросы по тегам