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 ?
Réponses
Trop de publicités?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.
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.
- Réponses précédentes
- Plus de réponses