Используемая команда Cucumber просто генерирует отчет независимо от результата теста. Так что да, вы должны каким-то образом заставить свой конвейер выйти из строя, так как проблема, с которой вы сталкиваетесь, заключается в том, что ваша тестовая команда не возвращается, вызывая сбой вашего конвейера.
Путь к go состоит в том, чтобы заставить эту команду работать тесты возвращают ненулевой код выхода (выход 1), если что-то пошло не так в ваших тестах. Это сделало бы ваш этап конвейера красным go.
В случае, если вы запускаете свои тесты с использованием Maven, это будет автоматически управляться с помощью 'mvn test' (или любого другого). В противном случае, если вы не можете сделать это, вам придется создать что-то вроде, например, скрипта sh, который возвращает код выхода (0 pass / 1 fail), или функцию groovy внутри тега 'script', которая устанавливает конвейер currentBuild.result значение:
def checkTestResult() {
// Check some file to see if tests went fine or not
return 'SUCCESS' // or 'FAILURE'
}
...
stage {
script {
currentBuild.result = checkTestResult()
if (currentBuild.result == 'FAILURE') {
sh "exit 1" // Force pipeline exit with build result failed
}
}
}
...
Я рекомендую вам использовать команду cucumber для действия «всегда» после сборки вашего декларативного конвейера, поскольку это шаг, который вы, вероятно, будете выполнять каждый раз в конце конвейер, если он проходит или выходит из строя. Смотрите следующий пример:
pipeline {
stages {
stage('Get code') {
// Whatever
}
stage('Run tests') {
steps {
sh "mvn test" // run_tests.sh or groovy code
}
}
}
post {
always {
cucumber '**/cucumber.json'
}
}
}