Introducción
En los flujos de trabajo (workflows) de CI/CD del mundo real, rara vez son solo una lista única de pasos. A menudo se componen de múltiples "trabajos" (jobs) distintos que deben ejecutarse en un orden específico.
Por ejemplo, podrías tener un trabajo de Build (Compilación) que compila tu código y un trabajo de Deploy (Despliegue) que lo envía a un servidor. Definitivamente no querrás que el trabajo de Deploy se ejecute si el trabajo de Build falla, y no puedes ejecutarlos al mismo tiempo porque el despliegue necesita los artefactos compilados.
En este laboratorio, dividirás tu flujo de trabajo en dos trabajos separados y utilizarás la palabra clave needs para imponer una dependencia, asegurando que el trabajo de despliegue espere a que el trabajo de compilación se complete con éxito.
Este laboratorio se basa en el repositorio que creaste en los laboratorios anteriores. Trabajarás con el repositorio github-actions-demo.
Definir un trabajo de compilación (build job)
Primero, limpiaremos nuestro flujo de trabajo (workflow) existente para tener un trabajo de build enfocado. Simplificaremos la estrategia de matriz (matrix strategy) del laboratorio anterior para mayor claridad, volviendo a una única versión para mantener el foco en las dependencias de los trabajos.
- 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 al repositorio clonado:
cd ~/project/github-actions-demo
Crea un nuevo archivo de flujo de trabajo
.github/workflows/job-dependencies.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. Agrega el nombre del flujo de trabajo y el disparador (trigger):
name: Job Dependencies
on: [push]
- Agrega la sección de trabajos (
jobs) y define el trabajo de compilación (build) con su ejecutor (runner):
jobs:
build:
runs-on: ubuntu-latest
- Agrega la sección de pasos (
steps). Primero, agrega el paso de checkout para obtener el código del repositorio:
steps:
- uses: actions/checkout@v4
- Agrega el paso de configuración de Node.js:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- Agrega el paso para instalar dependencias:
- name: Install dependencies
run: npm install
- Agrega el paso para ejecutar pruebas:
- name: Run tests
run: npm test
- Agrega el paso de compilación que crea el directorio y el archivo de artefacto (artifact):
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- Finalmente, agrega el paso de carga de artefacto (
Upload artifact). Este paso es crucial porque guarda la salida de la compilación para que el siguiente trabajo pueda usarla:
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
Tu archivo completo debería verse ahora así:
name: Job Dependencies
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
Explicación
- Eliminamos la estrategia
matrixpor simplicidad. - Mantuvimos el paso
Upload build artifact. ¡Esto es crucial porque el siguiente trabajo necesitará estos archivos!
Guarda el archivo (Ctrl+S o Cmd+S) después de realizar los cambios.
Definir un trabajo de despliegue (deploy job) que depende de la compilación
Ahora añadiremos un segundo trabajo llamado deploy. Este trabajo solo debe ejecutarse si build tiene éxito. Lo logramos usando needs: build.
Añade el siguiente trabajo
deploya tu archivo.github/workflows/job-dependencies.yml. Asegúrate de que esté al mismo nivel de sangría quebuild.Comienza añadiendo la definición del trabajo de despliegue con su runner y dependencia:
deploy:
runs-on: ubuntu-latest
needs: build
La línea needs: build es crucial: le indica a GitHub Actions que este trabajo depende de la finalización exitosa del trabajo build.
- Añade la sección de pasos (steps). Primero, añade el paso para descargar el artefacto (artifact):
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: dist-files
path: dist
Esto descarga el artefacto que se subió en el trabajo build. El name debe coincidir con el nombre utilizado en el paso de subida (upload step).
- Añade el paso de despliegue (deploy step):
- name: Deploy project
run: |
echo "Deploying project..."
ls -R dist
echo "Deployment successful!"
Este paso simula un despliegue listando los archivos descargados.
- La estructura completa de tu archivo debería verse así:
name: Job Dependencies
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: |
mkdir dist
echo "Build artifact created at $(date)" > dist/build.txt
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: dist-files
path: dist
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Download artifact
uses: actions/download-artifact@v4
with:
name: dist-files
path: dist
- name: Deploy project
run: |
echo "Deploying project..."
ls -R dist
echo "Deployment successful!"
Explicación
needs: build: Esta es la línea clave. Indica a GitHub Actions que este trabajo depende de la finalización exitosa del trabajobuild.uses: actions/download-artifact@v4: Dado que los trabajos se ejecutan en diferentes máquinas virtuales (virtual machines), no comparten sistemas de archivos. Para obtener la carpetadistcreada en el trabajobuild, debemos descargar el artefacto que subimos anteriormente.name: dist-files: Debe coincidir con el nombre utilizado en el paso de subida (upload step).
Guarda el archivo (Ctrl+S o Cmd+S).
Confirmar (Commit), subir (Push) y verificar la ejecución secuencial
Ahora vamos a verificar que los trabajos (jobs) se ejecutan en el orden correcto.
- Asegúrate de estar en el directorio del repositorio:
cd ~/project/github-actions-demo
- Prepara los cambios (Stage the changes):
git add .
- Confirma los cambios (Commit the changes):
git commit -m "Add deploy job with dependency on build"
- Envía 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 de nombre de usuario o Personal Access Token.
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.
- Observa el gráfico de visualización. Deberías ver dos círculos (jobs) conectados por una línea.
- El trabajo
buildestará a la izquierda. - El trabajo
deployestará a la derecha.
- El trabajo
- Observa el progreso. Notarás que
deploypermanece en estado "Pending" o "Waiting" hasta quebuildse ponga verde (Success). - Una vez que
buildfinalice,deploycomenzará. - Haz clic en los registros (logs) del trabajo
deploypara ver el mensaje "Deploying project..." y la lista de archivos del artefacto descargado.

Resumen
En este laboratorio, aprendiste a orquestar flujos de trabajo (workflows) de múltiples trabajos (jobs) en GitHub Actions. Tú:
- Creaste trabajos separados de
buildydeploy. - Usaste la palabra clave
needspara definir una dependencia, asegurando quedeployse ejecute solo después debuild. - Usaste
upload-artifactydownload-artifactpara pasar datos (archivos) entre estos trabajos separados.
Este patrón es fundamental para construir pipelines de CI/CD robustos donde deseas compilar una vez y luego desplegar en múltiples entornos (staging, production) solo si los pasos anteriores tienen éxito.



