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