Automatización de tareas de deploy en Git con el fichero .cpanel.yml

La nueva interfaz y sistema de control de repositorios Git no solo incluye cambios visuales para hacer más sencilla la gestión, también opciones internas para crear estrategias de puesta en producción de nuestros cambios, conocido como deploy.

Para un caso ejemplo detallado te recomendamos consultes nuestro manual "configurar deploy automático desde GitHub a cPanel - Caso ejemplo".

El fichero .cpanel.yml

Se trata de un fichero en formato YAML, en el cual por medio de una sintaxis sencilla podemos establecer las acciones que se realizarán al hacer un deploy de cambios en nuestro entorno en producción, esto puede ser útil para ejecutar tareas específicas, realizar copia de ficheros a un directorio público, y en general cualquiera acción que puedas programar por medio de un comando o script.

El fichero .cpanel.yml debe ser creado dentro del repositorio en el que quieras usarlo, debe tener el nombre tal cual, incluido el punto delante y su contenido seguiría la siguiente sintaxis:

---
deployment:
  tasks:
    - export DEPLOYPATH=/home/user/public_html/
    - /bin/cp index.html $DEPLOYPATH
    - /bin/cp style.css $DEPLOYPATH

En este ejemplo las tres primeras líneas serían la base, por un lado abrimos el formato con ---, añadimos deployment: y en un nivel inferior tasks:, a continuación definimos las acciones que se deberán realizar.

En este ejemplo hemos creado una constante llamada $DEPLOYPATH cuyo valor es el directorio donde queremos hacer algunas acciones, la creamos para evitar definir el directorio en las siguientes acciones pudiendo usar simplemente la constante.

Tras esto ejecutamos /bin/cp, este comando copia los ficheros index.html y style.css al directorio público definido en la constante, es un ejemplo muy simple donde usamos los ficheros modificados de nuestro repositorio para copiarlos a un directorio público y que la web se actualice con los cambios efectuados.

Que acciones realices dependerá de tu estrategia de puesta en producción, simplemente sigue la misma sintaxis y podrás realizar tantas acciones como necesites.

Push deployment

Imagina que dispones de un repositorio local conectado con el repositorio remoto alojado en tu cuenta cPanel, si ejecutas git push para enviar los cambios al repositorio remoto, se producirá la ejecución de un hook, que es básicamente una acción automática, de forma que si dispones de un fichero .cpanel.yml con una estrategia de deploy definida, este hook lo ejecutará automáticamente en cada push que realices.

Pull deployment

Si en cambio tomamos las modificaciones por medio de pull, la acción es similar, se ejecuta un hook que a su vez ejecuta la estrategia de deploy definida en el fichero .cpanel.yml.

Por ejemplo, tenemos nuestro repositorio local conectado con GitHub y hacemos un push a Github para aplicar nuestros cambios.

A su vez el repositorio de cPanel se encuentra clonado desde el alojado en Github, por lo que podemos acceder a la interfaz de gestión de Git y hacer "Update from remote", esto hará que se tomen los cambios y a su vez se ejecute nuestra estrategia de deploy, aplicando en consecuencia las acciones del fichero .cpanel.yml de existir.

Deploy por medio de cronjob

La API de cPanel nos permite como opción adicional el poder definir una tarea automática en el intervalo que deseemos, y que ejecute nuestra tarea de deploy, para ello simplemente tendríamos que configurar la tarea desde cPanel con el comando:

/usr/local/cpanel/bin/uapi VersionControlDeployment create repository_root=/home/user/example

Teniendo en cuenta que /home/user/example sería la ruta a nuestro repositorio.