Сборки Jenkins не помечены как нестабильные / сбойные при сбое PHPUnit
Таким образом, название в значительной степени выдает его. Мы используем Jenkins 2 с PHPUnit 6.5.12 и пару дней назад все работало нормально. Теперь каждая сборка, которую мы делаем и имеет сбои (или, что еще хуже, ошибки) в разделе PHPUnit, не помечается как нестабильная / неудачная. Для тестов мы используем PHPUnit + Selenium Standalone 3.4.0 с новейшим geckodriver. (Да, есть более новые версии Selenium, но они всегда убивают тесты с исключениями и вообще не запускаются - 3.4.0 работает хорошо.)
Часть нашего конвейера, который запускает юнит-тесты, можно увидеть ниже:
stage ('UnitTests') {
steps {
sh 'cd module/App/test/ && chmod a+r+w+x runtests.sh && ./runtests.sh'
}
}
}
post {
success {
slackSend color: '#458B00', message: "Build success for Pipeline ${env.JOB_NAME} [#${env.BUILD_NUMBER}]"
sh 'rm -rf \\"${WORKSPACE}/data/cache/*\\"'
sh 'rm -rf ${WORKSPACE}/data/cache/*'
sh 'rsync --delete -r "${WORKSPACE}"/* myhost:/path
}
failure {
slackSend color: '#8C1717', message: "Build failed for Pipeline ${env.JOB_NAME} [#${env.BUILD_NUMBER}]"
}
unstable {
slackSend color: '#FF8C00', message: "Build unstable for Pipeline ${env.JOB_NAME} [#${env.BUILD_NUMBER}]"
}
}
runtests.sh по сути запускает тесты PHPUnit (а также автономный сервер Selenium) и убивает Selenium и каждый оставшийся сеанс Firefox в конце.
Теперь, исходя из того, что я собрал, PHPUnit ДОЛЖЕН иметь несколько кодов выхода, таких как 1 для сбоя, 0 для успеха и так далее. Итак, что-то здесь произошло? Из того, что я видел, не вышло ни одной новой версии, которая касалась бы всего этого.
Я также читал, что PHPUnit может выдавать отчет, который, в свою очередь, может быть получен jUnit, а затем использовать его для проверки, работает ли все или нет, но, как я уже сказал, раньше это работало, именно с такой конфигурацией.
Надеюсь, что у кого-нибудь есть идеи, потому что я уверен, что нет.
1 ответ
Вы должны проверить код выхода как phpunit, так и вашего скрипта. Дженкинс при использовании шага sh принимает во внимание только код завершения всего сценария, а не что-либо в нем. Может быть, раньше это работало из-за невозможности убить рабочих? AFAIK другие функции, о которых вы говорите, предоставляются плагином JUnit.