Saltar al contenido

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

Quiz: Fundamentos de GitHub Actions

Tipo de lección: QuizConcepto claveGitHub Actions es una plataforma de integración continua y despliegue continuo (CI/CD) que permite automatizar flujos de trabajo directamente en tu repositorio de GitHub. Imagina que tienes un.

Del concepto a la práctica

Taller de esta lección

Este repaso debe comprobar relaciones, no definiciones aisladas. Si un evento inicia el workflow, cada job se ejecuta en un runner y cada job contiene steps, entonces un fallo puede localizarse observando cuál de esas capas no produjo el resultado esperado.

Ejemplo resuelto

Caso: un workflow se inicia con push, pero el log muestra que el comando falló. La respuesta correcta es que el evento sí funcionó; la investigación debe continuar en el step y en su código de salida. No corresponde cambiar el disparador.

Pruébalo

  1. Lee una ejecución correcta y anota evento, job, runner y step.

  2. Lee una ejecución fallida y señala la primera línea con error.

  3. Clasifica cada elemento como workflow, job, step o action.

  4. Explica qué cambio mínimo corregiría el fallo observado.

Comprueba tu resultado

Error frecuente: llamar “job” a cada comando individual. Corrección: identifica el bloque que agrupa comandos y separa sus steps.

Ejercicio: responde qué ocurre si el primer step devuelve código uno. Resultado esperado: el job queda fallido y los steps posteriores normales se omiten por la condición de éxito implícita; un step con if: always() puede ejecutar limpieza o guardar diagnóstico, pero no vuelve válida la ejecución; la explicación menciona el código de salida.

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

GitHub Actions es una plataforma de integración continua y despliegue continuo (CI/CD) que permite automatizar flujos de trabajo directamente en tu repositorio de GitHub. Imagina que tienes un equipo de asistentes virtuales que revisan cada cambio en tu código, ejecutan pruebas, construyen tu aplicación y la despliegan automáticamente cuando todo está correcto. Esto elimina tareas manuales repetitivas y reduce errores humanos.

La analogía del mundo real sería una fábrica automatizada: cuando llega nueva materia prima (código nuevo), una línea de ensamblaje (workflow) se activa automáticamente para probar, empaquetar y enviar el producto terminado. Los componentes principales son workflows (flujos de trabajo definidos en archivos YAML), jobs (tareas dentro del workflow que se ejecutan en runners), y actions (componentes reutilizables que realizan operaciones específicas).

Cómo funciona en la práctica

Cuando configuras GitHub Actions, creas un archivo YAML en la carpeta .github/workflows de tu repositorio. Este archivo define qué debe ocurrir cuando se disparan ciertos eventos, como un push a la rama main o la creación de un pull request. El proceso paso a paso es:

  1. Un evento (como un push) activa el workflow
  2. GitHub busca runners disponibles (máquinas virtuales o self-hosted)
  3. Se ejecutan los jobs en paralelo o secuencialmente según la configuración
  4. Cada job ejecuta steps que pueden usar actions predefinidas o comandos personalizados
  5. Los resultados se muestran en la pestaña Actions de tu repositorio

Código en acción

Este es un ejemplo básico de workflow que se ejecuta en cada push a main:

name: CI Pipeline

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout código
      uses: actions/checkout@v3
      
    - name: Configurar Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        
    - name: Instalar dependencias
      run: npm ci
      
    - name: Ejecutar tests
      run: npm test

Ahora, mejorémoslo agregando cache para acelerar builds:

name: CI Pipeline Optimizado

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

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout código
      uses: actions/checkout@v3
      
    - name: Configurar Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '18'
        
    - name: Cache node_modules
      uses: actions/cache@v3
      with:
        path: ~/.npm
        key: npm-${{ hashFiles('package-lock.json') }}
        restore-keys: |
          npm-
          
    - name: Instalar dependencias
      run: npm ci
      
    - name: Ejecutar tests
      run: npm test
      
    - name: Build de producción
      run: npm run build

Errores comunes

  • No usar cache para dependencias: Cada ejecución descarga todas las dependencias desde cero, aumentando tiempo y costos. Solución: implementar actions/cache como en el ejemplo anterior.
  • Secretos en el código: Incluir contraseñas o tokens directamente en el YAML. Solución: usar GitHub Secrets y referenciarlos con ${{ secrets.NOMBRE_SECRET }}.
  • Jobs sin dependencias definidas: Ejecutar jobs en paralelo cuando necesitan resultados de otros. Solución: usar needs para definir dependencias entre jobs.
  • No limpiar recursos: Dejar contenedores o archivos temporales después de la ejecución. Solución: agregar steps de cleanup o usar actions como actions/upload-artifact y actions/download-artifact correctamente.
  • Ignorar el matrix strategy: No probar en múltiples versiones de runtime o sistemas operativos. Solución: usar strategy.matrix para ejecutar tests en diferentes entornos.

Checklist de dominio

  • Puedo crear un workflow básico que se ejecute en push y pull requests
  • Sé configurar diferentes runners (ubuntu-latest, windows-latest, self-hosted)
  • Entiendo cómo usar actions del marketplace y crear mis propias actions
  • Puedo manejar secretos de forma segura usando GitHub Secrets
  • Sé implementar cache para optimizar tiempos de ejecución
  • Puedo definir dependencias entre jobs usando needs
  • Entiendo cómo usar artifacts para pasar datos entre jobs

Configura un pipeline CI básico para una aplicación Node.js

En este ejercicio práctico, configurarás un pipeline de integración continua para una aplicación Node.js existente. Sigue estos pasos:

  1. Crea un nuevo repositorio en GitHub o usa uno existente con una aplicación Node.js simple
  2. En la raíz del repositorio, crea la carpeta .github/workflows
  3. Dentro de esta carpeta, crea un archivo llamado ci.yml
  4. Configura el workflow para que se active en push a la rama main y en pull requests
  5. Define un job llamado test que use ubuntu-latest como runner
  6. Agrega steps para: checkout del código, setup de Node.js versión 18, instalación de dependencias con npm ci, y ejecución de tests con npm test
  7. Commit y push los cambios a tu repositorio
  8. Verifica en la pestaña Actions de GitHub que el workflow se ejecute correctamente
  9. Opcional: Agrega un step adicional para construir la aplicación con npm run build
Pistas
  • Recuerda que la estructura YAML es sensible a indentación
  • Puedes encontrar actions populares en el GitHub Marketplace
  • Usa actions/checkout@v3 para obtener el código del repositorio

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.