如何在低于某个PHPUnit代码覆盖率的情况下使Jenkins管道失败?

时间:2020-02-14 21:15:16

标签: jenkins continuous-integration phpunit jenkins-pipeline

我正在使用Jenkins声明性管道来实现与代码的持续集成。该代码是一个使用PHPUnit进行单元测试的PHP项目。

当前,管道

  1. 构建项目
  2. 运行代码嗅探器以查找违反代码的行为
  3. 运行PHPUnit测试,生成覆盖率报告并将其发布

如果任何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管道失败?

1 个答案:

答案 0 :(得分:1)

xml是唯一可用于输出覆盖率报告的文件格式吗?

我将专注于读取文件,然后评估必要的元素以确定您是否要抛出错误。

对于XML,这将涉及导入groovy.util.XmlSlurper,读取文件,解析文件然后浏览结构。

JSON会更容易,只需使用readJSON jenkins基本步骤然后访问地图即可。