Quiz: Fundamentos de GitHub Actions

Quiz
10 min~4 min lectura

Quiz Interactivo

Pon a prueba tus conocimientos

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.