Un workflow sencillo con git

Uno de los grandes quebraderos de cabeza del desarrollo web es el control del ciclo de vida. Cuando la cosa se pone seria, muchos desarrolladores, muchos cambios etcétera, se hace imprescindible alguna metodología compleja tipo integración continua. Sin embargo, en la mayoría de los casos es suficiente con tener un poco de orden y unos procedimientos claros.

Gráfico GitHub de los commits de Voota

Gráfico GitHub de los commits de Voota

Es, sin duda, el gestor de versiones el principal aliado para gestionar correctamente el ciclo de vida. Este es el workflow que utilizamos en Voota con git:

  1. Cada desarrollador “sube” sus cambios al repositorio de software cada vez que realiza un desarrollo. Para ello se utiliza la rama “master” en git, que es, por decirlo de alguna manera, la arteria principal del desarrollo. Es el proyecto vivo que se irá actualizando diariamente.
    git commit -am “Resuelto el ticket #nnn”
    git push
  2. Cuando hay un “change set” razonable, o lo que es lo mismo, ya se tienen unos cuantos cambios que queremos que sean revisados, se envían al servidor de pruebas (“stage”). En el servidor de pruebas hay una copia (“clone”) exacta del código fuente, pero que, para que funcione en modo test, se realizan algunos cambios básicos. En el caso de Voota se copian los scripts de php que ponen a Symfony en modo test (en realidad esto sólo se hace una vez al instalar el servidor):
    mv frontend_test.php a index.php
    mv backend_test.php a backend.php

    A continuación se utiliza la magia de git. Se actualizan los fuentes con rebase. La gracia de “rebase” es que re-aplica las acciones que se han realizado (como los mv de arriba) sobre la copia local después de actualizar los cambios desde el repositorio. De este modo no es necesario volver a hacer las modificaciones.

    git pull –rebase
  3. Para el paso a producción hace falta un poco más de control. Se debe implementar un mecanismo que permita al desarrollador retomar el código en el estado exacto que está en producción. Este es el uso que damos a las etiquetas (tags) de git:
    git tag milestone1_8_5
    git push –tags

    Esto creará una foto del proyecto en su estado actual, con todo el conjunto de fuentes agrupado bajo el nombre de etiqueta milestone1_8_5. Como curiosidad, se pueden ver aquí las etiquetas que tenemos en el git de Voota.
    El resto es similar al entorno de pruebas, con la diferencia que no se actualizarán los programas de la rama “master” como antes, si no que se hará de la etiqueta recién creada:

    git pull –rebase origin refs/tags/milestone1_8_5

Alguien que conozco diría “Todo perfecto. Invitar a cañas” 😉 … pero, ¿que pasa si se sigue desarrollando en la rama “master” y se detecta un error importante en producción?¿a alguien le ha pasado alguna vez? Nada, se arregla y listo. Ahí va el procedimiento:

# Por si algún otro desarrollador ya lo ha hecho antes, se actualizan las etiquetas desde el repositorio:
git fetch –tags

# Se crea una rama basada en la etiqueta de la versión en producción:
git checkout milestone1_8_5 -b b_milestone1_8_5

#####################################
# Se hacen cosas: Arreglar el bug por ejemplo 😉
#####################################

# Se suben los cambios a git:
git commit -am ‘se explica lo que se ha hecho un poco’

# Se actualiza la etiqueta:
git tag -f milestone1_8_5

# Se “empuja” al repositorio
git push –tags

# Volvemos a la rama principal en la copia local
git checkout master

# Se aplica el parche a la versión en desarrollo para que no se pierda en la siguiente release
git merge b_milestone1_8_5

# Se borra la rama creada para la ocasión
git branch -d b_milestone1_8_5

Ahora en el servidor de producción se actualiza la versión “tirando” de la etiqueta:

git pull –rebase origin refs/tags/milestone1_8_5

Trabajar con git tiene muchas ventajas y una de ellas es hacer las cosas fáciles y rápidas. Creo que este es un buen ejemplo.

Anuncios

Etiquetas: , ,

Una respuesta to “Un workflow sencillo con git”

  1. Git Bookmarks Says:

    […] https://sergioviteri.com/2010/06/04/un-workflow-sencillo-con-git/ […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: