我正在使用Jenkins声明性管道来实现与代码的持续集成。该代码是一个使用PHPUnit进行单元测试的PHP项目。
当前,管道
如果任何PHPUnit测试失败,则Jenkins作业失败(很好)。
现在,如果代码覆盖率百分比低于一定数量,我也想使作业失败。我找不到方法。
当前的Jenkins文件如下所示:
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]
])
如果我的PHP代码覆盖率低于某个阈值,如何使Jenkins管道失败?
答案 0 :(得分:1)
xml是唯一可用于输出覆盖率报告的文件格式吗?
我将专注于读取文件,然后评估必要的元素以确定您是否要抛出错误。
对于XML,这将涉及导入groovy.util.XmlSlurper,读取文件,解析文件然后浏览结构。
JSON会更容易,只需使用readJSON jenkins基本步骤然后访问地图即可。