Manual sobre instalación y uso de drush release-patch para generación de paquetes entregables
El comando de drush “release-patch” es utilizado para la generación de paquetes entregables, apoyándose en git como sistema de control de versiones. Este comando se ejecuta en un entorno que se encuentre versionado para generar un paquete de código que contenga los archivos modificados entre los dos tags que se indiquen. Además, si se ha borrado algún archivo, el paquete contendrá un script que, ejecutándolo desde bash, borra los archivos que se hayan eliminado en los commits contenidos entre estos tags.
Utilizamos este comando de Drush, en general, en estas condiciones:
-
Contamos con el código versionado en nuestros entornos de desarrollo local o de integración.
-
No tenemos acceso a entornos superiores (preproducción / producción) o, a pesar de tener acceso, estos entornos no se encuentran versionados.
-
Es necesario hacer un despliegue en uno de estos entornos.
-
Utilizamos tags cuando se realiza una entrega.
Requisitos generales y consideraciones previas
-
Tener instalado drush (> 5.x). Puedes ver diferentes formas de instalarlo en este enlace
-
Instalación del comando drush release-patch de manera global, indicado en el siguiente apartado: “Instalación del comando”.
-
Tener creados los tags sobre los que se hará la diferencia y conocer sus nombres.
Instalación del comando
En primer lugar deberemos instalar este comando de Drush de manera global. Para ello descargamos el código de su repositorio oficial
Podemos obtener el código ejecutando:
git clone git://git.drupal.org/project/drush_release.git
mkdir ~/.drush/commands
mv drush_release/drush_release.drush.inc ~/.drush/commands/
Tras esto, limpiaremos la caché de drush para que detecte el nuevo comando.
drush cc drush
Comprobamos que la instalación ha sido correcta ejecutando el comando en sí:
drush release-patch
La instalación habrá sido correcta si la salida de este comando indica que faltan argumentos (missing argument 1 for drush_drush_release...). En otro caso, deberemos revisar el proceso de instalación.
Uso del comando
# Accedemos a la raíz del proyecto en uno de los entornos versionados
cd /carpeta/raiz/del/proyecto
# Ejecutamos el comando de drush. Se generará una carpeta
# con el nombre proporcionado en el último argumento
drush release-patch tag_inicial tag_final nombre_carpeta_paquete
# Revisamos la carpeta para comprobar su contenido
tree nombre_carpeta_paquete
# La carpeta se ha generado dentro del repositorio, por lo que
# conviene sacarla fuera para trabajar con ella
mv nombre_carpeta_paquete /otra/carpeta/fuera/del/repositorio
cd /otra/carpeta/fuera/del/repositorio/nombre_carpeta_paquete
# Comprimimos el paquete para enviarlo. Suele indicarse la fecha de la entrega
tar -czvf package_name_DDMMYYYY.tar.gz .
# Obtenemos el hash md5 del paquete. Generalmente lo enviaremos junto al
# paquete para que se pueda comprobar que no haya pérdida de información.
md5sum package_name_DDMMYYYY.tar.gz
Puede ocurrir que entre el tag_inicial y el tag_final, además de inclusiones y modificaciones de archivos, también haya archivos que necesiten ser eliminados. Esta circunstancia también está cubierta por el comando, que genera un archivo bash para ello.
Este archivo se llamará nombre_carpeta_paquete.sh (si seguimos el ejemplo anterior) dentro de la carpeta /scripts. Al ejecutar este script en bash se borrarán todos los archivos que no debieran estar en el proyecto según el tag_final.
Por ello, tras el despliegue del paquete en el entorno adecuado, si el paquete contara con el archivo nombre_carpeta_paquete.sh, deberemos ejecutarlo en el entorno en el que se ha desplegado:
# Accedemos a la raíz del proyecto en uno de los entornos versionados
cd /carpeta/raiz/del/proyecto
# Ejecutamos el archivo bash
bash scripts/nombre_carpeta_paquete.sh
# En este punto comprobaremos que los archivos se han borrado correctamente.
# Si todo ha ido bien, borramos el script de bash, ya que no será necesario.
rm scripts/nombre_carpeta_paquete.sh
Otra circunstancia que puede ocurrir es que no contemos con los tag_inicial y tag_final en git. Esta no es la situación ideal para el uso de drush release-patch, pero podemos crearlos a pesar de contar con un código más avanzado colocándonos en el commit adecuado a través de git:
# Accedemos a la raíz del proyecto en uno de los entornos versionados
cd /carpeta/raiz/del/proyecto
# Utilizaremos git log para localizar los hash de los commits inicial y final
git log
commit ae16101d6b9d423a0dc7dd71516a8d3417a0ed73
...
commit c64a3f7d7b1b85b831271e5b5a2f8fffcb2cb41c
...
# Nos colocaremos en el punto tras el commit que queramos que sea inicial
git checkout c64a3f7d7b1b85b831271e5b5a2f8fffcb2cb41c
# Y crearemos un tag para él
git tag tag_inicial
# Mismo procedimiento para el tag final (NOTA: el commit inicial, lógicamente, debe ser anterior al commit final)
git checkout ae16101d6b9d423a0dc7dd71516a8d3417a0ed73
git tag tag_final
# Y dejaremos el puntero de git en un punto estable (i. e.: rama master)
git checkout master