如果退出代码不为零,如何让 teamcity 命令行构建步骤通过?

问题描述 投票:0回答:4

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

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

teamcity
4个回答
18
投票

有两种方法:

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

  2. 运行 robocopy 时,检查 robocopy 调用的结果。如果 robocopy 有效,您可以从脚本内部显式

    exit 0
    或执行其他操作。如果您需要在其他条件下使构建失败(例如,如果源文件夹不存在,first exit 1,then运行 robocopy,如果 robocopy 成功则发送消息),这是必要的。


6
投票

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

例如:

robocopy ...
echo "robocopy done. this will make the build step succeed always"

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%%

0
投票

在 Linux bash 脚本中,我通过在脚本末尾添加下一行来修复它:

exit $?

退出 bash 时,这将返回上一个命令的状态代码。
TeamCity 的构建步骤将像任何其他步骤一样失败。

查看有关语法的更多详细信息此处

© www.soinside.com 2019 - 2024. All rights reserved.