🚀 Documentación de Pipelines de GitLab CI/CD para Proyecto Laravel

Este archivo documenta el funcionamiento del pipeline definido en .gitlab-ci.yml para un proyecto Laravel con MySQL. El flujo de integración y entrega continua se organiza en tres etapas principales: generación de documentación, testing y despliegue.


🔁 Etapas del pipeline

stages:
  - pages
  - test
  - deploy

📘 Etapa: pages

Genera documentación del proyecto con MkDocs y la publica como GitLab Pages.

  • Imagen usada: python:3.10
  • Comandos ejecutados: bash pip install mkdocs-material rm -rf public mkdocs build mv site public
  • Artefactos:
  • Carpeta public generada por MkDocs.
  • Rama activadora: main

🧪 Etapa: test

Ejecuta tests del proyecto Laravel en un entorno controlado con base de datos MySQL.

  • Imagen usada: php:8.2
  • Servicio adicional: mysql:8.0 con alias mysql
  • Variables de entorno:
  • MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD
  • Comandos previos (before_script):
  • Instalación de dependencias del sistema y extensiones PHP.
  • Instalación de Composer.
  • Preparación del entorno Laravel (.env, claves, migraciones...).
  • Comando de test: bash php artisan test --debug
  • Rama activadora: staging

🚚 Etapa: deploy

Realiza el despliegue del código en un servidor remoto utilizando SSH.

  • Imagen usada: alpine:latest
  • Dependencias previas: sshpass, openssh
  • Script de despliegue:
  • Conecta vía SSH al servidor remoto usando credenciales.
  • Ejecuta una serie de comandos en el servidor:
    • git pull, composer install, php artisan migrate, npm install, npm run build, y reinicio de nginx.
sshpass -p "$SSH_PASSWORD" ssh -tt -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST "
  git config --global --add safe.directory /var/www/html/Netflox &&
  cd /var/www/html/Netflox &&
  git checkout deploy &&
  git pull &&
  composer install --no-interaction &&
  php artisan migrate --force &&
  npm install &&
  npm run build &&
  systemctl restart nginx"
  • Dependencia explícita: etapa test
  • Rama activadora: deploy

🔐 Variables sensibles

Estas variables deben estar definidas en GitLab CI/CD (Settings > CI/CD > Variables):

  • SSH_USER: Usuario SSH
  • SSH_HOST: IP o dominio del servidor remoto
  • SSH_PASSWORD: Contraseña SSH

✅ Buenas prácticas

  • Mantén las ramas main, staging y deploy actualizadas y protegidas.
  • Usa un entorno separado de pruebas (APP_ENV: testing) para la etapa test.
  • Asegura que .env.ci esté correctamente configurado para el entorno CI.

📌 Requisitos previos

  • Laravel correctamente instalado.
  • MkDocs y mkdocs-material configurados.
  • Acceso SSH al servidor de producción.
  • CI Runner configurado en GitLab.