【发布时间】:2020-05-30 16:23:49
【问题描述】:
我正在使用 Jenkins 声明式管道来实现与我的代码的持续集成。代码是一个使用 PHPUnit 进行单元测试的 PHP 项目。
目前,管道
- 构建项目
- 运行代码嗅探器以查找编码违规
- 运行 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'
])
}
}
}
}
我找到了这个发布三叶草报告的 sn-p。我认为如果覆盖率没有达到要求,也许使“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]
])
如果我的 PHP 代码覆盖率低于某个阈值,我如何让 Jenkins 流水线失败?
【问题讨论】:
标签: jenkins continuous-integration phpunit jenkins-pipeline