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
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.
toute chance? @ 윤태일 expérimenter quelque chose de similiaire où il ne manque que dans le pipeline mais toujours réussi lorsque le manuel.
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.