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:
- Ejecute tests automáticamente en un entorno aislado.
- Construya la aplicación si los tests pasan.
- 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 testAhora, 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-latestcuando 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:
- Crea un nuevo repositorio en GitHub o usa uno existente con código en Node.js (puede ser un proyecto simple).
- En la raíz de tu repositorio, crea la carpeta
.github/workflowssi no existe. - Dentro de
.github/workflows, crea un archivo llamadoci.yml. - 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 - Haz commit y push de este archivo a tu rama main.
- Ve a la pestaña "Actions" en tu repositorio de GitHub y verifica que el workflow se haya ejecutado exitosamente.
- Modifica el código para añadir un step adicional que ejecute un linter (por ejemplo,
npm run lint) después de los tests.
- 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.