即使在 BAT 脚本中成功执行了 ROBOCOPY 命令,JENKINS 作业也会失败
JENKINS job is failed even if ROBOCOPY command successfully executed in a BAT script
我正在通过 jenkins 执行 windows bat 脚本。批处理文件给出了所需的输出,但是构建是 failing.My 批处理文件是..
cd /d D:\Bank\Member\ID
if %errorlevel% neq 0 exit /b %errorlevel%
mkdir OTP
if %errorlevel% neq 0 exit /b %errorlevel%
robocopy C:\Corporate D:\Bank\Member\ID\ /E /XF *.bat
if %errorlevel% neq 1 exit /b %errorlevel%
cd /d D:\Bank\Staff\ID
ROBOCOPY 在成功复制文件后给出退出代码 1。
但 Jenkins 构建失败并给出以下错误:
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE
如果 robocopy
退出代码 1,我希望构建成功。
As mentioned here,要检查的第一个条件是用于 运行 Jenkins 的帐户。
键入 services.msc
打开 Windows 服务并查找 Jenkins 服务。
而不是 "Local Service Account",使用您自己的帐户:这样可以避免任何权利问题。
但是:另一个标准是显示错误代码。
作为 mentioned here:
All exit codes up to '3' are fine.
所以在robocopy
之后可以加上:
@echo robocopy exit code: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo robocopy ERROR )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0
REM at the end:
exit /b 0
这将确保 Jenkins 不会使批处理步骤失败,即使 robocopy 的原始错误级别是 1。
我最好的建议是使用 jenkins-pipeline,try/catch 块,并尽可能少地使用 bat 命令(或者根本不使用)。
但考虑到您的情况,也有一个简单的解决方案:只需将字段 "ERRORLEVEL to set build unstable" 设置为 1(或其他合适的数字)。如果您单击 "Execute Windows batch command" 块下的 "Advanced" 按钮,则会出现该字段:
此方法将检查您的构建是否为 "Unstable",但会继续执行。
请使用如下方式避免:
bat "robocopy /s source dest & EXIT /B 0"
即使 robocopy return 的错误级别为非零,以上内容仍将继续 jenkins 构建。 Robocopy 不会 return 0 由于各种原因,即使在成功复制后,它也会比较两个文件夹。请查找它的 return 代码以了解更多详细信息
我正在通过 jenkins 执行 windows bat 脚本。批处理文件给出了所需的输出,但是构建是 failing.My 批处理文件是..
cd /d D:\Bank\Member\ID
if %errorlevel% neq 0 exit /b %errorlevel%
mkdir OTP
if %errorlevel% neq 0 exit /b %errorlevel%
robocopy C:\Corporate D:\Bank\Member\ID\ /E /XF *.bat
if %errorlevel% neq 1 exit /b %errorlevel%
cd /d D:\Bank\Staff\ID
ROBOCOPY 在成功复制文件后给出退出代码 1。
但 Jenkins 构建失败并给出以下错误:
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE
如果 robocopy
退出代码 1,我希望构建成功。
As mentioned here,要检查的第一个条件是用于 运行 Jenkins 的帐户。
键入 services.msc
打开 Windows 服务并查找 Jenkins 服务。
而不是 "Local Service Account",使用您自己的帐户:这样可以避免任何权利问题。
但是:另一个标准是显示错误代码。
作为 mentioned here:
All exit codes up to '3' are fine.
所以在robocopy
之后可以加上:
@echo robocopy exit code: %ERRORLEVEL%
@if %ERRORLEVEL% GTR 3 ( echo robocopy ERROR )
@if %ERRORLEVEL% GTR 3 ( exit %ERRORLEVEL% )
@set ERRORLEVEL=0
REM at the end:
exit /b 0
这将确保 Jenkins 不会使批处理步骤失败,即使 robocopy 的原始错误级别是 1。
我最好的建议是使用 jenkins-pipeline,try/catch 块,并尽可能少地使用 bat 命令(或者根本不使用)。
但考虑到您的情况,也有一个简单的解决方案:只需将字段 "ERRORLEVEL to set build unstable" 设置为 1(或其他合适的数字)。如果您单击 "Execute Windows batch command" 块下的 "Advanced" 按钮,则会出现该字段:
此方法将检查您的构建是否为 "Unstable",但会继续执行。
请使用如下方式避免:
bat "robocopy /s source dest & EXIT /B 0"
即使 robocopy return 的错误级别为非零,以上内容仍将继续 jenkins 构建。 Robocopy 不会 return 0 由于各种原因,即使在成功复制后,它也会比较两个文件夹。请查找它的 return 代码以了解更多详细信息