Robocopy не работает, когда используется из сборок TFS - PullRequest
0 голосов
/ 27 февраля 2019

Я установил фазу командной строки в сборках TFS для выполнения Robocopy, и он возвращает код ошибки 1, хотя ошибок при выполнении Robocopy нет.

Если я запускаю команду Robocopy непосредственно вCmd работает, а журнал заданий показывает, что 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.

Вот изображение о конфигурации сборки: enter image description here

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

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 не будет завершена неудачей.

0 голосов
/ 27 февраля 2019

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