Я использую Jenkins в мультимодульном проекте Maven, и у меня есть три этапа в моем конвейере: сборка, тестирование и развертывание.Я хочу, чтобы можно было запускать все модульные тесты на этапе test
, а в случае неудачи теста deploy
этап должен быть пропущен .
Длятеперь мне удалось найти обходной путь (который работает так, как я хочу), но мне пришлось явно одобрить использование некоторых методов, которые отмечены Дженкинсом как уязвимые места.
Мне интересно, есть либолее ясный способ достижения моих целей?
import hudson.tasks.test.AbstractTestResultAction
pipeline {
agent {
docker {
image 'maven:3-jdk-8-alpine'
args '--name maven3 -v /root/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn clean install -DskipTests'
}
}
stage('Test') {
steps {
sh 'mvn test --fail-never'
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
}
}
stage('Deploy') {
steps {
script {
def AbstractTestResultAction testResultAction = currentBuild.rawBuild.getAction(AbstractTestResultAction.class)
if (testResultAction == null) {
error("Could not read test results")
}
def numberOfFailedTests = testResultAction.failCount
testResultAction = null
if (numberOfFailedTests == null || numberOfFailedTests != 0) {
error("Did not deploy. Number of failed tests: " + numberOfFailedTests)
}
sh 'mvn deploy -DskipTests'
}
}
}
}
}