Как мне выйти из конвейера Jenkins с процентом покрытия кода ниже определенного PHPUnit? - PullRequest
0 голосов
/ 15 февраля 2020

Я использую декларативный конвейер Jenkins для реализации непрерывной интеграции с моим кодом. Код представляет собой PHP проект, который использует PHPUnit для модульного тестирования.

В настоящее время конвейер

  1. создает проект
  2. запускает сниффер кода для поиска кода нарушения
  3. запускает тесты 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 ниже определенного порога?

1 Ответ

1 голос
/ 24 февраля 2020

Является ли xml единственным форматом файла, доступным для вывода отчета о покрытии?

Я бы сосредоточился на чтении файла, а затем на оценке необходимых элементов, чтобы определить, хотите ли вы выдать ошибку.

для XML, что подразумевает импорт groovy .util.XmlSlurper, чтение файла, его анализ и последующую навигацию по структуре.

JSON будет проще, можно просто использовать read JSON Дженкинс Баси c шаг, а затем получить доступ к карте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...