Tema 24 · CI/CD & DevOps

Automatización y Despliegue Continuo con GitHub Actions

Aprende qué es la Integración y Despliegue Continuo (CI/CD), cómo funciona el motor de GitHub Actions con archivos YAML en .github/workflows y cómo automatizar el despliegue a servidores VPS en producción.

¿Qué es CI/CD y por qué revoluciona el desarrollo?

En la era moderna del desarrollo web, los programadores ya no suben archivos manualmente por FileZilla o FTP. En su lugar, utilizamos Integración Continua (CI) y Despliegue Continuo (CD):

Pilar Siglas ¿Qué automatiza?
Integración Continua CI (Continuous Integration) Cada vez que un desarrollador hace git push o abre un Pull Request, un servidor virtual ejecuta automáticamente las pruebas de código, valida la sintaxis y verifica que nada se haya roto.
Despliegue Continuo CD (Continuous Deployment) Si las pruebas pasan y el código llega a la rama main, el sistema se conecta automáticamente por SSH al servidor de producción (como el VPS de Kilopolis) y despliega la nueva versión en segundos sin intervención humana.

La Estructura de GitHub Actions

GitHub Actions funciona mediante archivos de configuración en formato YAML (.yml) guardados dentro de la carpeta obligatoria .github/workflows/ de tu repositorio:

  • Disparador (Trigger / on): Define qué evento inicia la automatización (ej: push a la rama main).
  • Trabajo (Job): La máquina virtual (Runner de Ubuntu) donde se ejecutarán las instrucciones.
  • Secretos (Secrets): Variables sensibles protegidas (como SSH_HOST, SSH_KEY y contraseñas) guardadas en GitHub de forma cifrada que nunca quedan expuestas en el código fuente.
  • Pasos (Steps): La lista secuencial de comandos que se ejecutan (descargar código, conectar por SSH, sincronizar base de datos y recargar PHP-FPM).

⚡ El Flujo Real de Despliegue Automatizado de Kilopolis

El archivo de configuración YAML real utilizado en Kilopolis (.github/workflows/deploy.yml) para conectar por SSH al VPS OVH y desplegar la aplicación en segundos:

.github/workflows/deploy.yml
Solo lectura
# .github/workflows/deploy.yml
name: Deploy a Produccion Kilopolis

# 1. Disparar solo cuando haya un push a la rama main:
on:
  push:
    branches:
      - main

jobs:
  deploy:
    name: Despliegue en VPS OVH
    runs-on: ubuntu-latest

    steps:
      - name: Descargar codigo del repositorio
        uses: actions/checkout@v4

      - name: Conectar por SSH y actualizar VPS
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          port: ${{ secrets.SSH_PORT }}
          script: |
            cd /var/www/kilopolis.com
            
            # 1. Traer los cambios mas recientes de main
            git fetch origin main
            git reset --hard origin/main
            
            # 2. Ejecutar migraciones de base de datos
            php database/auto_migrate.php
            
            # 3. Asegurar permisos de storage
            chmod -R 775 storage/
            chown -R www-data:www-data storage/
            
            # 4. Vaciar OPcache y recargar PHP-FPM
            sudo systemctl reload php8.3-fpm
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de Git & GitHub Profesional y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.