3
votes

Comment réparer le 'script a renvoyé le code de sortie 1' lors de l'exécution du pipeline Jenkins

Je définis un pipeline en utilisant Jenkins Blue Ocean.

J'essaie de faire une simple convention de codage python pep8, mais si je vais à l'intérieur du shell et que je tape la commande directement, cela fonctionne bien.

Mais lorsque la même commande est exécutée dans le pipeline, elle est exécutée, mais à la fin, «le script a renvoyé le code de sortie 1» est affiché. En raison de ce code d'erreur, il ne passe pas à l'étape suivante.

Y at-il un travail autour?

using credential github
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/YunTaeIl/jenkins_retest.git # timeout=10
Cleaning workspace
 > git rev-parse --verify HEAD # timeout=10
Resetting working tree
 > git reset --hard # timeout=10
 > git clean -fdx # timeout=10
Fetching without tags
Fetching upstream changes from https://github.com/YunTaeIl/jenkins_retest.git
 > git --version # timeout=10
using GIT_ASKPASS to set credentials GitHub Access Token
 > git fetch --no-tags --progress -- https://github.com/YunTaeIl/jenkins_retest.git +refs/heads/master:refs/remotes/origin/master # timeout=10
Checking out Revision fe49ddf379732305a7a50f014ab4b25f9382c913 (master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f fe49ddf379732305a7a50f014ab4b25f9382c913 # timeout=10
 > git branch -a -v --no-abbrev # timeout=10
 > git branch -D master # timeout=10
 > git checkout -b master fe49ddf379732305a7a50f014ab4b25f9382c913 # timeout=10
Commit message: "Added Jenkinsfile"
 > git rev-list --no-walk bc12a035337857b29a4399f05d1d4442a2f0d04f # timeout=10
Cleaning workspace
 > git rev-parse --verify HEAD # timeout=10
Resetting working tree
 > git reset --hard # timeout=10
 > git clean -fdx # timeout=10
+ ls
Jenkinsfile
README.md
jenkins-retest
+ python3.7 --version
Python 3.7.3
+ python3.7 -m flake8 jenkins-retest
jenkins-retest/N801_py3.py:3:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:6:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:9:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:12:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:15:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:18:1: E302 expected 2 blank lines, found 0
jenkins-retest/N801_py3.py:24:1: E303 too many blank lines (4)
jenkins-retest/N801_py3.py:24:11: E999 SyntaxError: invalid syntax
jenkins-retest/python_testfile.py:1:1: E999 SyntaxError: invalid syntax
jenkins-retest/python_testfile.py:1:2: E228 missing whitespace around modulo operator
jenkins-retest/python_testfile.py:3:1: E402 module level import not at top of file
jenkins-retest/python_testfile.py:3:20: W291 trailing whitespace
jenkins-retest/python_testfile.py:5:1: E302 expected 2 blank lines, found 1
jenkins-retest/python_testfile.py:8:1: E305 expected 2 blank lines after class or function definition, found 0
jenkins-retest/python_testfile.py:11:33: W291 trailing whitespace
jenkins-retest/python_testfile.py:12:1: E402 module level import not at top of file
jenkins-retest/python_testfile.py:12:19: W291 trailing whitespace
jenkins-retest/python_testfile.py:14:4: E714 test for object identity should be 'is not'
jenkins-retest/python_testfile.py:17:16: W291 trailing whitespace
jenkins-retest/python_testfile.py:18:80: E501 line too long (95 > 79 characters)
script returned exit code 1


3 commentaires

Pourquoi voulez-vous continuer le pipeline après avoir trouvé des problèmes? Votre outil indique un problème avec le code de retour et Jenkins abandonne le pipeline (à cause de la valeur de retour 1). Je pense que votre pipeline fonctionne correctement.


omg ... C'était mon illusion. Même s'il y avait une erreur, je pensais que le pipeline spécifié serait exécuté et que seule la partie avec l'erreur serait affichée. Je suis vraiment désolé... :(


Oui mais quand il y a "script retourné code de sortie 1", le résultat est un échec. Comment le convertir en succès?


3 Réponses :


0
votes

une chance? @ 윤태일 éprouver quelque chose de similaire où il échoue uniquement dans le cadre du pipeline mais toujours réussi lorsqu'il est manuel.


0 commentaires

0
votes

J'ai eu le même problème avec un script bat appelant un exécutable dont le statut de retour était 1 en cas de succès et 0 en cas d'erreur.

C'était un problème pour Jenkins comme pour Jenkins, le code d'erreur de réussite est 0 et tout autre code d'état signifie un échec, donc arrête le travail avec le message suivant: le script returned exit code 1

Ma solution de contournement: vérifiez le dernier code d'erreur et inversez la valeur de retour du script:

IF %ERRORLEVEL% EQU 1 (exit /B 0) ELSE (exit /B 1)
// if previous command returned 1 (meaning success for this command), 
// then we exit with return code 0 (meaning success for Jenkins),
// otherwise we exit with return code 1 (meaning failure for Jenkins)

Explication:

stages {        
    stage("My stage") {            
        steps {
            bat label: 'My batch script',
                script: ''' @echo off
                            return_1_if_success.exe   // command which returns 1 in case of success, 0 otherwise
                            IF %ERRORLEVEL% EQU 1 (exit /B 0) ELSE (exit /B 1)'''
        }
    }
}

Sous Windows cmd, %ERRORLEVEL% contient ce dernier code d'erreur rencontré dans un terminal cmd.exe ou à un moment donné dans un script batch.

Pour PowerShell, vous voudrez peut-être vérifier $? au lieu de ERRORLEVEL , je vous laisse vérifier l'équivalent de ceci pour d'autres shell et plateforme.


2 commentaires

Les scripts par lots ne peuvent être exécutés que sur les nœuds Windows


@Zam l'équivalent ou ERRORLEVEL sous Linux est $?, Donc il peut être facilement transposé



0
votes

Je suis surpris que plus de gens recherchent ce problème que je ne le pense.

Utilisez set +e si vous avez l'intention d'ignorer le code d'erreur exit 1 du code exécuté en tant que script shell.


0 commentaires