Cómo resolver una excepción de tiempo de espera cuando TeamCity obtiene cambios de un repositorio SSH Git
gitolite (3)
He movido un repositorio de Git de una carpeta compartida en la red a un servidor SSH que ejecuta gitolite. Agregué una clave pública / privada para que TeamCity la utilizara y le indiqué la raíz de VCS. Todo esto funciona bien, ya que la conexión de prueba es exitosa y mi configuración de compilación muestra los cambios pendientes.
Sin embargo, cuando TeamCity intenta obtener esos cambios pendientes, aparece el siguiente error:
''git fetch'' command failed.
exception: Timeout exception
Cambiando a un registro detallado veo que se agotó el tiempo de espera después de 90 segundos. En circunstancias normales, esperaría que fuera cuestión de unos segundos obtener estos cambios.
Desde que comencé a tratar de solucionar el problema, cambié mi raíz de VCS a "Clave privada predeterminada" y agregué la carpeta .ssh requerida con los archivos config, id_rsa y known_hosts. Vi la huella digital y luego los mensajes de contraseña en el registro hasta que coloque las cosas necesarias en estos archivos, y ahora mi servidor ha vuelto a dar la excepción de tiempo de espera de nuevo como lo hace cuando especifico la clave en la raíz de VCS.
Si ejecuto Git desde la línea de comandos, puedo clonar el repositorio sin ninguna solicitud (cuando tengo configurada la carpeta .ssh como se indicó anteriormente). Esto es de una cuenta de usuario diferente ya que TC se está ejecutando como un servicio bajo la cuenta SYSTEM predeterminada, pero no creo que esa sea la causa porque como dije puedo ver que TC ha recogido los cambios en la carpeta .ssh para ese cuenta.
¿Qué podría estar mal?
Ha configurado las claves para el servidor de TeamCity, pero ¿lo ha hecho también para el agente? Eso explicaría por qué en la configuración funciona la conexión de prueba, pero no funciona cuando el agente se está ejecutando.
Forma rápida de solucionar el problema:
En la configuración de VCS, cambie el VCS Checkout mode
de comprobación de VCS Checkout mode
a Automatically on server
y vea si funciona.
Actualizar:
¿Puede iniciar sesión en el servidor de TeamCity y ejecutar un git clone
de manula git clone
desde su repositorio git como usuario de teamcity
? De esta manera, puede ver que funciona y también guardar como hosts de confianza, etc.
No he usado Team City, pero he usado GO (de Thinkworks) para una integración continua, donde enfrenté un problema similar.
Puede verificar la ruta de variable de entorno para el usuario que ejecuta la tarea en el agente de compilación. Si está utilizando msysgit, tanto la carpeta bin como la carpeta cmd de msysgit deberían estar en la ruta.
Sucede cuando tienes un gran repo. Puedes seguir la siguiente recomendación :
Aumente el tiempo de espera en la máquina del usuario para OSX o Linux:
- Crea el archivo ~ / .ssh / config (si aún no existe)
- Agregue las configuraciones SSH ServerAliveInterval ServerAliveCountMax en el archivo, por ejemplo:
Host *
ServerAliveInterval 86400
ServerAliveCountMax 4