即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败
Posted
技术标签:
【中文标题】即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败【英文标题】:JENKINS job is failed even if ROBOCOPY command successfully executed in a BAT script 【发布时间】:2017-12-26 06:39:00 【问题描述】:我正在通过 jenkins 执行 Windows bat 脚本。批处理文件提供了所需的输出,但是构建失败。我的批处理文件是..
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,我希望构建成功。
【问题讨论】:
【参考方案1】:我最好的建议是使用 jenkins-pipeline、try/catch 块,并尽可能少使用 bat 命令(或根本不使用)。
但考虑到您的情况,也有一个简单的解决方案:只需将字段“ERRORLEVEL to set build stable”设置为 1(或其他合适的数字)。如果单击“执行 Windows 批处理命令”块下的“高级”按钮,则会出现该字段:
此方法会将您的构建检查为“不稳定”,但会继续执行。
【讨论】:
我不想让构建失败。Jenkins 成功执行了 bat 文件,但最后将构建标记为失败...@n01d 它将在退出代码 1 上将构建标记为“不稳定”——而不是“失败”。【参考方案2】:请使用如下避免:
bat "robocopy /s source dest & EXIT /B 0"
即使 robocopy 返回非零错误级别,上述内容仍将继续 jenkins 构建。即使在成功复制后,Robocopy 也不返回 0,因为它比较了两个文件夹。请查找它的返回码以了解更多详细信息
【讨论】:
【参考方案3】:As mentioned here,要检查的第一个条件是用于运行 Jenkins 的帐户。
键入services.msc
打开 Windows 服务并查找 Jenkins 服务。
不要使用“本地服务帐户”,而是使用您自己的帐户:这样可以避免任何正确的问题。
但是:另一个标准是显示错误代码。 作为mentioned here:
直到“3”的所有退出代码都可以。
所以在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。
【讨论】:
我已经尝试过了,但它不起作用。我收到与问题中相同的错误消息...@VonCpan> @rohit.dagur 您是否尝试检查错误级别并将其设置为 0? 是的...我确实检查了它..并设置了它但我的结果是一样的..@VonCpan> @rohit.dagur 你能在脚本末尾添加exit /b 0
吗?以上是关于即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败的主要内容,如果未能解决你的问题,请参考以下文章
TFS中的Robocopy构建PowerShell步骤报告失败但没有错误
bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法
bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法
bat 脚本执行cmd命令代码实例 执行后不关闭窗口 可以继续输入方法