Lección 1 de 19 · Lectura y práctica
Configura tu repositorio y entiende los conceptos clave
Concepto claveGitHub 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.
Del concepto a la práctica
Taller de esta lección
La configuración inicial debe hacer visible qué parte del repositorio activa la automatización y qué resultado produce. Un workflow es el archivo completo; un job agrupa trabajo en un runner; un step ejecuta una acción concreta. Esa separación permite diagnosticar si falló la selección del evento, la preparación del entorno o el comando.
Ejemplo resuelto
Para un repositorio con scripts/comprobar.sh, una estructura mínima es:
.github/workflows/comprobar.yml
scripts/comprobar.sh
README.mdEl workflow puede activarse con push y tener un job revision con un step que ejecuta el script. El resultado esperado es una ejecución verde cuando el script termina con código cero.
Un runner nuevo necesita checkout antes de poder leer archivos del repositorio. Guarda este workflow junto al script local cuyo contenido es exit 0:
name: comprobar-repositorio
on: push
permissions:
contents: read
jobs:
revision:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- run: bash scripts/comprobar.sh
- name: Identificar repositorio
env:
REPO: ${{ github.repository }}
run: printf '%s\n' "$REPO"Los ejemplos usan etiquetas legibles; para un flujo real revisa el código de la action y fija su SHA completo verificado. No sustituyas automáticamente una referencia sin comprobar compatibilidad del runner.
Pruébalo
Crea la carpeta indicada y añade un script que devuelva cero.
Define un único job con un runner y un step de ejecución.
Haz un commit que modifique
README.md.Comprueba qué evento, job y step aparecen en los logs.
Comprueba tu resultado
Error frecuente: guardar el YAML fuera de .github/workflows. Corrección: mueve el archivo a esa ruta y vuelve a producir un commit.
Ejercicio: añade un segundo step que imprima el nombre del repositorio. Resultado esperado: la ejecución muestra ambos steps, en orden, y el segundo aparece después del script.

Mapa de prácticaEl 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 ↗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.
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.
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.