Как заставить сцену Дженкинса провалиться и покраснеть, когда охват слишком низкий (с помощью C# и выполнить tnet тест)? - PullRequest
1 голос
/ 16 января 2020

Я использую C#, coverlet.msbuild и адаптер Jenkins Cobertura. У меня примерно есть это в моем Jenkinsfile:

stage ('Run unit tests') {
    steps {
        powershell "dotnet test -c:Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --no-build --no-restore --logger trx"
    }
    post {
        always {
            step([$class: 'MSTestPublisher'])
            publishCoverage failUnhealthy: true, 
                globalThresholds: [[thresholdTarget: 'Package', unhealthyThreshold: 50.0]],
                adapters: [coberturaAdapter(
                    mergeToOneReport: true, 
                    path: '**/*.cobertura.xml')]
        }
    }
}

Это делает мою сборку Jenkins неудачной, если охват на уровне пакета ниже 50%. Все идет нормально.

Но когда сборка не удается из-за этого, она враждебна к пользователю и трудно понять, почему. Стадия «Выполнить юнит-тесты» зеленого цвета в синем океане.

Могу ли я сделать этот этап красным, когда он не удастся собрать, чтобы было легче увидеть, в чем ошибка?

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Вдохновленный ответом Sers и другого кода Jenkinsfile, который я прочитал, я пришел к этому решению, которое делает то, что я хочу:

stage ('Run unit tests') {
    steps {
        powershell "dotnet test -c:Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --no-build --no-restore --logger trx"
    }
    post {
        always {
            step([$class: 'MSTestPublisher'])
            publishCoverage failUnhealthy: true, 
                globalThresholds: [[thresholdTarget: 'Package', unhealthyThreshold: 50.0]],
                adapters: [coberturaAdapter(
                    mergeToOneReport: true, 
                    path: '**/*.cobertura.xml')]
            script {
                if (currentBuild.result == 'FAILURE') {
                    error("Test coverage is too low.")
                }
            }
        }
    }
}
0 голосов
/ 16 января 2020

Вы можете установить currentBuild.result на FAILURE, если publishCoverage истинно. currentBuild.displayName и currentBuild.description необязательно:

post {
    always {
        script {
            def failed = publishCoverage (failUnhealthy: true, 
                        globalThresholds: [[thresholdTarget: 'Package', unhealthyThreshold: 50.0]],
                        adapters: [coberturaAdapter(
                            mergeToOneReport: true, 
                            path: '**/*.cobertura.xml')])
            if (failed) {
                currentBuild.result = 'FAILURE'
                currentBuild.displayName = "${currentBuild.displayName} Coverage"
                currentBuild.description = "Coverage lower than 50%"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...