12

我有一个涉及 robocopy 的命令行“自定义脚本”构建步骤。不幸的是,当 robocopy 成功时,它返回退出代码 1 而不是更常见的退出代码 0。当它这样做时,它会导致我的 teamcity 构建配置失败。

如果退出代码 != 1 仅用于此构建步骤,我如何告诉 teamcity 构建失败?这可以做到吗?以某种方式编辑 project-config.xml 怎么样?

4

3 回答 3

18

有两种方法:

  1. 在该构建配置中,转到构建失败条件步骤。查找标题Fail build if:。第一个复选框是“构建过程退出代码不为零”。确保没有检查吸盘。

  2. 运行 robocopy 时,检查调用 robocopy 的结果。如果 robocopy 有效,您可以exit 0从脚本内部显式地执行,或者执行其他操作。如果您需要在其他条件下使构建失败(例如,如果源文件夹不存在,则首先退出 1,然后运行 ​​robocopy,然后在 robocopy 成功时发送消息),这是必要的。

于 2013-01-24T04:34:27.337 回答
6

如果 Team City 自定义脚本步骤中的最后一个命令失败,即退出代码非零,则该步骤将失败。因此,您可以在 RoboCopy 命令之后添加一个始终成功的额外命令。

例如:

robocopy ...
echo "robocopy done. this will make the build step succeed always"
于 2017-02-14T17:44:32.523 回答
1

您可以编辑脚本以忽略假阴性,但保留真实错误,如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%%
于 2020-02-26T18:31:44.720 回答