J'ai ajouté une étape de construction pour exécuter un script Python.
Dans ce script, Pylint est appelé avec le Lint.Run (.. args) pour vérifier le code.
Le script fonctionne mais à la fin, la construction échoue avec le seul message d'erreur: P>
Quelqu'un a une idée pourquoi cela se produit? P> Build Step 'Exécuter le script Python' marqué Build comme panne code> p>
8 Réponses :
Il semble que votre exécution de pylint sortie avec un statut non zéro (script manquant, options mauvaises ...), vous quittez peut-être le script avec une exception soulevée ou un sys.exit (quelque chose_else_than_zzero) code > p>
Putain droit. J'ai débogué le lint.py et j'ai découvert un appel sys.exit (self.linter.msgstatus) où le msgstatus n'a pas pu être trouvé dans le contexte. Remplacer cela avec un 0 travaillé et maintenant les constructions successives.
PYLINT a le comportement désagréable de renvoyer un code de sortie non nul uniquement si un petit problème d'avertissement a été trouvé. Seulement quand tout allait bien, 0 est retourné (voir la page man). P>
Comme généralement un code non zéro dénote une erreur, Jenkins échoue la construction. P>
Je vois deux façons de surmonter ceci: p>
J'ai eu la sortie de la sortie au chat et il semble de construire avec succès maintenant. par exemple. pylint -f code html.py | Cat> Report.html Code>
Vous pouvez également simplement mettre un p>
pylint || Quitter 0 P> blockQuote>
dans la coquille cmdline. Le plug-in Pylint échouera de toute façon la construction en vérifiant le résultat de Pyllint. P>
Le problème avec ceci est que si Pylint ne parvient pas à exécuter, alors vous allez manquer l'erreur car il est toujours un code de sortie 0.
Rylint récente a la possibilité de ne pas appeler SYS Quitter
lint.Run(args, exit=False, **kwargs)
Je suis d'accord avec @dmeister, mais avec le code de pipeline (Jenkinsfile), je suggère un try / prise puis sur l'erreur. De cette façon, vous pouvez déterminer si vous obtenez des bits de statut de Pylint (voir la Pylint Docs), si Pylint signale une erreur d'utilisation, ou s'il y avait une faute catastrophique: excuses à Groovy Purist - Groovy n'est pas ma chose, alors je suis sûr que cela peut être amélioré - laissez-moi savoir. Il y a un trou connu: si Pylint détecte uniquement des erreurs "mortaux" -Type (bit 0) et aucun autre type de type (bits 1-4 n'est pas défini), ce code jette une exception incorrecte. Mais mon code marque des tonnes de problèmes, ce n'est donc pas un problème pour moi. Le correctif (? Erreur d'analyse MSG?) Peut-être être trivial pour une personne avec des côtelettes groovy. P> p>
dans pylint 1.9.3, il y a un https://github.com/pycqa/pylint/blob/1.9/ Changelog # L47 P> - sortie-zéro code> drapeau. p>
a couru dans cette situation aujourd'hui (bien qu'utilisant Jenkins).
Dans mon cas, c'est à cause de la façon dont Pylint code pour la fatale-erreur-Erreur-avertissement - refactor-info d'utilisation dans son code de sortie: https://docs.pylint.org/en/1.6.0/Run.html# Codes de sortie P>
My Correction: P>
#!/usr/bin/env sh # Wraps Pylint invocation to produce shell-friendly exit codes # Because Pylint exit codes are weird: # https://docs.pylint.org/en/1.6.0/run.html#exit-codes PYTHON_EXECUTABLE=python if [ ! -z $PYTHON_ENV ]; then PYTHON_EXECUTABLE="$PYTHON_ENV/bin/python" fi ${PYTHON_EXECUTABLE} -m pylint $@ PYLINT_EXIT_CODE=$? exit $(($PYLINT_EXIT_CODE % 4))
Remarque: je ne voulais pas utiliser - sortie-zero code> car il ne me permet pas d'échouer construit lorsqu'il y a des erreurs légitimes (par exemple, sur
d'une variable non définie-variable non définie code> erreurs dans Pylint).
Pylint s'attend à ce que le code analysé soit 100% parfait. Même l'avertissement de code peut provoquer la sortie avec le code d'état non nul. Essayez de résoudre votre code comme Pylint suggérer et évaluez 10/10. P>
J'espère que cela aide. P>