Выполнять этап только в том случае, если предыдущий этап прошел успешно в сценарии с конвейером Jenkins - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь выполнить условные шаги в конвейере Jenkins, но я не уверен, как выполнить шаг, только если предыдущий шаг был успешным.Например, в следующем случае я хочу запускать этап «Артефакты push» только в том случае, если этап «Тест» прошел успешно:

node ('docker2') {

    stage ('Build') {
        // build application
    }

    stage ('Test') {
        // run tests
    }

    stage ('Push Artifacts') { 
        if (Tests Were Successful) {  
            // push to artifactory
        }
    }
}

Я знаю, что декларативные конвейеры позволяют вам использовать условия «пост», ноВ Jenkins мое понимание декларативных и скриптовых конвейеров заключается в том, что скриптовые конвейеры обеспечивают большую гибкость.Есть ли способ запустить этапы, основанные на успехе других этапов в скриптовом конвейере?

1 Ответ

0 голосов
/ 05 декабря 2018

В конвейере Дженкинса не существует понятия шага успеха или неудачного шага.Существует только состояние вашей сборки (успешное, неудачное, нестабильное и т. Д.)

У вас есть два способа решения вашей проблемы:

Первый.Вы можете потерпеть неудачу в вашем конвейере, если тест не пройден (с помощью шага jenkins 'error').Например:

stage('Build') {
    // build application
}

stage('Test') {
    def testResult = ... // run command executing tests
    if (testResult == 'Failed') {
        error "test failed"
    }
}

stage('Push Artifacts') {
    //push artifacts
}

Или, если ваша команда выдает ошибку при неудачном тестировании (например, 'mvn test'), вы можете написать так:

stage('Build') {
    // build application
}

stage('Test') {
    sh 'mvn test'
}

stage('Push Artifacts') {

}

В этих случаях ваш конвейербудет провалено, когда тесты не пройдены.И ни один этап после этапа «Тест» не будет выполнен.

Второй.Если вы хотите выполнить только несколько шагов, в зависимости от того, какой шаг вы выполнили, вы должны записать результат теста в переменную.И вы можете проанализировать значение этой переменной перед выполнением шагов.Например:

stage('Build') {
    // build application
}

boolean testPassed = true
stage('Test') {
    try{
        sh 'mvn test'
    }catch (Exception e){
        testPassed = false
    }
}

stage('Push Artifacts') {
    if(testPassed){
        //push to artifactory
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...