Я хочу, чтобы получить ап «нестабильный» построить вместонестабильная сборка с неустойчива
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
может любой дать мне решение.
Я хочу, чтобы получить ап «нестабильный» построить вместонестабильная сборка с неустойчива
//currentBuild.result='UNSTABLE'
stage 'Publish Reports'
allowMissing: false
])
}
может любой дать мне решение.
Если mvn test
не работает, он вернет ненулевой код выхода. В этом случае шаг sh
выдает AbortException
с «кодом возврата сценария X», в результате чего Трубопровод прекратит выполнение и будет отмечен как FAILURE.
Итак, вам нужно найти конфигурацию Maven, которая возвращает код выхода 0
, даже если есть ошибки тестирования. Затем трубопровод продолжит работу, и вы сможете проанализировать результаты тестирования.
Или вы можете проверить код выхода самостоятельно, например. при условии, что Maven возвращает код завершения 123
для обозначения неудачи испытаний:
// Attempt to execute the tests
int exitCode = sh script: 'mvn test', returnStatus: true
// Check whether testing succeeded, or a known failure code was returned
if (exitCode == 0 || exitCode == 123) {
// Attempt to parse the test results, if they exist
junit '**/test-results-dir/TEST-*.xml'
// At this point, the pipeline will have been marked as 'UNSTABLE',
// assuming that parsing the results found at least one test failure
} else {
// Something unexpected happened (e.g. compile failure); stop pipeline.
// This will cause the pipeline to be marked as 'FAILURE'
error("Testing failed with exit code ${exitCode}.")
}
следующих работ, но должна быть лучшим решением. Я довольно разочарован поддержкой конвейера до сих пор на Jenkins 2.19.2, он чувствует себя немного наполовину испеченным.
def runTests() {
setTestStatus(sh (returnStatus: true, script: 'mvn clean test'))
}
@NonCPS
def setTestStatus(testStatus) {
if (testStatus == 0) {
currentBuild.result = 'SUCCESS'
} else {
def testResult = currentBuild.rawBuild.getAction(hudson.tasks.junit.TestResultAction.class)
currentBuild.result = (testResult != null && testResult.failCount > 0) ? 'UNSTABLE' : 'FAILURE'
}
}
Вы пытались использовать this flag?
-DtestFailureIgnore=true
добиваюсь точно такое же поведение, используя junit
шаг и возможность Maven -Dmaven.test.failure.ignore=true
.
Вот пример из моего Jenkinsfile:
stage('Build') {
...
// Run Maven build and don't fail on errors
withMaven(
maven: 'Maven3',
mavenSettingsConfig: 'provided-config-file') {
sh "mvn clean install -Dmaven.test.failure.ignore=true"
}
// publish test results
junit '**/target/surefire-reports/*.xml'
}
-Dmaven.test.failure.ignore=true
вариант сделать Maven возвращать 0, если тесты не удалось, вместо 1.
Если код возврата команды побежал с sh
является отличается от 0, статус сборки установлен на FAILED
, а сборка останавливается.
С помощью этой опции Maven возвращает 0, если тесты не пройдены, поэтому сборка переходит к следующему шагу.
junit
затеняет архив результатов испытаний и устанавливает статус сборки UNSTABLE
, если некоторые тесты не удались.
Ваше решение не может работать, потому что, поскольку вы упоминаете, что выполнение 'mvn test' будет вызывать' AbortException', если он терпит неудачу, поэтому ваш тест 'exitCode' недостижим. – Pom12
@ Pom12 Не используется флаг 'returnStatus'. Из документации: «Обычно сценарий, который выходит с ненулевым кодом состояния, приведет к тому, что шаг будет сбой с исключением. Если этот параметр [returnStatus] отмечен, возвращаемое значение этого шага будет вместо этого кодом статуса». –
Я этого не знал, спасибо за подсказку, что хорошо знать :) – Pom12