Декларативный конвейер 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'
     }
   }
 }

"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
1
0
3 318
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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);
    }
}

Во-первых, в декларативном конвейере нет try/catch, во-вторых, если вы читаете комментарии, установка результата таким образом не работает в декларативном конвейере.

Tomasz Kryński 30.05.2019 15:16

Ах, я предполагал, что вы знаете обходные пути. Обновил мой ответ. Кроме того, давать отрицательные голоса случайным людям, которые хотят помочь, кажется оскорбительным. Не говоря уже о том, что было бы полезно увидеть исключение, которое вы получаете.

hakamairi 30.05.2019 16:10

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

Tomasz Kryński 30.05.2019 17:31

Подождите секунду, вы хотели обработать прерывание ввода, как указано выше ;) Кроме того, вы уже используете script.

hakamairi 31.05.2019 11:11
Ответ принят как подходящий

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

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


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()
    }
}

Другие вопросы по теме