从TFS Builds使用Robocopy失败

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

我在TFS构建中设置了一个命令行阶段来执行一个Robocopy并返回一个错误代码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.

这是关于Build配置的图像:enter image description here

tfs azure-devops robocopy
2个回答
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

1
投票

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构建将不会失败。

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