Почему шаг после сборки (xcopy) иногда завершается с кодом 2 в сборке TeamCity?
Несколько проектов в решении моего клиента имеют событие после сборки: xcopy вывод сборки в определенную папку. Это прекрасно работает при локальном строительстве. Однако в TeamCity я иногда получаю
Xcopy [...] завершился с кодом 2
Если я использую обычный copy, он завершается с кодом 1. Я ожидаю, что это как-то связано с блокировками файлов, хотя конкретные копируемые файлы не являются одинаковыми, поэтому, возможно, просто блокировка общего каталога назначения. Я используйте /y, чтобы не запрашивать перезапись файлов.
Почему это не удается в TeamCity, но не локально?
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