Comparte en Facebook Twitter Google+

Banner Integración continua en Laravel usando GitLab

Según Martin Fowler, la integración continua (CI) es una práctica de desarrollo de software donde los miembros de un equipo integran su trabajo frecuentemente. Cada integración es verificada mediante la construcción automática del software (incluyendo la ejecución de las pruebas automatizadas) para detectar la detección temprana de errores lo más pronto posible. Aún cuando esto pareciera difícil de implementar en un proyecto de Laravel, no lo es. En este tutorial aprenderás a configurar Gitlab CI para que cada vez que se hagan nuevas integraciones en el código se ejecuten las pruebas escritas con PHPUnit en Laravel.

Gitlab, según su visión, es una plataforma para dar soporte al ciclo completo de desarrollo de software. Entre las características o servicios que ofrece se encuentra la integración continua (Gitlab CI), es decir, cada vez que integremos nuevo código al repositorio se ejecutarán automáticamente las pruebas que hemos escrito. Veamos a continuación los pasos a seguir:

Requisitos

Necesitas tener una cuenta en Gitlab. Puedes registrarte de manera gratuita en https://gitlab.com/users/sign_in. Con ella podrás ejecutar Gitlab CI hasta 2000 minutos al mes.

Adicionalmente, un proyecto que contenga pruebas escritas. Para efectos de este tutorial usaremos el proyecto desarrollado en el curso de Laravel desde cero.

Configuración

Para hacer que Gitlab CI reconozca nuestras pruebas y las ejecute debemos configurar nuestro proyecto, agregando algunos archivos:

Archivo .gitlab-ci.yml

.gitlab-ci.yml es un archivo de configuración YAML que debes crear en la raíz de tu proyecto. Si este archivo está presente se activará la integración continua en Gitlab. Es decir, cada vez que subas un commit al repositorio, Gitlab se encargará de revisar que este archivo se encuentre y, de ser así, ejecutará en Gitlab Runner el pipeline (grupos de trabajos) definidos en él.

No es necesario entender esto a profundidad para iniciarte en la implementación de la integración continua de tu proyecto. Lo importante es comprender que se usa Docker para ejecutar el código del proyecto en un entorno configurado exactamente como el de producción. De esta manera se garantiza que las pruebas verificarán que todo esté funcionando correctamente antes de que pongas tu código en producción.

Si deseas aprender sobre Docker y cómo trabajar con él puedes hacerlo con nuestro Curso de Docker.

En el archivo .gitlab-ci.yml se definen los pasos a seguir para la instalación y ejecución de las pruebas:

Analicemos un poco este archivo:

En image le indicamos cuál imagen de Docker usará Gitlab para ejecutar las pruebas. Puedes usar una creada por ti o alguna ya preparada para un proyecto de Laravel. En este caso he usado chilio/laravel-dusk-ci.

En services configuramos que vamos a usar a el servicio mysql de la imagen Docker en su versión 5.7 para ejecutar las pruebas que usan la base de datos. De la misma forma definimos las variables necesarias para conectarse a la base de batos, es importante que MYSQL_DATABASE coincida con lo que hayamos configurado en el archivo phpunit.xml para la base de datos de pruebas.

Con la opción de cache podemos establecer cuales archivos y carpetas serán guardarán en cache.

En before_script definimos el conjunto de comandos que se ejecutarán antes de que las pruebas sean ejecutadas. Para nuestro proyecto de Laravel necesitamos instalar las dependencias de la aplicación y realizar las configuraciones necesarias para que la app funcione correctamente.

test es el job o trabajo que se va a ejecutar en Gitlab Runner y los comandos están definidos en scripts.

Si quieres conocer un poco más de este archivo visita su documentación en https://gitlab.com/help/ci/yaml/README

Crea un archivo .env.gitlab

Es recomendable preparar un archivo de configuración .env específico para las pruebas, el cual puede contener:

Lo importante de este archivo es crear las credenciales que usará Gitlab CI para conectarse a la base de datos, en caso de trabajar con ella en las pruebas, dependiendo cómo tengas configurado el archivo phpunit.xml pues deben coincidir. Además, debes establecer que la variable APP_ENV sea testing.

Puedes repasar los pasos para preparar una base de datos de prueba con la lección: Configuración y uso de base de datos en el entorno de pruebas automatizadas con Laravel y PHPUnit

Ejecutando las pruebas en Gitlab CI

Ahora procede a hacer commit de los dos archivos y git push para subir los cambios al repositorio.  De manera automática cada vez que subas una nueva rama o commit las pruebas ejecutarán según las indicaciones que le hemos dado en el archivo .gitlab-ci.yml.

git push to Gitlab

Puedes ver estado del pipeline desde la opción CI/CD -> Pipelines o directamente desde el enlace https://gitlab.com/TU-USUARIO/TU-PROYECTO/pipelines verás algo como:

Pipelines in Gitlab CI

Si quiere ver de manera detallada cómo se está ejecutando o si las pruebas fallaron puedes ir a https://gitlab.com/TU-USUARIO/TU-PROYECTO/-/jobs

jobs en Gitlab CI

En caso de fallo podemos ver en detalle cuáles pruebas fallaron y porqué.

Detalles de la ejecución del job en gitlab CI

Además de inspeccionar (y celebrar) cuando las pruebas pasen:

Detalle cuando pasan las pruebas en Gitlab CI

Si deseas revisar el proyecto en Gitlab puedes verlo en https://gitlab.com/clemir/laravel_gitlab_ci

Desarrollar usando integración continua en nuestros proyectos es realmente beneficioso pues no necesitarías dedicarle mucho tiempo a probar el código cada vez que integras una nueva funcionalidad. Este tiempo se lo puedes dedicar a escribir más pruebas y Gitlab se encargaría de ejecutarlas. Además es bastante útil cuando se trabaja en equipos de desarrollo donde sus integrantes pueden no estar al tanto de todos los cambios y características del proyecto, pero las pruebas sí.

¿Aún no escribes pruebas para tus proyectos? No dejes ver nuestro curso Crea un Panel de Control con Laravel donde aprenderás todo lo necesario para llevar el desarrollo de tus proyectos en Laravel a otro nivel.

Si tienes algún comentario o duda eres bienvenido a dejarlo en los comentarios. No dejes de suscribirte a nuestro newsletter:

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Material relacionado

 

Aprende desarrollo web con Laravel, Vue.js y mucho más a partir de 9 USD al mes: ver planes.