Как заставить стадию Дженкинса выйти из строя и стать красной при слишком низком покрытии (с использованием C# и теста dotnet)?
Я использую 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% на уровне пакета. Все идет нормально.
Но когда сборка из-за этого терпит неудачу, она настроена враждебно к пользователю и трудно понять, почему. Этап "Выполнить модульные тесты" выделен зеленым цветом в Blue Ocean.
Могу ли я сделать этот этап красным при сбое сборки, чтобы было легче понять, в чем заключается ошибка?
2 ответа
Вдохновленный ответом 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.")
}
}
}
}
}
Вы можете установить 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%"
}
}
}
}