¿Qué es GitHub Actions?
GitHub Actions es la plataforma de automatización CI/CD nativa de GitHub. Te permite definir flujos de trabajo (workflows) como código YAML que se ejecutan automáticamente cuando ocurren eventos en tu repositorio.
Anatomía de un workflow
Un workflow es un archivo .yml
ubicado en .github/workflows/.
Está compuesto por 5 elementos clave.
.github/workflows/ para separar CI, CD, releases, etc.
Eventos y triggers
La clave on: define cuándo se ejecuta tu workflow.
Selecciona un evento para ver su configuración YAML:
| Evento | Cuándo | Caso de uso |
|---|---|---|
| push | Al hacer push a ramas | CI en cada commit |
| pull_request | Al abrir/actualizar PR | Validar antes de merge |
| schedule | Cron (tiempo fijo) | Reportes, backups nocturnos |
| workflow_dispatch | Manual desde la UI | Deploy a demanda |
| release | Al publicar un release | CD automático en producción |
Jobs y steps
Los jobs se ejecutan en paralelo por defecto. Los steps dentro de un job son secuenciales.
Usa needs: para crear dependencias.
GitHub-hosted vs Self-hosted runners
El runner es la máquina que ejecuta tus jobs. Elige según tus necesidades de costo, rendimiento y acceso a red. Haz clic en una opción para ver su configuración:
✅ Mantenido por GitHub
✅ Limpio en cada ejecución
⚡ ubuntu / windows / macos
💲 Consume minutos del plan
✅ Acceso a red privada
✅ Sin límite de minutos
⚡ Linux / Windows / macOS / ARM
🔧 Tú lo mantienes y configuras
| Característica | GitHub-hosted | Self-hosted |
|---|---|---|
| Configuración | 🟢 Ninguna | 🟡 Manual |
| Costo | 💲 Minutos del plan | 🟢 Solo infraestructura |
| Red privada | 🔴 No | 🟢 Sí |
| Hardware custom | 🔴 No | 🟢 GPU, ARM, etc. |
| Mantenimiento | 🟢 GitHub | 🔴 Tú |
Secrets y variables de entorno
Nunca escribas credenciales en el YAML. Usa Secrets para datos sensibles y Variables para configuración reutilizable.
Environment — por ambiente (prod/staging)
Organization — compartido entre repos
CI/CD completo — Node.js + Docker
Workflow production-ready: tests → build imagen Docker → push a registry → deploy en servidor. Usa ubuntu-latest.
Configurar un self-hosted runner
Instala el agente en cualquier máquina Linux (o Windows/macOS). Una vez conectado, usa runs-on: self-hosted en tus workflows.