166 votes

ne pas faire échouer la construction de jenkins si l'exécution du shell échoue

Dans le cadre de mon processus de construction, j'exécute un commit git comme une étape d'exécution du shell. Cependant, s'il n'y a pas de changements dans l'espace de travail, Jenkins échoue la construction. Ceci est dû au fait que git renvoie un code d'erreur lorsqu'il n'y a pas de changement à livrer. J'aimerais soit interrompre la construction, soit simplement le marquer comme instable si c'est le cas. Avez-vous des idées ?

5voto

Megha Points 149

Pour les commandes shell multiples, j'ignore les échecs en ajoutant :

set +e commands true

enter image description here

3voto

chenchuk Points 1960

Si vous mettez ces commandes dans le bloc de l'obus :

false
true

votre construction sera marquée comme un échec (au moins un code de sortie non nul), vous pouvez donc ajouter (set +e) pour l'ignorer :

set +e
false
true

n'échouera pas. Cependant, cela échouera même avec le (set +e) en place :

set +e
false

car la dernière commande shell doit sortir avec 0.

2voto

shaun Points 614

Ce qui suit fonctionne pour mercuriel en ne s'engageant que s'il y a des changements. Ainsi, la construction n'échoue que si le commit échoue.

hg id | grep "+" || exit 0
hg commit -m "scheduled commit"

0voto

Sysanin Points 146

Une autre réponse avec quelques conseils, peut être utile pour quelqu'un :

n'oubliez pas de séparer vos commandes avec la règle suivante :

commande1 && command2 - signifie que la commande2 sera exécutée, seulement si la commande1 réussit.

commande1 ; command2 - signifie que la commande 2 sera exécutée malgré le résultat de la commande 1.

par exemple :

String run_tests = sh(script: "set +e && cd ~/development/tests/ && gmake test ;set -e;echo 0 ", returnStdout: true).trim()
println run_tests 

sera exécuté avec succès avec set -e y echo 0 les commandes si gmake test a échoué (vos tests ont échoué), tandis que le code suivant s'est échappé :

String run_tests = sh(script: "set +e && cd ~/development/tests/ && gmake test && set -e && echo 0 ", returnStdout: true).trim()
println run_tests 

un peu faux et commande set -e y echo 0 sur && gmake test && set -e && echo 0 sera ignoré, avec le println run_tests parce que l'échec gmake test interrompra la construction de Jenkins. Comme solution de contournement, vous pouvez passer à returnStatus:true mais vous ne verrez pas le résultat de votre commande.

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