从 TFS 构建中使用时 Robocopy 失败
Robocopy fails when is used from TFS Builds
我在 TFS 构建中设置了命令行阶段来执行 Robocopy,它 returns 错误代码 1,尽管在 robocopy 执行期间没有错误。
如果我直接在 Cmd 中 运行 Robocopy 命令它可以工作,作业日志显示 Robocopy 工作正常直到结束:
2019-02-27T10:21:58.3234459Z Total Copied Skipped
Mismatch FAILED Extras
2019-02-27T10:21:58.3234459Z Dirs : 1688 0 1688 0 0 0
2019-02-27T10:21:58.3234459Z Files : 6107 6 6101 0 0 0
2019-02-27T10:21:58.3234459Z Bytes : 246.01 m 299.2 k 245.71 m 0 0 0
2019-02-27T10:21:58.3234459Z Times : 0:00:17 0:00:00 0:00:00 0:00:17
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z Speed : 3879329 Bytes/sec.
2019-02-27T10:21:58.3234459Z Speed : 221.976 MegaBytes/min.
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z Ended : Wed Feb 27 11:21:58 2019
2019-02-27T10:21:58.3702460Z ##[error]Process completed with exit code 1.
这是一张关于构建配置的图片:
RoboCopy ExitCodes > 0。
在您的示例中Exit Code = 1
表示一个或多个文件已成功复制(即新文件已到达)。
要解决此问题,您可以创建一个 Powershell 脚本,它会执行复制并覆盖退出代码。
喜欢
param( [String] $sourcesDirectory, [String] $destinationDirectory, [String] $attributes)
robocopy $sourcesDirectory $destinationDirectory $attributes
if( $LASTEXITCODE -ge 8 )
{
throw ("An error occured while copying. [RoboCopyCode: $($LASTEXITCODE)]")
}
else
{
$global:LASTEXITCODE = 0;
}
exit 0
robocopy
使用错误代码不同,错误代码1
不是真正的错误,它只是说一个或多个文件复制成功。
TFS 将错误代码 1 识别为真正的错误并导致构建失败。
要解决这个问题,您需要更改 robocopy
错误代码:
(robocopy c:\dirA c:\dirB *.*) ^& IF %ERRORLEVEL% LEQ 1 exit 0
^& IF %ERRORLEVEL% LEQ 1 exit 0
将错误代码1
转换为0
,TFS构建就不会失败。
我在 TFS 构建中设置了命令行阶段来执行 Robocopy,它 returns 错误代码 1,尽管在 robocopy 执行期间没有错误。
如果我直接在 Cmd 中 运行 Robocopy 命令它可以工作,作业日志显示 Robocopy 工作正常直到结束:
2019-02-27T10:21:58.3234459Z Total Copied Skipped
Mismatch FAILED Extras
2019-02-27T10:21:58.3234459Z Dirs : 1688 0 1688 0 0 0
2019-02-27T10:21:58.3234459Z Files : 6107 6 6101 0 0 0
2019-02-27T10:21:58.3234459Z Bytes : 246.01 m 299.2 k 245.71 m 0 0 0
2019-02-27T10:21:58.3234459Z Times : 0:00:17 0:00:00 0:00:00 0:00:17
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z Speed : 3879329 Bytes/sec.
2019-02-27T10:21:58.3234459Z Speed : 221.976 MegaBytes/min.
2019-02-27T10:21:58.3234459Z
2019-02-27T10:21:58.3234459Z Ended : Wed Feb 27 11:21:58 2019
2019-02-27T10:21:58.3702460Z ##[error]Process completed with exit code 1.
这是一张关于构建配置的图片:
RoboCopy ExitCodes > 0。
在您的示例中Exit Code = 1
表示一个或多个文件已成功复制(即新文件已到达)。
要解决此问题,您可以创建一个 Powershell 脚本,它会执行复制并覆盖退出代码。
喜欢
param( [String] $sourcesDirectory, [String] $destinationDirectory, [String] $attributes)
robocopy $sourcesDirectory $destinationDirectory $attributes
if( $LASTEXITCODE -ge 8 )
{
throw ("An error occured while copying. [RoboCopyCode: $($LASTEXITCODE)]")
}
else
{
$global:LASTEXITCODE = 0;
}
exit 0
robocopy
使用错误代码不同,错误代码1
不是真正的错误,它只是说一个或多个文件复制成功。
TFS 将错误代码 1 识别为真正的错误并导致构建失败。
要解决这个问题,您需要更改 robocopy
错误代码:
(robocopy c:\dirA c:\dirB *.*) ^& IF %ERRORLEVEL% LEQ 1 exit 0
^& IF %ERRORLEVEL% LEQ 1 exit 0
将错误代码1
转换为0
,TFS构建就不会失败。