Tecnología que te entiende
CI/CD con GitHub Actions: automatiza tus deployments
Cloud

CI/CD con GitHub Actions: automatiza tus deployments

08 May 2026 2 min de lectura 847 vistas

CI/CD automatiza la prueba y el despliegue de tu código. Con GitHub Actions, cada push puede disparar pruebas, construir una imagen Docker y deployar a producción — sin intervención manual. Esta guía te muestra cómo configurarlo desde cero.

¿Qué es CI/CD?

CI (Continuous Integration) — cada cambio de código se integra, compila y prueba automáticamente. Detecta errores antes de que lleguen a producción.

CD (Continuous Delivery/Deployment) — el código que pasa las pruebas se despliega automáticamente al ambiente de staging o producción.

GitHub Actions: conceptos

Concepto Descripción
Workflow Proceso automatizado definido en un archivo YAML en .github/workflows/
Trigger (on) Evento que dispara el workflow: push, pull_request, schedule, manual
Job Grupo de pasos que corren en la misma máquina virtual (runner)
Step Un comando o Action individual dentro de un Job
Action Paso reutilizable del marketplace. Ej: actions/checkout, docker/build-push-action

Pipeline básico: pruebas PHP

# .github/workflows/ci.yml

name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      # 1. Descargar el código
      - name: Checkout
        uses: actions/checkout@v4

      # 2. Configurar PHP
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.3'
          extensions: pdo, pdo_mysql, mbstring

      # 3. Instalar dependencias
      - name: Install dependencies
        run: composer install --no-progress --no-interaction

      # 4. Ejecutar pruebas
      - name: Run tests
        run: vendor/bin/phpunit --colors=always

Pipeline completo: CI + Deploy

# .github/workflows/deploy.yml

name: Build and Deploy

on:
  push:
    branches: [main]

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push Docker image
        uses: docker/build-push-action@v5
        with:
          push: true
          tags: miusuario/mi-app:${{ github.sha }},miusuario/mi-app:latest

  deploy:
    needs: build-and-push
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to server via SSH
        uses: appleboy/ssh-action@v1
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            docker pull miusuario/mi-app:latest
            docker stop mi-app || true
            docker rm mi-app || true
            docker run -d --name mi-app \
              -p 80:80 \
              --restart always \
              miusuario/mi-app:latest

Secretos y variables

# Configurar en GitHub:
# Settings → Secrets and variables → Actions → New repository secret

# En el workflow se acceden como:
${{ secrets.NOMBRE_DEL_SECRETO }}

# Variables de entorno normales (no secretos):
env:
  APP_ENV: production
  DB_HOST: db.ejemplo.com
💡 Free tier de GitHub Actions: 2,000 minutos/mes para repositorios privados. Ilimitado para repositorios públicos. Para proyectos educativos o de open source, es completamente gratuito.
✅ Buenas prácticas: Un workflow por propósito (ci.yml, deploy.yml, security.yml) · Usar Actions del marketplace verificadas · Siempre pinear versiones de Actions con SHA para seguridad · Secrets para credenciales, nunca en el código · Cache de dependencias para builds más rápidos
"CI/CD no es un lujo — es la diferencia entre deployar con miedo el viernes por la tarde o con confianza cualquier día."