即使在 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 代码以了解更多详细信息