Robocopy在TFS构建中使用时失败

12

我在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.

这里是有关构建配置的图像:输入图像描述


你说得对,我在发布之前没找到,相信我我已经深入寻求任何帮助了;)不同之处在于它失败了在任何一种步骤中,而不仅仅是像 NikolaiDante 发布的 Powershell 步骤。 - toscanelli
这个任务恰好在重复的内容中提到了PowerShell,但我想无论是命令还是PowerShell都适用。 - Matt
2个回答

10

RoboCopy有 ExitCodes > 0。

在您的示例中, Exit Code = 1 表示已成功复制一个或多个文件(即,新文件已到达)


要解决此问题,您可以创建一个PowerShell脚本,执行复制并覆盖Exit code。

例如:

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

2
看起来Robocopy的创建者们有一个可怕的想法,即在一切成功时不返回零代码......谢谢你和@Shayki,我省下了很多时间;) - toscanelli

8

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


1
非常有用的信息。谢谢!我接受了马丁的答案,因为他比你快1分钟,而且他包含了所有的成功代码,但无论如何还是非常感谢你。你们俩都让我的一天变得更轻松;) - toscanelli
没问题 :) 我很高兴能帮助你! - Shayki Abramczyk
1
我编辑了你的答案,包括错误代码2-7。如果你愿意,可以撤销。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接