Dans un projet sur lequel je travaille, nous utilisons des scripts shell pour exécuter différentes tâches. Certains sont des scripts sh / bash qui exécutent rsync, et d'autres sont des scripts PHP. L'un des scripts PHP exécute des tests d'intégration qui sortent vers JUnit XML, des rapports de couverture de code, etc.
Jenkins est capable de marquer les travaux comme réussis / échoués en fonction de l' état de sortie . En PHP, le script se termine par 1 s'il a détecté que les tests ont échoué lors de l'exécution. Les autres scripts shell exécutent des commandes et utilisent les codes de sortie de celles-ci pour marquer une construction comme ayant échoué.
// :: End of PHP script:
// If any tests have failed, fail the build
if ($build_error) exit(1);
Dans la terminologie Jenkins , une construction instable est définie comme suit:
Une compilation est instable si elle a été créée avec succès et qu'un ou plusieurs éditeurs la signalent comme instable. Par exemple, si l'éditeur JUnit est configuré et qu'un test échoue, la génération sera marquée comme instable.
Comment puis-je faire en sorte que Jenkins marque une construction comme instable au lieu de réussir / échouer uniquement lors de l'exécution de scripts shell?
Réponses:
Utilisez le plugin Text-finder .
Au lieu de quitter avec le statut 1 (ce qui échouerait la construction), faites:
Ensuite, dans les actions de post-construction, activez la recherche de texte, définissez l'expression régulière pour qu'elle corresponde au message que vous avez imprimé (
TESTS FAILED!
) et cochez la case "Instable si trouvé" sous cette entrée.la source
Les versions modernes de Jenkins (depuis la 2.26, octobre 2016) ont résolu ce problème: c'est juste une option avancée pour l'étape de construction du shell Execute!
Vous pouvez simplement choisir et définir une valeur de sortie arbitraire; s'il correspond, la construction sera instable. Choisissez simplement une valeur qui est peu susceptible d'être lancée par un processus réel dans votre build.
la source
sh
commande step dans unJenkinsfile
? Où se trouve le paramètre dans l'interface graphique? Je ne le trouve pas.Cela peut être fait sans imprimer de chaînes magiques et en utilisant TextFinder. Voici quelques informations à ce sujet.
Fondamentalement, vous avez besoin d'un fichier .jar de http: // yourserver.com / cli disponible dans les scripts shell, vous pouvez alors utiliser la commande suivante pour marquer une construction instable:
Pour marquer la construction instable en cas d'erreur, vous pouvez utiliser:
Le problème est que jenkins-cli.jar doit être disponible à partir du script shell. Vous pouvez soit le mettre dans un chemin d'accès facile, soit le télécharger via le script shell du travail:
la source
set-build-result
elle est obsolète dans lejenkins-cli
.Vous devez utiliser Jenkinsfile pour encapsuler votre script de construction et simplement marquer la construction actuelle comme INSTABLE en utilisant
currentBuild.result = "UNSTABLE"
.la source
UNSTABLE
)? Cela semble plus simple que les autres réponses.Expected one of "steps", "stages", or "parallel" for stage
J'obtiens une erreur: lorsque j'essaye de définir currentBuild.result directement dans une scène.vous devriez également pouvoir utiliser groovy et faire ce que textfinder a fait
marquer une construction comme instable avec un plugin post-build groovy
Voir aussi Groovy Postbuild Plugin
la source
Dans mon script de travail, j'ai les déclarations suivantes (ce travail ne s'exécute que sur le maître Jenkins):
Vous pouvez voir ceci et beaucoup plus d'informations sur la définition des statuts de construction sur le wiki Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
la source
Configurer la construction PHP pour produire un rapport junit xml
Terminer le script de construction avec le statut 0
Ajouter une action post-build Publier le rapport de résultat de test JUnit pour les fichiers XML de rapport de test. Ce plugin changera la construction stable en instable lorsque le test échouera.
Ajouter plugin Jenkins Text Finder avec l'analyse de la sortie de la console et des options non cochées. Ce plugin échoue entièrement sur une erreur fatale.
la source
Je trouve que le moyen le plus flexible de le faire est de lire un fichier dans le plugin groovy post build.
Si le contenu du fichier est «vrai», la construction sera définie sur instable. Cela fonctionnera sur le maître local et sur tous les esclaves sur lesquels vous exécutez le travail, et pour tout type de script pouvant écrire sur le disque.
la source
Le TextFinder n'est bon que si le statut du travail n'a pas été changé de SUCCESS à FAILED ou ABORTED. Dans de tels cas, utilisez un script groovy dans l'étape PostBuild:
Voir plus de détails dans un article que j'ai écrit à ce sujet: http://www.tikalk.com/devops/JenkinsJobStatusChange/
la source
Dupliquer ma réponse d' ici parce que j'ai passé du temps à chercher ceci:
C'est maintenant possible dans les nouvelles versions de Jenkins, vous pouvez faire quelque chose comme ceci:
Le générateur de syntaxe de pipeline vous montre ceci dans l'onglet avancé:
la source
J'ai pensé que je publierais une autre réponse pour les personnes qui pourraient rechercher quelque chose de similaire.
Dans notre travail de construction, nous avons des cas où nous voudrions que la construction continue, mais qu'elle soit marquée comme instable. Pour le nôtre, cela concerne les numéros de version.
Donc, je voulais définir une condition sur la construction et définir la construction sur instable si cette condition est remplie.
J'ai utilisé l' option Étape conditionnelle (unique) comme étape de construction.
Ensuite, j'ai utilisé le script Groovy du système d'exécution comme étape de construction qui s'exécuterait lorsque cette condition serait remplie.
J'ai utilisé Groovy Command et défini le script comme suit
Cela semble très bien fonctionner.
Je suis tombé sur la solution ici
http://tech.akom.net/archives/112-Marking-Jenkins-build-UNSTABLE-from-environment-inject-groovy-script.html
la source
Comme alternative plus légère aux réponses existantes, vous pouvez définir le résultat de la génération avec un simple HTTP POST pour accéder à l'API REST de la console de script Groovy :
Avantages:
Pour cette solution, votre environnement doit remplir ces conditions:
la source
Un moyen simple de définir une construction comme instable est dans votre bloc "Exécuter le shell", exécutez
exit 13
la source
Vous pouvez simplement appeler "exit 1", et la construction échouera à ce stade et ne continuera pas. J'ai fini par faire un passthrough make fonction pour le gérer pour moi, et appeler safemake au lieu de make for building:
la source
if make "$@"; then echo "BUILD SUCCEEDED"; else rc=$?; echo "BUILD FAILED"; exit $rc; fi