Saltar al contenido

Lección 19 de 19 · Lectura y práctica

Quiz Final: Evaluación de la Pipeline CI/CD

Tipo de lección: QuizConcepto claveUna pipeline CI/CD completa es un flujo automatizado que integra continuamente cambios de código, ejecuta pruebas y despliega aplicaciones de manera confiable. Imagina una fábrica de.

Del concepto a la práctica

Taller de esta lección

La evaluación final debe comprobar el recorrido completo: evento, preparación, build, tests, artefacto, despliegue y observabilidad. Una pipeline merece confianza cuando sus estados son coherentes y sus evidencias permiten explicar tanto el éxito como la detención.

Ejemplo resuelto

Ante un commit, build produce un artefacto, test pasa y deploy de staging termina correctamente. En una segunda ejecución, un test falla. La respuesta correcta es aceptar solo la primera entrega y conservar la segunda como evidencia de protección del flujo.

Pruébalo

  1. Ordena las etapas de una ejecución real o simulada.

  2. Señala la dependencia que bloquea deploy.

  3. Verifica que el artefacto consumido sea el producido y que el fallo de integridad detenga la entrega según la política definida, no solo emita una advertencia.

  4. Revisa que ningún secret aparezca en logs o archivos.

Comprueba tu resultado

Error frecuente: considerar aprobada la pipeline porque el último job terminó verde aunque una validación anterior falló. Corrección: revisa todos los jobs y sus dependencias.

Ejercicio: evalúa un flujo con build verde, test rojo y deploy omitido. Resultado esperado: calificas la ejecución como no entregable, identificas test como causa y explicas que la omisión de deploy es una protección, no un fallo adicional.

Secuencia de código, imagen de contenedor, pruebas, registro y despliegue de instancias idénticas.
CursaloMapa de práctica
Del código al despliegue

El código se empaqueta en una imagen y se prueba antes de publicarlo. Esa misma imagen se guarda en un registro y se usa en el despliegue. Comprobar la salud de las instancias permite detectar un fallo sin reconstruir el artefacto.

Ver la infografía en tamaño completo ↗

Tipo de lección: Quiz

Concepto clave

Una pipeline CI/CD completa es un flujo automatizado que integra continuamente cambios de código, ejecuta pruebas y despliega aplicaciones de manera confiable. Imagina una fábrica de automóviles: cada pieza (código) pasa por una línea de ensamblaje donde se verifica su calidad (tests), se ensambla (build) y finalmente se entrega al cliente (deploy). En GitHub Actions, esto se logra mediante workflows que definen jobs y steps en archivos YAML.

La clave está en la automatización end-to-end: desde que un desarrollador hace un push hasta que la aplicación está en producción. Esto reduce errores humanos, acelera el tiempo de entrega y mejora la calidad del software. Para aplicaciones modernas, una pipeline típica incluye: build, test de unidad/integración, análisis de código, y deploy a entornos como staging y producción.

Cómo funciona en la práctica

Veamos un ejemplo paso a paso para una aplicación Node.js con despliegue a AWS:

  1. Un desarrollador hace un push a la rama main en GitHub.
  2. GitHub Actions detecta el evento y ejecuta el workflow definido en .github/workflows/ci-cd.yml.
  3. El workflow inicia un job de build que instala dependencias y compila la aplicación.
  4. Luego, un job de test ejecuta pruebas unitarias y de integración.
  5. Si los tests pasan, un job de deploy despliega la aplicación a un entorno de staging usando AWS CLI.
  6. Finalmente, tras una aprobación manual, se despliega a producción.

Este flujo asegura que solo el código probado y funcional llegue a producción, similar a cómo un control de calidad en una fábrica evita productos defectuosos.

Codigo en accion

Aquí tienes un ejemplo funcional de un workflow básico para una app Node.js:

name: CI/CD Pipeline

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Run tests
        run: npm test
      
      - name: Build application
        run: npm run build

Ahora, mejoremos este código añadiendo despliegue a AWS S3 (antes y después):

Antes: Solo build y test.

Después: Añadimos deploy.

name: CI/CD Pipeline con Deploy

on:
  push:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Run tests
        run: npm test
      
      - name: Build application
        run: npm run build
      
      - name: Upload build artifacts
        uses: actions/upload-artifact@v3
        with:
          name: build-output
          path: ./dist
  
  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - name: Download build artifacts
        uses: actions/download-artifact@v3
        with:
          name: build-output
      
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      
      - name: Deploy to S3
        run: aws s3 sync ./ s3://my-app-bucket/ --delete

Errores comunes

  • No usar secrets de forma segura: Exponer claves API en el código. Solución: Usa GitHub Secrets y referéncialas con ${{ secrets.NOMBRE }}.
  • Falta de manejo de fallos: Si un step falla, el workflow continúa. Solución: Usa continue-on-error: false o maneja errores con condiciones.
  • Jobs sin dependencias claras: Ejecutar deploy antes de tests. Solución: Usa needs para definir dependencias entre jobs.
  • No optimizar tiempo de ejecución: Jobs lentos que retrasan la pipeline. Solución: Usa caching con actions/cache y paraleliza jobs cuando sea posible.
  • Ignorar el entorno: Asumir que el entorno de CI es igual al local. Solución: Usa contenedores Docker o matrix strategies para pruebas en múltiples entornos.

Checklist de dominio

  • ¿Puedes crear un workflow que se active en push y pull requests?
  • ¿Sabes configurar jobs con dependencias usando needs?
  • ¿Manejas secrets de GitHub de forma segura en tus workflows?
  • ¿Implementas caching para acelerar builds recurrentes?
  • ¿Despliegas a un entorno cloud (ej. AWS, Azure) automáticamente?
  • ¿Incluyes steps para rollback en caso de fallo en deploy?
  • ¿Monitorizas el estado de tus pipelines con notificaciones?

Optimiza y Extiende una Pipeline CI/CD Existente

En este ejercicio, mejorarás una pipeline CI/CD básica para una aplicación web. Sigue estos pasos:

  1. Clona el repositorio de ejemplo desde https://github.com/example/ci-cd-demo (usa un fork si es necesario).
  2. Revisa el archivo .github/workflows/pipeline.yml: actualmente solo hace build y test.
  3. Añade un job de deploy que:
    • Dependa del job de build-and-test.
    • Se ejecute solo en la rama main.
    • Despliegue los archivos build a GitHub Pages (usa la acción peaceiris/actions-gh-pages).
  4. Implementa caching para las dependencias de Node.js usando actions/cache.
  5. Añade un step que envíe una notificación a Slack si el deploy falla (simula con un webhook).
  6. Prueba tu pipeline haciendo un push a tu rama y verifica que todos los jobs pasen.

Entrega un enlace a tu repositorio con los cambios y una captura del workflow ejecutado.

Pistas
  • Usa la documentación de GitHub Actions para encontrar acciones específicas como peaceiris/actions-gh-pages.
  • Recuerda configurar secrets en tu repositorio para claves de API o webhooks.
  • Prueba cada cambio en una rama feature antes de merge a main.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con GitHub Actions para CI/CD: Automatización de Builds, Tests y Deploys

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.