我有一个涉及 robocopy 的命令行“自定义脚本”构建步骤。不幸的是,当 robocopy 成功时,它会返回退出代码 1,而不是更常见的退出代码 0。当它这样做时,我的 teamcity 构建配置会失败。
如果仅此构建步骤的退出代码 != 1,我如何告诉 teamcity 构建失败?这可以做到吗?以某种方式编辑project-config.xml怎么样?
有两种方法:
在该构建配置中,转到构建失败条件步骤。查找标题 Fail build if: 。第一个复选框是“构建进程退出代码不为零”。确保吸盘未被选中。
运行 robocopy 时,检查 robocopy 调用的结果。如果 robocopy 有效,您可以从脚本内部显式
exit 0
或执行其他操作。如果您需要在其他条件下使构建失败(例如,如果源文件夹不存在,first exit 1,then运行 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%%
在 Linux bash 脚本中,我通过在脚本末尾添加下一行来修复它:
exit $?
退出 bash 时,这将返回上一个命令的状态代码。
TeamCity 的构建步骤将像任何其他步骤一样失败。
查看有关语法的更多详细信息此处。