2015-09-01 3 views
4

Скриншот моей скрипты powershell работает без ошибок в файле журнала, но на этапе сборки TFS 2015 сообщается об ошибке. Нужно ли мне выполнять специальный звонок?TFS 2015 Build Powershell Step Reports Failure, но не имеет ошибок

Это новый стиль, а не основанный на 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, если я unsilence и использовать/DEBUG и ни один из улова в TFS построить журнал.

Странно, когда я заставляю ошибку, выполняется улов и успешность отчетов о шагах.

Сообщение об ошибке сообщается в:

Задача PowerShell не удалось. Это заставило работу потерпеть неудачу. Посмотрите на журналы для получения дополнительной информации.

+0

Вы пробовали включить отладку? Добавьте переменную «system.debug» в значение true ... –

ответ

6

TL; DR Проверьте коды выхода, используемые в вызовах, или использовать exit оставить сценарий.


RoboCopy использует набор кодов выхода включая: не произошло

0 × 00 0 Ошибок нет, и никакого копирования не было сделано. Деревья исходного и целевого каталога полностью синхронизированы.

0 × 01 1 Один или несколько файлов были скопированы успешно (т.е. появились новые файлы).

(Full List Here)

Поскольку сценарий не имел exit заявление значение $LastExitCode было 1, который имеет смысл для Robocopy, но вызывает TFS верить сценарий на неудачу.

Использование exit подавило код выхода Robocopy, поэтому TFS считал, что скрипт работал. Однако это означало, что любая информация Robocopy была подавлена.

Изменение окончательной строки на exit ($LastExitCode -band 24) позволило решить проблему должным образом, согласно this article.