TFS中的Robocopy构建PowerShell步骤报告失败但没有错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TFS中的Robocopy构建PowerShell步骤报告失败但没有错误相关的知识,希望对你有一定的参考价值。

我的powershell脚本运行时没有在日志文件中报告错误,但TFS 2015构建步骤报告错误。我需要进行特殊回拨吗?

这是一种新的样式构建,而不是基于XAML的构建。

脚本没有什么特别之处,它称为robocopy,它成功发生。

这是脚本:

[CmdletBinding()]
param (
  [string]$localWorkspace,
  [string]$destination 
)
begin{}
process
{
  try
  {
    ## Script
    $ServiceDirs = Get-ChildItem $localWorkspace -Recurse | ?{ $_.PSIsContainer -eq $True -and $_.Name -match "^Service$" } | % { $_.FullName }

    $serviceCollection = @{}
    foreach ($Service in $ServiceDirs)
    {
      $ServiceName = Get-ChildItem $Service | ?{$_.Name -match ".*.csproj$" } | % { $_.BaseName }

      $binpath = ($service + "in
elease")
      $serviceCollection.Add($serviceName , $binpath)
    }

    $serviceCollection.GetEnumerator() | % { 
      Write-Verbose "Processing service: $($_.key)" 

      $currentDestination = ($destination + "" + $_.key)
      $output = robocopy $_.value $currentDestination /MIR /NFL /NDL /NJH /NJS /nc /ns /np
    }
  }
  catch
  {
    write-host "Caught an exception:" 
    write-host "Exception Type: $($_.Exception.GetType().FullName)" 
    write-host "Exception Message: $($_.Exception.Message)" 
  }
}
end{}

我可以看到所有robocopy输出,如果我取消它并使用/ DEBUG并且没有TFS构建日志中的catch。

奇怪的是,当我强制执行错误时,catch执行并且步骤报告成功。

报告的错误消息是:

任务PowerShell失败。这导致作业失败。查看任务的日志以获取更多详细信息。

答案

TL; DR检查调用中使用的退出代码,或使用exit离开脚本。


RoboCopy uses a suite of exit codes including:

0×00 0未发生错误,未进行复制。源目标树和目标目录树完全同步。

0×01 1成功复制了一个或多个文件(即新文件已到达)。

(Qazxswpoi)

因为脚本没有Full List Here语句,所以exit的值为1,这对Robocopy有意义,但会导致TFS认为脚本失败。

使用qazxsw poi抑制了Robocopy退出代码,因此TFS认为该脚本已经有效。但是,这意味着任何Robocopy信息都被抑制。

根据$LastExitCode,将最后一行更改为exit可以正确解决问题。

以上是关于TFS中的Robocopy构建PowerShell步骤报告失败但没有错误的主要内容,如果未能解决你的问题,请参考以下文章

TFS 构建和 Powershell:如何访问预定义的构建变量

TFS 构建通过 REST API 和 PowerShell 发布测试结果 TRX

TFS 2017 - 从 TFS 服务器而不是代理运行 powershell 脚本

如何使用 REST API 在 PowerShell 中获取 TFS 构建报告 [重复]

PowerShell 修复 Robocopy的权限问题

带有 Robocopy 和参数传递的 Powershell