web-dev-qa-db-fra.com

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

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

J'essaie de faire un simple python Convention de codage PEP8, mais si je passe à l'intérieur de la coquille et tapez la commande directement, elle fonctionne bien.

Mais lorsque la même commande est exécutée dans le pipeline, elle est exécutée, mais à l'extrémité "Le code de sortie renvoyé du script 1" est affiché. En raison de ce code d'erreur, cela ne va pas à la prochaine étape.

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
윤태일

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

Utilisation set +e Si vous avez l'intention d'ignorer le code d'erreur Quitter 1 de code exécuté en tant que script shell.

1
윤태일

toute chance? @ 윤태일 expérimenter quelque chose de similiaire où il ne manque que dans le pipeline mais toujours réussi lorsque le manuel.

0
PDA

J'ai eu le même problème avec un script de lot 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 une échec de l'échec, alors arrête le travail avec le message suivant: script returned exit code 1

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

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)'''
        }
    }
}

Explication:

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)

Sur Windows CMD, %ERRORLEVEL% Détient ce dernier code d'erreur rencontré dans une borne cmd.exe ou à un point donné dans un script de lot.

Pour PowerShell, vous voudrez peut-être vérifier $? Au lieu de ERRORLEVEL, je vous laisserai vérifier l'équivalent de ceci pour une autre coquille et une autre plate-forme.

0
Pierre Baret