我有一个涉及 robocopy 的命令行“自定义脚本”构建步骤。不幸的是,当 robocopy 成功时,它返回退出代码 1 而不是更常见的退出代码 0。当它这样做时,它会导致我的 teamcity 构建配置失败。
如果退出代码 != 1 仅用于此构建步骤,我如何告诉 teamcity 构建失败?这可以做到吗?以某种方式编辑 project-config.xml 怎么样?
我有一个涉及 robocopy 的命令行“自定义脚本”构建步骤。不幸的是,当 robocopy 成功时,它返回退出代码 1 而不是更常见的退出代码 0。当它这样做时,它会导致我的 teamcity 构建配置失败。
如果退出代码 != 1 仅用于此构建步骤,我如何告诉 teamcity 构建失败?这可以做到吗?以某种方式编辑 project-config.xml 怎么样?
有两种方法:
在该构建配置中,转到构建失败条件步骤。查找标题Fail build if:。第一个复选框是“构建过程退出代码不为零”。确保没有检查吸盘。
运行 robocopy 时,检查调用 robocopy 的结果。如果 robocopy 有效,您可以exit 0
从脚本内部显式地执行,或者执行其他操作。如果您需要在其他条件下使构建失败(例如,如果源文件夹不存在,则首先退出 1,然后运行 robocopy,然后在 robocopy 成功时发送消息),这是必要的。
如果 Team City 自定义脚本步骤中的最后一个命令失败,即退出代码非零,则该步骤将失败。因此,您可以在 RoboCopy 命令之后添加一个始终成功的额外命令。
例如:
robocopy ...
echo "robocopy done. this will make the build step succeed always"
您可以编辑脚本以忽略假阴性,但保留真实错误,如robocopy 文档
中所述,错误
级别 1、2 和 3 是成功的。
因此,您可以在 teamcity 中的 robocopy 行之后添加:
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end
或者,更通用:
IF %%ERRORLEVEL%% LEQ 3 set errorlevel=0
if %%errorlevel%% neq 0 exit /b %%errorlevel%%