web-dev-qa-db-ja.com

Jenkins Pipelineを実行するときに「スクリプト返品終了コード1」を修正する方法

Jenkins Blue Oceanを使ってパイプラインを定義しています。

私は単純なpython PEP8コーディング条約をやろうとしていますが、シェルの内側に入って直接コマンドを入力するとうまく動作します。

ただし、パイプラインで同じコマンドが実行されると実行されますが、終了した「スクリプト返品終了コード1」が表示されます。このエラーコードのため、次のステップには行きません。

回避策はありますか?

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

私は私が思うよりこの問題を探しているのは、より多くの人々がこの問題を探していることを驚かせています。

使用 set +eあなたがエラーコードを無視する場合は、コードの終了1をシェルスクリプトとして実行します。

1
윤태일

運が良ければ? @윤태일それがパイプラインの一部として失敗するが、マニュアルのときに常に成功したことを模式的にしている何かを経験している。

0
PDA

成功した場合の戻りステータスが1である実行可能ファイルを呼び出すバッチスクリプトと同じ問題があり、エラーが発生した場合は0がありました。

これはJenkinsの問題でしたJenkinsはJenkinsの場合、成功エラーコードは0であり、その他のステータスコードとは、次のメッセージでジョブを停止します。_script returned exit code 1_

私の回避策:最後のエラーコードを確認して、スクリプトの戻り値を反転します。

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

説明:

_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)
_

Windows CMDでは、_%ERRORLEVEL%_は、最後のエラーコードがcmd.exe端末またはバッチスクリプト内の特定の時点で発生したことを保持しています。

PowerShellの場合は、ERRORLEVELの代わりに_$?_を確認したい場合があります。

0
Pierre Baret