Configura tu repositorio y entiende los conceptos clave

Lectura
15 min~5 min lectura

Concepto clave

GitHub Actions es un sistema de automatización integrado en GitHub que permite crear flujos de trabajo de CI/CD directamente desde tu repositorio. Imagina que es como tener un robot asistente que observa tu código y ejecuta tareas automáticamente cuando ocurren eventos específicos, como un push o un pull request. En lugar de configurar servidores externos complejos, defines tus pipelines en archivos YAML dentro de tu repositorio, lo que los hace versionables y fáciles de compartir.

Los componentes fundamentales son: workflows (flujos de trabajo completos), jobs (tareas dentro de un workflow), steps (pasos dentro de un job), y actions (unidades reutilizables de código). Esto es similar a una cadena de montaje en una fábrica: cuando llega material nuevo (código), se activan estaciones de trabajo (jobs) que realizan operaciones específicas como ensamblar (build), probar (test) y empaquetar (deploy).

Cómo funciona en la práctica

Para comenzar, necesitas crear un archivo YAML en la carpeta .github/workflows de tu repositorio. Este archivo define qué debe hacer GitHub Actions cuando se dispara un evento. Por ejemplo, al hacer push a la rama main, puedes configurar un workflow que:

  1. Ejecute tests automáticamente en un entorno aislado.
  2. Construya la aplicación si los tests pasan.
  3. Despliegue a un entorno de staging.

El proceso es: GitHub detecta el evento, lee tu archivo YAML, provisiona un runner (máquina virtual), y ejecuta los pasos en orden. Todo esto ocurre en la nube de GitHub, sin necesidad de mantener infraestructura propia.

Código en acción

Aquí tienes un ejemplo básico de un archivo ci.yml que se ejecuta en cada push a main:

name: CI Pipeline

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

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

Ahora, mejoremos este código añadiendo un job de build y usando variables de entorno. Observa el "antes y después":

Antes (solo tests): El código anterior.

Después (tests y build):

name: CI Pipeline

on:
  push:
    branches: [ main ]

env:
  NODE_ENV: production

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
      
      - name: Install dependencies
        run: npm ci
      
      - name: Run tests
        run: npm test
  
  build:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      
      - name: Build application
        run: npm run build
        env:
          BUILD_ID: ${{ github.run_id }}

Errores comunes

  • No especificar el runner correcto: Usar runs-on: ubuntu-latest cuando necesitas Windows puede fallar. Siempre verifica el SO requerido por tu aplicación.
  • Olvidar el checkout del código: Sin el paso actions/checkout, tu workflow no tendrá acceso a los archivos del repositorio. Es el primer paso en casi todos los jobs.
  • Mal manejo de secrets: Exponer contraseñas o tokens en el YAML. Usa GitHub Secrets (${{ secrets.MI_TOKEN }}) para datos sensibles.
  • Dependencias entre jobs no definidas: Si un job necesita que otro termine primero, usa needs: [nombre_job]. Sin esto, se ejecutan en paralelo y pueden fallar.
  • Sintaxis YAML incorrecta: Sangrías inconsistentes o claves mal escritas. Usa un validador YAML online para depurar.

Checklist de dominio

  • Creé un archivo YAML en .github/workflows/ con un workflow básico.
  • Configuré el trigger on: para que se ejecute en push a una rama específica.
  • Definí al menos un job con múltiples steps, incluyendo checkout y una acción de GitHub Marketplace.
  • Usé variables de entorno (env:) o secrets para datos configurables.
  • Probé el workflow y verifiqué que se ejecuta en la pestaña Actions de mi repositorio.
  • Entendí la diferencia entre workflow, job, step y action.
  • Revisé los logs de ejecución para depurar errores comunes.

Configura tu primer pipeline de CI con GitHub Actions

Sigue estos pasos para crear un pipeline de integración continua que ejecute tests automáticos en tu repositorio:

  1. Crea un nuevo repositorio en GitHub o usa uno existente con código en Node.js (puede ser un proyecto simple).
  2. En la raíz de tu repositorio, crea la carpeta .github/workflows si no existe.
  3. Dentro de .github/workflows, crea un archivo llamado ci.yml.
  4. Copia y pega el siguiente código en ci.yml, ajustando la versión de Node.js si es necesario:
    name: CI Pipeline
    
    on:
      push:
        branches: [ main ]
    
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v4
          
          - name: Setup Node.js
            uses: actions/setup-node@v4
            with:
              node-version: '18'
          
          - name: Install dependencies
            run: npm ci
          
          - name: Run tests
            run: npm test
  5. Haz commit y push de este archivo a tu rama main.
  6. Ve a la pestaña "Actions" en tu repositorio de GitHub y verifica que el workflow se haya ejecutado exitosamente.
  7. Modifica el código para añadir un step adicional que ejecute un linter (por ejemplo, npm run lint) después de los tests.
Pistas
  • Asegúrate de que tu proyecto tenga un package.json con scripts definidos para 'test' (y 'lint' si lo añades).
  • Si el workflow falla, revisa los logs en la pestaña Actions haciendo clic en la ejecución y expandiendo cada step para ver detalles del error.
  • Puedes simular un push modificando cualquier archivo en tu repositorio y haciendo commit para disparar el workflow automáticamente.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.