Concepto clave
Un workflow en GitHub Actions es un proceso automatizado que defines en tu repositorio para construir, probar, empaquetar, lanzar o desplegar cualquier proyecto. Piensa en él como una receta de cocina: tienes ingredientes (tu código), pasos específicos (jobs y steps), y condiciones para ejecutarla (eventos como push o pull request).
El archivo YAML es el lenguaje que usa GitHub Actions para describir esta receta. Se almacena en .github/workflows/ y contiene toda la configuración necesaria. A diferencia de herramientas antiguas que requerían servidores dedicados, GitHub Actions ejecuta estos workflows en runners (máquinas virtuales) gestionados por GitHub, lo que elimina la sobrecarga de mantenimiento de infraestructura.
Cómo funciona en la práctica
Vamos a crear un workflow básico que se active con cada push a la rama main. Primero, en tu repositorio, crea la carpeta .github/workflows/ si no existe. Luego, dentro de ella, crea un archivo llamado ci.yml. Este archivo definirá tres elementos clave: el nombre del workflow, los eventos que lo disparan, y los jobs que ejecutará.
Paso a paso: 1) Define el nombre con name. 2) Especifica el evento con on, por ejemplo, push en la rama main. 3) Añade un job llamado build que corra en Ubuntu. 4) Dentro del job, agrega steps para hacer checkout del código y ejecutar un comando simple como un echo. Esto valida que el workflow funciona antes de añadir complejidad.
Código en acción
Aquí tienes un ejemplo funcional de un workflow YAML que se ejecuta en cada push a main y muestra un mensaje:
name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout del código
uses: actions/checkout@v4
- name: Mostrar mensaje de inicio
run: echo "Workflow iniciado para el commit ${{ github.sha }}"
- name: Listar archivos
run: ls -laAhora, mejoremos este código añadiendo un paso para instalar dependencias de un proyecto Node.js, mostrando el antes y después:
name: CI Pipeline con Build
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout del código
uses: actions/checkout@v4
- name: Configurar Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Instalar dependencias
run: npm ci
- name: Ejecutar tests
run: npm testErrores comunes
- Indentación incorrecta en YAML: YAML es sensible a espacios; usa 2 espacios por nivel, no tabs. Un error común es mezclarlos, lo que causa fallos de parsing.
- No especificar versión en actions: Al usar
uses: actions/checkoutsin versión (ej.,@v4), puedes tener comportamientos inesperados. Siempre fija una versión mayor para estabilidad. - Olvidar el evento on: Si no defines
on, el workflow nunca se ejecutará. Asegúrate de incluir eventos comopushopull_request. - Usar runners incorrectos: Elegir
runs-on: windows-latestpara un proyecto Linux puede ralentizar el proceso. Selecciona el SO adecuado a tu stack. - No manejar fallos en steps: Por defecto, si un step falla, el job se detiene. Usa
continue-on-error: trueen steps opcionales para evitar esto.
Checklist de dominio
- He creado un archivo YAML en
.github/workflows/con nombre descriptivo. - He definido correctamente el evento
onpara que se active en push a main. - He incluido al menos un job con
runs-onespecificando un runner como ubuntu-latest. - He añadido steps que usan
actions/checkout@v4y comandos run básicos. - He probado el workflow haciendo un push a mi repositorio y verificado la ejecución en la pestaña Actions.
- He revisado la indentación YAML para evitar errores de sintaxis.
- He actualizado el workflow para incluir un paso de instalación de dependencias relevantes a mi proyecto.
Configura un workflow de CI para una aplicación Node.js
Sigue estos pasos para crear y probar un workflow YAML que automatice la construcción y pruebas de una aplicación Node.js:
- Crea un repositorio en GitHub (o usa uno existente) con un proyecto Node.js simple que incluya un archivo
package.jsony un script de test (ej.,npm testque ejecute un test básico). - En tu máquina local, clona el repositorio y crea la carpeta
.github/workflows/en la raíz del proyecto. - Dentro de esa carpeta, crea un archivo llamado
node-ci.ymly copia el segundo ejemplo de código de la lección, ajustando el nombre y eventos si es necesario. - Haz commit y push de los cambios a la rama main. Ve a la pestaña Actions en tu repositorio GitHub para ver el workflow en ejecución.
- Verifica que todos los steps pasen correctamente, especialmente la instalación de dependencias y la ejecución de tests. Si hay fallos, revisa los logs para identificar errores comunes como problemas de sintaxis YAML o comandos incorrectos.
- Opcional: Modifica el workflow para que también se ejecute en pull requests a la rama main, añadiendo el evento correspondiente en la sección
on.
- Asegúrate de que tu archivo package.json tenga un script test definido, aunque sea un echo simple, para que npm test no falle.
- Si el workflow falla en el paso de checkout, verifica que el repositorio sea público o que tengas los permisos adecuados si es privado.
- Usa la acción actions/setup-node@v4 con node-version: '18' para garantizar compatibilidad; puedes cambiarlo a otra versión si tu proyecto lo requiere.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.