Estoy usando capistrano para implementar una aplicación RoR. La base de código está en un repositorio git, y la ramificación se usa ampliamente en el desarrollo. Capistrano usa el deploy.rb
archivo para su configuración, una de ellas es la rama desde la que se implementa.
Mi problema es este: digamos que creo una nueva rama A desde el maestro . El archivo de implementación hará referencia a la rama maestra . Editar I que, por lo que una puede ser desplegado a entorno de prueba. Termino de trabajar en la función y fusiono la rama A en la maestra . Dado que el deploy.rb
archivo de A es más fresca, que se fusionó en y ahora el deploy.rb
de maestro de referencias rama Una . Hora de editar de nuevo.
Esa es una gran cantidad de edición manual aparentemente innecesaria: el parámetro siempre debe coincidir con el nombre de la rama actual. Además de eso, es fácil olvidarse de editar la configuración cada vez.
¿Cuál sería la mejor manera de automatizar este proceso?
Editar: Resulta que alguien ya había hecho exactamente lo que necesitaba :
Esta mañana tuve la oportunidad de desplegar una rama de un repositorio git en un servidor provisional, pero no tenía la menor idea de cómo. Una búsqueda rápida a través del código fuente de capistrano reveló que podía usar set
:branch "branch_name"
en mi script de implementación. Lo intenté y funcionó. Entonces pensé que tendría que hacer un cambio similar en todas mis ramas. Por supuesto, soy un holgazán y me preguntaba si no había una mejor manera.Si no está familiarizado con git, la salida del comando git branch es una lista de ramas con un asterisco que marca el que está actualmente desprotegido en su máquina local. Por ejemplo:
> git branch * drupal_authentication fragment_caching master
Entonces, pensé, ¿qué pasaría si solo analizara la salida y buscara la rama marcada como actual:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Ahora puedo implementar cualquier rama que esté actualizada en mi máquina local desde un solo script de implementación compartido.