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?Jenkins exécute les étapes de construction du shell en utilisant /bin/sh -xe
par défaut. -x
signifie imprimer chaque commande exécutée. -e
signifie sortir avec un échec si l'une des commandes du script a échoué.
Je pense donc que ce qui s'est passé dans votre cas, c'est que votre commande git est sortie avec 1, et à cause de l'option par défaut -e
param, le shell capte le code de sortie non-0, ignore le reste du script et marque l'étape comme un échec. Nous pouvons confirmer cela si vous pouvez poster votre étape de construction script ici.
Si c'est le cas, tu peux essayer de mettre #!/bin/sh
afin que le script soit exécuté sans option ; ou bien faites un set +e
ou quelque chose de similaire en plus de l'étape de construction pour remplacer ce comportement.
Édité : Une autre chose à noter est que, si le dernière commande dans votre shell script renvoie un code différent de 0 l'ensemble de l'étape de construction sera toujours marqué comme un échec même avec cette configuration. Dans ce cas, vous pouvez simplement mettre un true
à la fin pour éviter cela.
S'il n'y a rien à pousser, git renvoie le statut de sortie 1. L'étape Execute shell build est marquée comme ayant échoué respectivement. Vous pouvez utiliser l'instruction OR || (double pipe).
git commit -m 'some messasge' || echo 'Commit failed. There is probably nothing to commit.'
Cela signifie qu'il faut exécuter le deuxième argument si le premier a échoué (état de sortie retourné > 0). La deuxième commande renvoie toujours 0. Lorsqu'il n'y a rien à pousser (statut de sortie 1 -> exécution de la deuxième commande), echo renvoie 0 et l'étape de construction continue.
Pour marquer le build comme instable, vous pouvez utiliser l'étape post-build Jenkins Text Finder. Il peut parcourir la sortie de la console, faire correspondre le modèle (votre écho) et marquer la construction comme instable.
Cette réponse est correcte, mais elle ne spécifie pas le || exit 0
o || true
va sur dans la commande shell . Voici un exemple plus complet :
sh "adb uninstall com.example.app || true"
Ce qui précède fonctionnera, mais ce qui suit échouera :
sh "adb uninstall com.example.app" || true
C'est peut-être évident pour d'autres, mais j'ai perdu beaucoup de temps avant de m'en rendre compte.
- Réponses précédentes
- Plus de réponses