10 votes

Réessayer après un délai d'attente dans un pipeline Jenkins - solutions de contournement

C'est un problème connu de Jenkins que L'opération de relance du pipeline n'est pas relancée lorsqu'elle comporte un délai d'attente. .

Il existe sûrement des solutions de contournement pour forcer retry (ou substitut) pour travailler après un temps mort ?

Exemple de code où retry n'est pas déclenché :

retry(3) {
  timeout(time: 5, unit: 'MINUTES') {
    // Something that can fail
  }
}

Si elle n'est pas prise en compte, l'erreur de délai d'attente ( org.jenkinsci.plugins.workflow.steps.FlowInterruptedException ) entraîne l'abandon de l'ensemble du travail.

11voto

mirekphd Points 11

Une bonne solution de contournement, comme suggéré par Basil Crow aquí est d'insérer try - catch entre retry y timeout pour consommer l'erreur de délai d'attente ( FlowInterruptedException ) sans le passer à retry . Dès que nous remplaçons FlowInterruptedException avec une erreur personnalisée, retry se met en marche et commence à coopérer correctement même avec timeout à l'intérieur.

Exemple :

import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

retry(3) {

  try {

      timeout(time: 5, unit: 'MINUTES') {

        // something that can fail

      } // timeout ends

  } catch (FlowInterruptedException e) {
      // we re-throw as a different error, that would not 
      // cause retry() to fail (workaround for issue JENKINS-51454)
      error 'Timeout!'

  } // try ends

} // retry ends

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X