Почему шаг после сборки (xcopy) иногда завершается с кодом 2 в сборке TeamCity?



Несколько проектов в решении моего клиента имеют событие после сборки: xcopy вывод сборки в определенную папку. Это прекрасно работает при локальном строительстве. Однако в TeamCity я иногда получаю




Xcopy [...] завершился с кодом 2




Если я использую обычный copy, он завершается с кодом 1. Я ожидаю, что это как-то связано с блокировками файлов, хотя конкретные копируемые файлы не являются одинаковыми, поэтому, возможно, просто блокировка общего каталога назначения. Я используйте /y, чтобы не запрашивать перезапись файлов.



Почему это не удается в TeamCity, но не локально?

528   6  

6 ответов:

Даже если вы предоставите переключатель /Y с помощью xcopy, вы все равно получите ошибку, когда xcopy не будет знать, является ли копируемая вещь файлом или каталогом. Эта ошибка будет отображаться как "выход с кодом 2". При запуске того же xcopy в командной строке, вы увидите, что xcopy запрашивает ответ файла или каталога.

Чтобы решить эту проблему с помощью автоматизированной сборки,можно выполнить эхо в заранее определенном ответе с помощью канала.

Чтобы сказать, что вещь, которую вы копируете, - это файл, echo в F:

echo F|xcopy /y ...

Чтобы сказать, что вещь, которую вы копируете, является directoy, эхо в D:

echo D|xcopy /y ...

Иногда вышесказанное можно решить, просто используя команду copy вместо xcopy:

copy /y ...

Однако, если существуют несуществующие каталоги, ведущие к конечному месту назначения файла, то произойдет" выход с кодом 1".

Помните: используйте переключатель /C и xcopy с осторожностью.

Я исправил код ошибки 2, добавив \ в конце моего пути, без него xcopy будет думать, что это файл, а не папка.

Если вы используете xcopy в событии post build, используйте переключатель /Y в дополнение к /C.

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.

Мое исправление для этой проблемы состояло в том, чтобы перейти в целевую папку bin и убедиться, что там существует соответствующая подпапка. Как только эта подпапка была создана вручную, процесс сборки завершился успешно.

copy Починил его для меня. xcopy with /c /y не сработало. Я получил выход 4, поэтому я пошел с xcopy, но оказалось, что мне нужны кавычки вокруг ($TargetPath).

Мой сценарий:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"

Вероятно, вы используете TeamCity с git. Если да, проверьте, что папки , которые вы хотите скопировать, существуют в репозитории git. Обычно git aviod добавляет пустые папки проекта в репозиторий, поэтому xcopy не находит его и выдает ошибку.

Вы можете добавить пустой текстовый файл в пустую папку, зафиксировать и посмотреть, как папка появится в репозитории.

Comments

    Ничего не найдено.