Ten punkt kontrolny (nie mój) był jedną z lepszych opcji, które znalazłem podczas próby wdrożenia tej funkcji. https://gist.github.com/beercan1989/b66b7643b48434f5bdf7e1c87094acb9
Zmieniono go na metodę w bibliotece współdzielonej, która po prostu ponowił lub przerwała moje potrzeby. Dodano także maksymalną liczbę ponownych prób i zmienną timeout, abyśmy mogli ją zmienić w zależności od zadania lub etapu, który tego potrzebuje.
package com.foo.bar.jenkins
def class PipelineHelper {
def steps
PipelineHelper(steps) {
this.steps = steps
}
void retryOrAbort(final Closure<?> action, int maxAttempts, int timeoutSeconds, final int count = 0) {
steps.echo "Trying action, attempt count is: ${count}"
try {
action.call();
} catch (final exception) {
steps.echo "${exception.toString()}"
steps.timeout(time: timeoutSeconds, unit: 'SECONDS') {
def userChoice = false
try {
userChoice = steps.input(message: 'Retry?', ok: 'Ok', parameters: [
[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: 'Check to retry from failed stage']])
} catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
userChoice = false
}
if (userChoice) {
if (count <= maxAttempts) {
steps.echo "Retrying from failed stage."
return retryOrAbort(action, maxAttempts, timeoutMinutes, count + 1)
} else {
steps.echo "Max attempts reached. Will not retry."
throw exception
}
} else {
steps.echo 'Aborting'
throw exception;
}
}
}
}
}
Przykładowe użycie z maksymalnie 2 ponownymi próbami, które czekają na 60s dla danych wejściowych.
Pamiętaj tylko, aby umieścić węzły wewnątrz zamknięcia, aby oczekiwanie na dane wejściowe nie blokowało executora.
Jeśli masz płatne przedsiębiorstwo Jenkins, Cloudbees ma wtyczkę Checkpoint, która może lepiej sobie z tym poradzić, ale nie planuje się jej wydania dla open source Jenkins (JENKINS-33846).
To ogólne żądanie dotyczące funkcji znajduje się pod adresem [JENKINS-33846] (https://issues.jenkins-ci.org/browse/JENKINS-33846). To (z rozczarowaniem) jest wybrane tylko dla deklaratywnych potoków w [JENKINS-45455] (https://issues.jenkins-ci.org/browse/JENKINS-45455). – mkobit