Я использую декларативный конвейер Jenkins для реализации непрерывной интеграции с моим кодом. Код представляет собой PHP проект, который использует PHPUnit для модульного тестирования.
В настоящее время конвейер
- создает проект
- запускает сниффер кода для поиска кода нарушения
- запускает тесты PHPUnit, генерирует отчеты о покрытии и публикует их
Если какой-либо тест PHPUnit не проходит, задание Jenkins не выполняется (что хорошо).
Теперь, Я также хочу потерпеть неудачу, если процент покрытия кода ниже определенной суммы. Я не могу найти, как это сделать.
Текущий файл Jenkinsfile выглядит следующим образом:
pipeline {
agent any
stages {
stage ('Build') {
steps {
sh '''
cd symfony && composer install --prefer-dist
./vendor/bin/pcov clobber
'''
}
}
stage('PHP CodeSniffer') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
sh './symfony/vendor/bin/phpcs-meq.sh ./symfony/src/AppBundle'
}
}
}
stage('PHPUnit Tests') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
sh '''
cd symfony
cp phpunit.xml.dist phpunit.xml
./bin/console cache:warmup --env=test
./vendor/bin/phpunit\
--coverage-clover '../reports/coverage/coverage.xml'\
--coverage-html '../reports/coverage'\
--log-junit '../reports/unitreport.xml'
'''
}
junit 'reports/unitreport.xml'
publishHTML([
allowMissing: true,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: 'reports/coverage',
reportFiles: 'index.html',
reportName: 'PHPUnit Test Coverage Report'
])
}
}
}
}
Я нашел этот фрагмент, который публикует отчет о клевере. Я подумал, что, возможно, достижение достаточно высокой «failingTarget» приведет к выходу 1 (не удастся выполнить конвейер), если покрытие не соответствует требованию. Это не так - он выдает предупреждение, но шаг все равно успешен.
step([
$class:'CloverPublisher',
cloverReportDir: '../reports/coverage',
cloverReportFileName: 'coverage.xml',
healthyTarget: [methodCoverage: 90, conditionalCoverage: 90, statementCoverage: 90],
unhealthyTarget: [methodCoverage: 89, conditionalCoverage: 89, statementCoverage: 89],
failingTarget: [methodCoverage: 88, conditionalCoverage: 88, statementCoverage: 88]
])
Как я могу выйти из строя конвейера Jenkins, если охват моего кода PHP ниже определенного порога?