Introducción
Al desarrollar software, es crucial asegurar que su código funcione correctamente en diferentes entornos. Por ejemplo, una librería de Node.js debe ser probada en múltiples versiones de Node.js (ej. v18, v20, v22).
En lugar de crear trabajos separados para cada versión, GitHub Actions proporciona una Estrategia de Matriz (Matrix Strategy). Esto le permite definir un conjunto de variables, y GitHub Actions creará automáticamente un trabajo para cada combinación de estas variables.
En este laboratorio, actualizará su flujo de trabajo para ejecutar sus pruebas en paralelo a través de tres versiones diferentes de Node.js.
Este laboratorio se basa en el repositorio que creó en los laboratorios anteriores. Trabajará con el repositorio github-actions-demo.
Modificar el flujo de trabajo para incluir la matriz de estrategia
La palabra clave strategy se utiliza para configurar la matriz de compilación (build matrix). Definiremos una matriz con una única clave node-version.
- En la página de tu repositorio de GitHub para
github-actions-demo, haz clic en el botón verde Code. - Asegúrate de que la pestaña HTTPS esté seleccionada y copia la URL. Debería verse como
https://github.com/your-username/github-actions-demo.git. - Abre la terminal en el entorno LabEx. La ruta predeterminada es
~/project. - Usa el comando
git clonepara descargar el repositorio. Reemplazayour-usernamecon tu nombre de usuario real de GitHub.
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git
Salida de Ejemplo:
Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
- Navega dentro del repositorio clonado:
cd ~/project/github-actions-demo
Crea un nuevo archivo de flujo de trabajo (workflow)
.github/workflows/matrix-build.ymlusando el editor WebIDE. Puedes encontrar el archivo en el explorador de archivos a la izquierda, bajoproject/github-actions-demo/.github/workflows/.Comienza creando la estructura básica del flujo de trabajo. Añade el nombre del flujo de trabajo y el disparador (trigger):
name: Matrix Build
on: [push]
- Ahora añade la sección de trabajos (
jobs) con una estructura básica de trabajo de compilación:
jobs:
build:
runs-on: ubuntu-latest
- Añade la estrategia de matriz. Esta es la parte clave que permite ejecutar el trabajo con múltiples versiones de Node.js:
strategy:
matrix:
node-version: [18, 20, 22]
Esto define una variable de matriz node-version con tres valores. GitHub Actions creará un trabajo separado para cada valor.
- Añade la sección de pasos (
steps). Primero, añade el paso de checkout:
steps:
- uses: actions/checkout@v4
- Añade el paso de configuración de Node.js. Observa cómo usamos
${{ matrix.node-version }}para hacer referencia al valor actual de la matriz:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- Añade el paso para instalar dependencias:
- name: Install dependencies
run: npm install
- Añade el paso de compilación que crea el directorio de artefactos:
- name: Build project
run: |
mkdir dist
echo "This is the build artifact" > dist/build.txt
- Añade el paso de prueba:
- name: Run tests
run: npm test
- Finalmente, añade el paso de carga de artefactos (upload artifact). Observa cómo el nombre del artefacto incluye la versión de la matriz para hacer cada artefacto único:
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: build-assets-${{ matrix.node-version }}
path: dist
Tu archivo completo debería verse ahora así:
name: Matrix Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
- name: Build project
run: |
mkdir dist
echo "This is the build artifact" > dist/build.txt
- name: Run tests
run: npm test
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: build-assets-${{ matrix.node-version }}
path: dist
Explicación
strategy: Define la estrategia de compilación.matrix: Define las variables de la matriz.node-version: Este es un nombre de variable que elegimos. Le asignamos un array de valores[18, 20, 22]. GitHub Actions ejecutará el trabajobuildtres veces, una por cada valor.${{ matrix.node-version }}: Esta sintaxis te permite acceder al valor actual de la matriz en tus pasos.
Guarda el archivo (Ctrl+S o Cmd+S) después de realizar los cambios.
Actualizar setup-node y el nombre del artefacto para usar el contexto de la matriz
Definir la matriz es solo la mitad de la batalla; también necesitamos indicar a los pasos que usen el valor actual de la matriz. Hacemos esto utilizando el contexto ${{ matrix.node-version }}.
También debemos asegurarnos de que los artefactos subidos por cada trabajo paralelo tengan nombres únicos, de lo contrario se sobrescribirán entre sí.
- En
.github/workflows/matrix-build.yml, verifica que el pasoUse Node.jsutilice la variable de la matriz:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- Verifica que el paso
Upload build artifactincluya la versión de la matriz en el nombre del artefacto:
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: build-assets-${{ matrix.node-version }}
path: dist
- Tu archivo de flujo de trabajo completo debería verse así:
name: Matrix Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
- name: Build project
run: |
mkdir dist
echo "This is the build artifact" > dist/build.txt
- name: Run tests
run: npm test
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: build-assets-${{ matrix.node-version }}
path: dist
Guarda el archivo (Ctrl+S o Cmd+S).
Confirmar, subir y observar trabajos paralelos
Veamos la matriz en acción confirmando (committing) tus cambios en GitHub.
- Asegúrate de estar en el directorio del repositorio:
cd ~/project/github-actions-demo
- Prepara (Stage) los cambios:
git add .
- Confirma los cambios:
git commit -m "Add matrix strategy for Node.js versions"
- Envía (Push) los cambios al repositorio remoto en GitHub:
git push
Nota sobre la Autenticación:
Cuando ejecutes git push, el WebIDE te pedirá automáticamente que te autentiques. Sigue estos pasos detallados:
- Aparecerá una ventana emergente con el mensaje: "The extension 'GitHub' wants to sign in using GitHub." Haz clic en Allow.
- Aparecerá una nueva notificación. Haz clic en "Copy&Continue to GitHub", y luego haz clic en "Open" en el siguiente aviso.
- Inicia sesión en tu cuenta de GitHub en la ventana del navegador que se abre e introduce el código de autorización que se copió. Después de confirmar la autorización, la página se cerrará automáticamente.
- Espera unos segundos y verás que la terminal completa la operación de push con éxito.
Nota de Privacidad: El WebIDE solicitará acceso completo a tu cuenta de GitHub con fines de autenticación. No tienes que preocuparte por problemas de privacidad: la VM de LabEx se destruirá inmediatamente después de completar el laboratorio actual, y tus credenciales e información de autorización no se conservarán.
Este proceso de autenticación no requiere la configuración manual del nombre de usuario o del Personal Access Token (Token de Acceso Personal).
Verificar en GitHub
- Visita tu repositorio en GitHub en un navegador web.
- Haz clic en la pestaña Actions.
- Haz clic en la ejecución de flujo de trabajo (workflow run) más reciente.
- En la barra lateral izquierda (o en la vista de gráfico principal), ahora verás tres trabajos separados listados bajo el grupo
build:build (18)build (20)build (22)
- Se ejecutarán en paralelo (o casi en paralelo). Puedes hacer clic en cada uno para ver que
Use Node.jsconfiguró la versión específica solicitada.

Resumen
En este laboratorio, aprendió a utilizar la Estrategia de Matriz (Matrix Strategy) en GitHub Actions. Usted:
- Definió una matriz con múltiples versiones de Node.js usando
strategy: matrix. - Actualizó los pasos de su flujo de trabajo para usar dinámicamente la versión desde el contexto de la matriz (
${{ matrix.node-version }}). - Aseguró que los nombres de los artefactos fueran únicos para cada trabajo de la matriz.
Esta potente característica le permite validar su proyecto contra una amplia gama de configuraciones con muy poca duplicación de código.



