2012-04-25 12 views
6

Estoy buscando un programa que espero que alguien haya creado. Voy a describir este software aquí esperando que alguien haya escuchado algo así y pueda orientarme en la dirección correcta.Git proxy que empuja a múltiples controles remotos

Estoy desarrollando una aplicación web que se implementa en Heroku. Debido a las limitaciones de Heroku, me encuentro en la desafortunada situación de tener cuatro (4) repositorios Git remotos para el mismo repositorio.

¿Por qué cuatro?

Tenemos varias "aplicaciones" en Heroku. Uno para la producción y un par de "aplicaciones" de escenificación. Estos son todos para la misma aplicación, pero en Heroku son "aplicaciones" separadas, por lo que podríamos probar la puesta en escena antes de llevarlos a la producción.

Cada aplicación en Heroku tiene su propio repositorio de Git separado, y automáticamente implementa la rama master cada vez que se envía una nueva confirmación a esa rama master. Esta política de Heroku es el quid de nuestro problema. Porque esto significa que tenemos 3 repositorios diferentes en Heroku, además de nuestro repositorio de GitHub.

¿Por qué es un problema tener 4 mandos a distancia diferentes de Git? Porque significa que cuando desarrolla y crea nuevas confirmaciones, tiene que (1) presionar solo un control remoto o (2) enviar a todos los controles remotos.

Hacer (1) significa pensar a qué control remoto desea presionar. Odio tener que pensar en esto. Cuando desarrollo, no me importan los controles remotos, me comprometo y presiono y vuelvo al trabajo. Si quiero implementar una rama en el servidor de transición 1, por ejemplo, fusionaría esa rama en la rama staging_1 y la presionaré. No me gusta elegir a qué control remoto presionar.

Otra desventaja de (1) es que los controles remotos no están sincronizados.

Lo que quiero es (2). Quiero que cada acción de empuje empuje a todos nuestros cuatro repositorios.

Pero hay 2 problemas con eso:

Problema 1: La puesta en escena "aplicaciones" en Heroku desplegar lo que está en master. No quiero que hagan eso. Quiero asignar la rama staging_1 en mi repositorio a la rama master en el repositorio Git del servidor de transferencia.

Problema 2: Hacer que mi computadora presione a los 4 reposs tomará un largo tiempo. Incluso 1 acción push de Heroku lleva mucho tiempo. Puede tomar 40 segundos a veces.


solución propuesta

Esto es lo que quiero. Quiero tener un servidor especializado de Git que actúe como un proxy. Cada vez que presiono desde mi computadora local en este servidor de Git, insertará esas mismas ramas en nuestros 4 repos en paralelo. De esa manera, desde la perspectiva de mi computadora local, el impulso parecerá instantáneo, mientras que este servidor proxy tratará automáticamente los repositorios Heroku en segundo plano.

Si falla la pulsación de cualquiera de los 4 controles remotos por algún motivo, quiero que este proxy me informe de alguna manera, así sabré que algo está roto y podría solucionarlo.

Otra cosa que este proxy tendrá que hacer es la asignación master.Cada vez que presionaría la rama staging_1 hacia ella, la insertaría como staging_1 en todos los controles remotos, pero para el control remoto que pertenece al servidor de transición también empujará esa rama como master, por lo que Heroku sabrá desplegarla.

(es bastante triste que Heroku está diseñado de tal manera que me hace necesito un proxy como este, pero eso es lo que tengo que tratar.)

Así que es eso. Esa es la solución que quiero. ¿Alguien sabe de un programa así?

+0

El problema 1 se resuelve mediante: 'git push staging staging_1: master' - es decir, empujando su rama local de staging_1 en el maestro del control remoto de transición. –

+0

Y es posible que https://github.com/fastestforward/heroku_san ayude con una secuencia de comandos de implementación que podría hacerlo por usted pero que seguiría siendo lenta en 4 repositorios. –

Respuesta

0

Esto me parece un poco loco. Tengo varias aplicaciones en Heroku que ejecutan entornos diferentes. Tengo un Repo Github y luego los controles remotos Heroku para los diferentes entornos. También tiendo a mantener una rama de Git que coincide con uno de los mandos a distancia Heroku.

Los despliegues se hacen entonces (como dice Juan) con:

git push heroku_remote local_branch:master 

he documentado este enfoque básico aquí:

http://neilmiddleton.com/deploying-topic-branches-to-heroku/

Sin embargo, usted tiene la necesidad de automatización completa de lo que puedo decir Puede usar un servicio como TDDium para hacer este tipo de cosas por usted, mirando una rama de Git y luego presionando a una sucursal remota (como un control remoto de Heroku) cuando pase el banco de pruebas.

http://neilmiddleton.com/continuous-deployment-with-heroku/

estoy seguro de que el enfoque TDDium le dará lo que necesita, con la capa adicional de CI.

1

Crea un nuevo repositorio, al que puedes presionar cuando quieras que el empuje se propague, y escribe un gancho post-recepción para propagar los cambios cuando ingresas a este repositorio.

Cuestiones relacionadas