2012-07-24 11 views
38

Uno de mis proyectos de compilación de TeamCity v7.0 se basa en el uso de una diferencia entre la rama de desarrollo actual y la rama principal para determinar qué se debe ejecutar. He escrito un pequeño script que usa algo como:Uso de comandos git en TeamCity Build Step

git diff origin/master..origin/QA --name-only --diff-filter=AM | DoSomethingWithThoseFiles 

Desafortunadamente, el registro de generación indica que git diff no está funcionando. Cuando entro en el directorio buildAgent/work para este proyecto, veo que no hay una carpeta .git, por lo que no puede realizar las operaciones git requeridas.

He puesto teamcity.git.use.local.mirrors=true en el archivo buildAgent.properties como se menciona en TW-15873, pero eso no parece ayudar de ninguna manera.

¿Hay algo que pueda hacer para obtener la lista de archivos modificada entre dos ramas en un script para mi paso de compilación?

+1

¿Ha habido una solución para esto? También estoy teniendo esta dificultad al usar TeamCity 8.1. Estoy usando el modo de pago de VCS "Automáticamente en el agente", pero eso no parece ayudar. El directorio .git todavía falta. – user24601

Respuesta

45

Intente cambiar el modo de comprobación de VCS a "Comprobar siempre los archivos en el agente" según lo documentado here. Eso debería dar acceso al script de compilación a la carpeta .git.

+3

Eso me consiguió una parte del camino, pero hacer la diferencia entre el origen/Maestro y la rama actual no funciona. En cambio, parece que solo reconoce una rama SINGLE local o remota. Creo que TC está haciendo algo funky: clonar un clon o algo inusual. "git fetch" arroja un error que buildAgent/system/git/git-14CE2659.git no parece ser un repositorio de git, aunque el repositorio actual está en buildAgent/work/blah. –

+1

¡Gracias! Esto respondió una pregunta que tenía: http://stackoverflow.com/questions/17555931/how-do-i-get-teamcity-to-create-the-git-directory-when-cloning-a-repo-for-build –

+0

Desafortunadamente, parece que si necesita acceso autenticado ssh, por ejemplo para poder realizar cambios en el repositorio de git remoto, no funciona, ya que TeamCity borra las claves ssh después de recuperarlas. https://confluence.jetbrains.com/display/TCD9/SSH+Keys+Management –

7

@Mike La respuesta de Two es correcta, hay que configurar la raíz de VCS para utilizar el modo de verificación Automáticamente en el agente -no- en el servidor. Los documentos TC no mencionan que esta configuración requerida está oculta por defecto como 'avanzada'. Así que aquí hay una imagen de lo que debe buscar.

Advanced Settings

FYI, Mi error específico paso de la solución VS2013 era de MSBuild, como a continuación. Estoy utilizando el último TeamCity Enterprise 9.0 EAP (compilación 31963). [PreBuildEvent] Exec [14:21:55][Exec] git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\MYPROJECT\bin\Debug\version.txt" [14:21:55][Exec] fatal: Not a git repository (or any of the parent directories): .git [14:21:55][Exec] C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1131, 5): error MSB3073: The command "git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\Higgens\bin\Debug\version.txt"" exited with code 128. [14:21:55]

// edit; No sabía cómo agregar esto a un comentario.

Cuestiones relacionadas