¿Por qué un paso posterior a la construcción(xcopy) ocasionalmente sale con el código 2 en una compilación de TeamCity?
(5)
Incluso si proporciona el modificador /Y
con xcopy, igualmente recibirá un error cuando xcopy no sepa si lo que está copiando es un archivo o un directorio. Este error aparecerá como "salido con el código 2". Cuando ejecuta la misma copia en el símbolo del sistema, verá que xcopy está solicitando una respuesta de archivo o directorio.
Para resolver este problema con una compilación automatizada, puede hacer eco en una respuesta predefinida con un conducto.
Para decir que lo que estás copiando es un archivo, echo en F
:
echo F|xcopy /y ...
Decir que lo que estás copiando es un directorio, echo en D
:
echo D|xcopy /y ...
A veces, lo anterior se puede resolver simplemente usando un comando de copia en lugar de xcopy:
copy /y ...
Sin embargo, si hay directorios inexistentes que conducen al destino del archivo final, se producirá un "exit with code 1".
Recuerde: utilice el modificador /C
y xcopy con precaución.
Algunos proyectos en la solución de mi cliente tienen un evento xcopy
la construcción: xcopy
el resultado de compilación en una carpeta específica. Esto funciona bien cuando se construye localmente. Sin embargo, en TeamCity, ocasionalmente obtengo
xcopy [...] salió con el código 2
Si uso una copy
normal, sale con el código 1. Espero que esto tenga algo que ver con los bloqueos de archivos, aunque los archivos específicos que se están copiando no son los mismos, así que tal vez solo esté bloqueando en el directorio de destino compartido. Uso /y
para no solicitar la sobrescritura de archivos.
¿Por qué esto falla en TeamCity pero no localmente?
Mi solución para este problema fue ir a la carpeta bin de destino y asegurarse de que exista la subcarpeta adecuada allí. Una vez que esa subcarpeta se creó manualmente, el proceso de compilación se completó con éxito.
Probablemente estás usando TeamCity con git. En caso afirmativo, verifique que las carpetas que desea copiar estén en el repositorio de git. Por lo general, git aviod agrega carpetas de proyecto vacías al repositorio, por lo que xcopy no puede encontrarlo y genera un error.
Puede agregar un archivo txt vacío a la carpeta vacía, confirmar y ver que la carpeta aparece en el repositorio.
Espero que esto ayude
Si usa xcopy en un evento posterior a la compilación, use el modificador / Y además de / C.
/C Continues copying even if errors occur.
/Y Suppresses prompting to confirm you want to overwrite an existing file.
Solucioné el código de error 2 agregando un / al final de mi ruta, sin él, xcopy pensará que es un archivo en lugar de una carpeta.