簡體   English   中英

TFS中的Robocopy構建PowerShell步驟報告失敗但沒有錯誤

[英]Robocopy in TFS Build PowerShell Step Reports Failure But Has No Error

我的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 + "\bin\release")
      $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使用一套退出代碼,包括:

0×00 0未發生錯誤,未進行復制。 源目標樹和目標目錄樹完全同步。

0×01 1成功復制了一個或多個文件(即新文件已到達)。

完整列表

因為腳本沒有exit語句, $LastExitCode的值為1,這對Robocopy有意義,但會導致TFS認為腳本失敗。

使用exit壓縮了Robocopy退出代碼,因此TFS認為腳本已經有效。 但是,這意味着任何Robocopy信息都被抑制。

更改最后一行到exit ($LastExitCode -band 24)妥善解決這個問題,按照這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM