Sylius: Estrategia de Continuous Delivery (Deployer + Git)

¿Qué es el Continuous Delivery? Según Wikipedia es un enfoque de la ingeniería en el que los equipos de desarrollo producen software en ciclos cortos, asegurando que el software puede ser liberado en cualquier momento de forma confiable. Apunta a la construcción, testeo y liberación del software de forma mas rápida y mas frecuente.

En otras palabras, es desarrollar en equipo o en solitario, guardando cambios en algún control de versiones, en este caso Git y hacer deploys desde ramas específicas para los diferentes entornos de desarrollo, por ejemplo Staging y Producción.

Para esta guía utilizaremos un solo entorno de desarrollo, que será producción.

Lo primero, es crear un repositorio en Gihub, Gitlab o en donde les parezca mejor. En mi caso y para este ejercicio utilizaremos Github.

Descargamos e instalamos Sylius en nuestro equipo (local). Por aquí ya tengo un tutorial explicando como hacerlo por si necesitas leerlo, te lo dejo acá. (Instalar Sylius v1.0.x en un entorno local). Ahora entramos al directorio en donde creamos nuestra instancia y ejecutamos:

Lo que hicimos, es iniciar el repositorio en nuestro local, definir cual será el repositorio en Github, agregar todo lo que contiene el dir, hacer el commit y por último empujar los cambios.

A continuación, entramos a nuestro servidor sea cual sea y crearemos una base de datos, no entraré en detalles, porque hay muchísimos ambientes diferentes y me imagino que ya debes saber como crear bases de datos en tus servidores 🙂

Imaginemos, que quedamos con lo siguientes datos:

  • Nombre: sylius
  • Usuario: sqlmaster
  • Contraseña: 123qwe

Con esta información, editamos la configuración de Sylius. Abrimos el archivo app/config/parameters.yml y editamos, lo importante es dejar nuestros datos de conexión correctos:

Ahora es momento de crear un archivo de parámetros para nuestro dev en app/config/, lo nombraremos:
parameters_dev.yml. En este archivo, dejamos los datos de nuestra base de datos local.

Para finalizar esta etapa, editamos app/config/config_dev.yml y agregamos el recurso que creamos en el paso anterior. Además, declaramos los datos de acceso de nuestra base de datos local.

Ahora vamos a Deployer. Con esta herramienta, podremos hacer deploys directamente desde cualquier rama de nuestro repositorio a alguno de los ambientes que tengamos, por ejemplo producción, staging, beta etc. Para este ejemplo solo usamos producción, pero después de terminar, será mucho más sencillo que puedan hacerlo exactamente adaptado a sus necesidades.

Se puede instalar deployer de dos formas, una global, que es la que a mi me ha funcionado mejor y una es por proyecto, les dejo las dos opciones.

Globalmente:

Para instalarlo dentro del proyecto:

Una vez instalado, iniciamos deployer:

Les comparto unas pantallas de lo que yo utilicé (en el primer paso, seleccioné symfony 3):


Es turno de editar/crear el archivo ~/.ssh/config y meter nuestra configuración de conexión ssh:

Antes que movamos algo en deploy.php, crearemos un fichero llamado hosts.yml en la raíz del proyecto, esto para tener mas limpio todo y sea mas clara su lectura.

 

Esto nos crea un archivo en la raíz del proyecto, llamado deploy.php vamos a editarlo y dejamos algo así (Este ejemplo es el que a mi me ha funcionado, puedes jugar con el fichero y sus configuraciones). He dejado en negritas el archivo hosts.yml que creamos previo,

¡Todo esta listo! Lo que falta es hacer el deploy, solo que antes de volar, debemos ejecutar primero la tarea de shared, esto para subir el archivo parameters.yml y demás al servidor.

Ahora si, hagamos un deploy a prod (producción):

Solución de problemas.
Les comparto un par de problemas que tuve y como los solucioné. Es probable que a ustedes no les pase de la misma forma:

Si le da un error de allow_url_open, lo que toca hacer, es editar el php.ini en nuestro servidor y dejarlo activado:

Al hacer el deploy da error: stdin: is not a tty la solución es, entrar por ssh, y editar el .bashrc: