← Volver a tutoriales

Automatiza despliegues y pruebas de tu MVP con GitHub Actions

Configura un pipeline de integración continua en GitHub Actions para desplegar tu aplicación y ejecutar pruebas automáticamente cada vez que subas código, ahorrando tiempo y evitando errores manuales.

Como emprendedor o miembro de un equipo de producto, necesitas entregar tu MVP rápidamente y con calidad. GitHub Actions te permite automatizar flujos de trabajo directamente desde tu repositorio de GitHub. En este tutorial, aprenderás a configurar un pipeline que ejecuta pruebas unitarias y despliega tu aplicación a un entorno de producción cada vez que haces un push a la rama principal.

¿Qué necesitas antes?

Debes tener una cuenta en GitHub, un repositorio con código fuente (por ejemplo, una app Node.js o Python) y acceso a la línea de comandos. Asegúrate de que tu proyecto tenga un archivo package.json (Node.js) o requirements.txt (Python) configurado correctamente.

Paso 1: Crear el archivo de flujo de trabajo

En tu repositorio, ve a la pestaña Actions. GitHub sugerirá algunos flujos de trabajo iniciales. Haz clic en Set up this workflow o crea uno personalizado. El archivo debe guardarse en la ruta .github/workflows/ci-cd.yml.

Paso 2: Configurar el entorno de ejecución

Elige un runner virtual. Para la mayoría de los proyectos, ubuntu-latest es una opción segura. Define los disparadores (triggers) usando on:. Por ejemplo, para ejecutar el flujo al hacer push a la rama main, usa:

on:
  push:
    branches: [ main ]

Paso 3: Instalar dependencias y ejecutar pruebas

Agrega un job que instale las dependencias y ejecute las pruebas. Usa el action actions/setup-node para Node.js o actions/setup-python para Python. Ejemplo para Node.js:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm install
      - run: npm test

Paso 4: Despliegue automático

Después de las pruebas exitosas, agrega un segundo job que despliegue tu aplicación. Puedes usar rsync, scp o integrar con servicios como Netlify, Vercell o AWS. Para despliegues en un servidor VPS, usa SSH:

deploy:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /var/www/app
            git pull origin main
            npm install
            npm run build
            systemctl restart app

Paso 5: Configurar secrets

En GitHub, ve a Settings → Secrets and variables → Actions. Agrega secrets como SSH_HOST, SSH_USER y SSH_KEY. Nunca subas credenciales directamente al código.

Ejemplo concreto: App Node.js

Supongamos que tienes una API Express en un repositorio. Crea el archivo .github/workflows/ci-cd.yml con el contenido anterior. Cada vez que hagas push a main, GitHub Actions instalará las dependencias, ejecutará npm test y, si todo sale bien, se conectarás por SSH a tu servidor para actualizar la app.

Errores frecuentes

  1. Secrets no definidos: Verifica que los nombres coincidan exactamente con los usados en el YAML.
  2. Rama incorrecta: Asegúrate de que el disparador (on.push.branches) coincida con la rama que estás usando.
  3. Dependencias desactualizadas: Usa npm ci en lugar de npm install para garantizar consistencia con package-lock.json.
  4. Permisos de SSH: La clave privada debe tener permisos 600 y no estar protegida con frase de contraseña.

Cierre práctico

Con GitHub Actions, reduces la carga operativa y minimizas errores humanos. Empieza con un flujo básico de pruebas y expandiéndelo a despliegues cuando estés listo. Recuerda monitorear los logs en la pestaña Actions de tu repositorio para detectar fallos rápidamente. El siguiente paso es integrar notificaciones por email o Slack usando actions como slackapi/slack-github-action para alertar de fallos en tiempo real.

Fuente sugerida: Documentación oficial de GitHub Actions.

Fuentes para profundizar