Декларативный конвейер jenkins не прерывается при вводе

Простой вопрос, который я получил в декларативном конвейере в jenkins. Когда я нажимаю «Прервать» в приглашении, я не хочу, чтобы сборка помечалась как прерванная. Чтобы предотвратить ответы, которые уже есть в стеке, я ищу решение в декларативном конвейере, не убегая в сценарии.


 options {
    timeout(time: 1, unit: 'HOURS')
 }

 steps {
   input 'Deploy to UAT?'
   deploy()
 }

 post {
   aborted {
     script {
       //Throws exception(not allowed to use rawBuild)
       currentBuild.rawBuild.@result = hudson.model.Result.SUCCESS
       //Do not change status because it can only be worse
       currentBuild.result = 'SUCCESS'
       //Do not change status because it can only be worse
       currentBuild.currentResult = 'SUCCESS'
     }
   }
 }


person Tomasz Kryński    schedule 29.05.2019    source источник


Ответы (2)


Я не думаю, что можно не прерывать конвейер с помощью простого поля ввода, поскольку в этом его цель.

Что вы можете сделать, так это использовать флажок на входе, например


def deployToUat
steps {
    script {
        deployToUat = input(
                id: 'Proceed', message: 'Deploy to UAT?', parameters: [
                [$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Proceed with deployment?']
        ])
    }
}

stage('UAT deployment') {
    when {
        expression { deployToUat == true }
    }
    steps {
        deploy()
    }
}
person Karol Dolinski    schedule 18.06.2019

Ну, ты мог бы сделать

script {
    try {
        input 'Deploy to UAT?'
    } catch(err) {
       currentBuild.result = 'SUCCESS'
       return
    }
}

Я предполагаю, что приведенное выше является единственным правильным способом , так как результат может только ухудшиться.

public void setResult(@Nonnull Result r) {
    if (state != State.BUILDING) {
        throw new IllegalStateException("cannot change build result while in " + state);
    }

    // result can only get worse
    if (result==null || r.isWorseThan(result)) {
        result = r;
        LOGGER.log(FINE, this + " in " + getRootDir() + ": result is set to " + r, LOGGER.isLoggable(Level.FINER) ? new Exception() : null);
    }
}
person hakamairi    schedule 30.05.2019
comment
Во-первых, в декларативном конвейере нет try/catch, во-вторых, если вы читаете комментарии, установка результата таким образом не работает в декларативном конвейере. - person Tomasz Kryński; 30.05.2019
comment
Ах, я предполагал, что вы знаете обходные пути. Обновил мой ответ. Кроме того, давать отрицательные голоса случайным людям, которые хотят помочь, кажется оскорбительным. Не говоря уже о том, что было бы полезно увидеть исключение, которое вы получаете. - person hakamairi; 30.05.2019
comment
В том-то и дело, что я ищу «правильное» решение, а не обходные пути со сценарием. Я ничего не смог найти, ваш ответ такой же, как и многие в стеке для этой темы, ни один из них не отвечает на мой вопрос, возможно ли сделать это в декларативном конвейере, а не приступать к сценариям. Я не думаю, что это оскорбительно, если вы даете ответ, который я уже могу найти в стеке. - person Tomasz Kryński; 30.05.2019
comment
Подождите секунду, вы хотели обработать отмену ввода, как указано выше ;) Кроме того, вы уже используете script. - person hakamairi; 31.05.2019