2011-02-09 23 views
8

Mi configuración es un servidor XAMPP de Windows, con cURL habilitado, y Git y Hudson instalados. Hudson encuesta a Git cada minuto para buscar cambios, y si los encuentra, crea una construcción. Yo uso esta compilación como mi servidor de prueba. Esto funciona bienEl gancho post-recepción Git no funciona

me gustaría preparar un gancho posterior a recibir en mi repositorio remoto central que ejecuta la función de la fuerza de construcción de Hudson.

He creado un archivo post-recepción llamado "post-recepción" en el directorio de ganchos en mi repositorio central de Git, el que se envía desde las sucursales locales de los desarrolladores. Cada uno empuja a su propia sucursal en el repositorio central. Quiero ejecutar la creación posterior a la recepción inmediatamente después de cada inserción, en lugar de hacer que Hudson sondee cada minuto.

Al abrir un shell al servidor remoto y ejecutar "post-recepción" en la carpeta de ganchos, que se ejecuta. Simplemente no se llama cuando las personas presionan desde sus copias de repositorio locales hasta la central.

Tal vez no estoy explicando esto bien, pero es como yo entiendo Git.

La posterior a recibir el código es de dos líneas:

#!/bin/sh 
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken 

Una vez más, al abrir un shell y ejecutar este, funciona, pero cuando alguien empuja a él, no pasa nada, hasta que un minuto o menos va por, Hudson se da cuenta de que Git fue cambiado, y luego se construye.

Me complace aclarar si es necesario. Cualquier ayuda es muy apreciada.

EDIT: Después de jugar un rato con él, siento que tal vez después de la recepción no se árbitros de ejecución, porque no se actualizan de algo? La documentación de git dice

Se ejecuta en el repositorio remoto una vez que se han actualizado todas las referencias.

¿Esto significa que si nada se actualiza, no se ejecutará? Y si es así, estoy bastante seguro de que las cosas se están actualizando de todos modos, así que no deberían aplicarse.

Aquí está mi proceso: edic localmente. Confirmar ediciones. Empuje desde mi HEAD a la rama remota llamada 'mybranch' (no la rama principal, que está desprotegida) Este es el punto en el que quiero que se ejecute mi gancho.

+0

El usuario su demonio Git se está ejecutando tiene permiso para ejecutar ese guión? – jweyrich

+0

No estoy seguro. Lo ejecuta cuando lo ejecuto a través de Git Bash, pero no cuando lo presiono. ¿Cómo verificaría esos permisos? – spanky

+0

el permiso correcto depende de la forma en que esté compartiendo su repositorio y las configuraciones reales. Sin embargo, msquared te dice la forma de otorgar permisos ejecutables a todos los usuarios/grupos, por lo que debería funcionar si el problema es ese. – jweyrich

Respuesta

3

Todas estas respuestas son útiles, pero resulta que necesitaba el directorio "bin" de git en mi variable PATH. Tenía el directorio "cmd" solamente. Se agregó c:\my_path_to_git\git\bin a PATH y funciona bien. Encontré esta respuesta por prueba y error y mirando el registro de errores de apache. ¡Gracias por toda tu ayuda!

11

Por favor, compruebe si el archivo tiene derechos de ejecución. De lo contrario, no puede ser ejecutado. Algo como rwxr-xr-x debería ser suficiente.

Se pueden añadir los bits que faltan con

$ chmod +x /path/to/post-receive 
+0

Eso hizo. Ahora es rwxr-xr-x, y recuerda que se estaba ejecutando desde el shell de Git Bash, pero aún no se ejecuta solo a través de push. – spanky

1

Intente utilizar ruta completa a enroscarse en el archivo de post-recibir, como camino puede ser diferente que cuando se ejecuta la escritura a mano.

Si quieres ver lo que es el entorno de ejecución posterior a la recepción de la escritura:

#!/bin/sh 
export > file 

o simplemente (se mostrará env.las variables después de empujar hacia repo)

#!/bin/sh 
export 

Además, no estoy seguro de cómo ejecutar scripts de shell funciona en Windows, por lo que #!/ruta/a/instalado/sh en lugar de #!/bin/sh podría ayudar a

+0

No estoy seguro de cuál es la ruta completa de curl. Estoy completamente perdido aquí. ¿Se supone que el camino "sh" es el sh que vino con Git? Windows es confuso Cuando ejecuto la exportación, todo está bien, cuando ejecuto manualmente la secuencia de comandos posterior a la recepción, pero la secuencia de comandos no se ejecuta en absoluto cuando presiono, por lo que realmente no me sirve. CURL path sería útil. Tengo c: \ xampp \ php en mi PATH, ¿qué más necesito? – spanky

+0

Necesita averiguar dónde está instalado Curl y usar la ruta completa para curl en su secuencia de comandos. Ejecute el * shell * (shell de git) manualmente y escriba "which curl" - imprimirá algo como/usr/bin/curl. Reemplaza "curl" en tu script con lo que imprima. – ebneter

5

¿Qué método de transporte está utilizando para enviar al repositorio?

Los ganchos solo se ejecutan cuando se usan protocolos de transporte 'inteligentes' como ssh y la implementación cgi de http. Para otros protocolos de transporte "tontos" como ftp, rsync y la implementación anterior de http, los enganches nunca se ejecutarán. Supongo que el protocolo git ejecutará ganchos, pero presionar sobre ese protocolo nunca ha sido considerado una buena idea.

+0

Oh hombre. Estoy usando http. Fallar. ¿Algún consejo sobre cambiar a una versión diferente sin arruinar lo que tengo actualmente en el repositorio? Me veré a mí mismo también. – spanky

+0

Aún puede usar HTTP si utiliza http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html pero no sé nada sobre intentar configurarlo en Windows. También puede configurar un servidor SSH utilizando un servidor nativo de Windows o con cygwin, con el que tampoco tengo experiencia. Como ya descubriste, Windows no es exactamente el sistema operativo más amigable para alojar repositorios git. – Arrowmaster

+0

@Arrowmaster Su comentario me resultó útil para configurar un repositorio de juguetes a través de HTTP y también necesitaba que los ganchos se ejecutaran. ¡Gracias! –

1

Creo que la respuesta simple es que necesita para mover el contenido del post-recibir el gancho del lado del servidor en lugar del lado del cliente

+1

¡Bienvenido a Stack Overflow! Esto es realmente un comentario, no una respuesta. Con un poco más de repetición, [podrá publicar comentarios] (// stackoverflow.com/privileges/comment). – Mat