Почему шаг пост-сборки (xcopy) иногда выходит с кодом 2 в сборке TeamCity?
Несколько проектов в моем клиентском решении имеют событие post-build: xcopy
вывод сборки в определенную папку. Это прекрасно работает при создании локально. Однако в TeamCity я иногда получаю
xcopy [...] вышел с кодом 2
Если я использую обычный copy
, он выходит с кодом 1. Я ожидаю, что это связано с файловыми замками, хотя отдельные файлы, которые копируются, не совпадают, поэтому, возможно, просто блокировка в общем каталоге назначения. Я использую /y
, чтобы не запрашивать перезапись файлов.
Почему это не удается в TeamCity, но не локально?
Ответы
Ответ 1
Даже если вы предоставите переключатель /Y
с помощью xcopy, вы все равно получите сообщение об ошибке, когда xcopy не знает, является ли вещь, которую вы копируете, файлом или каталогом. Эта ошибка появится как "вышла с кодом 2". Когда вы запускаете тот же xcopy в командной строке, вы увидите, что xcopy запрашивает ответ файла или каталога.
Чтобы решить эту проблему с помощью автоматизированной сборки, вы можете выполнить эхо в заранее определенном ответе с помощью протокола.
Говорить то, что вы копируете, это файл, echo в F
:
echo F|xcopy /y ...
Говорить то, что вы копируете, является directoy, echo в D
:
echo D|xcopy /y ...
Иногда вышеупомянутое можно решить, просто используя команду copy вместо xcopy:
copy /y ...
Однако, если есть несуществующие каталоги, ведущие к конечному файловому назначению, тогда произойдет "выход с кодом 1".
Помните: используйте переключатель /C
и xcopy с осторожностью.
Ответ 2
Если вы используете xcopy в событии post build, используйте переключатель /Y в дополнение к /C.
/C Continues copying even if errors occur.
/Y Suppresses prompting to confirm you want to overwrite an existing file.
Ответ 3
Я исправил код ошибки 2, добавив\в конец моего пути, без него, xcopy будет считать, что это файл вместо папки.
Ответ 4
Мое исправление для этой проблемы состояло в том, чтобы войти в папку целевого bin и убедиться, что там есть соответствующая подпапка. После того, как эта подпапка была создана вручную, процесс сборки завершился успешно.
Ответ 5
Возможно, вы используете TeamCity с git. Если да, убедитесь, что папки, которые вы хотите скопировать, существуют в репозитории git. Обычно git aviod добавляет пустые папки проекта в репозиторий, поэтому xcopy не находит его и генерирует ошибку.
Вы можете добавить пустой файл txt в пустую папку, зафиксировать и увидеть папку в репозитории.
Надеюсь, это поможет.