Простой вопрос, который я получил в декларативном конвейере в 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'
}
}
}
Ну, ты мог бы сделать
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);
}
}
Ах, я предполагал, что вы знаете обходные пути. Обновил мой ответ. Кроме того, давать отрицательные голоса случайным людям, которые хотят помочь, кажется оскорбительным. Не говоря уже о том, что было бы полезно увидеть исключение, которое вы получаете.
В том-то и дело, что я ищу «правильное» решение, а не обходные пути со сценарием. Я ничего не смог найти, ваш ответ такой же, как и многие в стеке для этой темы, ни один из них не отвечает на мой вопрос, возможно ли сделать это в декларативном конвейере, а не приступать к сценариям. Я не думаю, что это оскорбительно, если вы даете ответ, который я уже могу найти в стеке.
Подождите секунду, вы хотели обработать прерывание ввода, как указано выше ;) Кроме того, вы уже используете script
.
Я не думаю, что можно не прерывать конвейер с помощью простого поля ввода, поскольку в этом его цель.
Что вы можете сделать, так это использовать флажок на входе, например
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()
}
}
Во-первых, в декларативном конвейере нет try/catch, во-вторых, если вы читаете комментарии, установка результата таким образом не работает в декларативном конвейере.