Ejecución condicional y dependencias entre jobs
Controle cuándo se ejecutan los pasos y jobs mediante condiciones if, la palabra clave needs, expresiones y funciones de comprobación de estado en los workflows de GitHub Actions.
Ejecución condicional y dependencias entre jobs es una lección gratuita de CI/CD with GitHub Actions & DevOps Pipelines en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CI/CD with GitHub Actions & DevOps Pipelines, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CI/CD with GitHub Actions & DevOps Pipelines incluye 4 lecciones en total.
Por qué son importantes las condiciones
No todos los pasos deben ejecutarse siempre. Puede que quiera que un paso de despliegue se ejecute solo en la rama main o que un paso de notificación se ejecute solo cuando algo falle.
GitHub Actions permite asociar una condición if a cualquier paso o trabajo para controlar si se ejecuta.
La clave if
Añada una clave if: a un paso. El paso solo se ejecuta cuando la expresión se evalúa como true.
Las expresiones dentro de if no necesitan el envoltorio ${{ }}, aunque se permite usarlo.
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shObjetos de contexto
Las condiciones se leen de los objetos de contexto que describen la ejecución:
github— event, ref, actor, shaenv— variables de entornojobysteps— estado del trabajo anteriorrunner— sistema operativo y arquitectura
Por ejemplo, github.event_name le indica si un push o un pull_request desencadenó la ejecución.
Funciones de comprobación del estado
De forma predeterminada, un paso se omite si un paso anterior falla. Para anular este comportamiento, utilice las funciones de estado:
success()— verdadero si ningún paso anterior falló (opción predeterminada)failure()— verdadero si algún paso anterior fallóalways()— se ejecuta pase lo que pasecancelled()— verdadero si se canceló la ejecución
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'Ejecutar siempre la limpieza
Un patrón habitual es un paso de limpieza que debe ejecutarse aunque fallen pasos anteriores. Utilice if: always().
Esto garantiza que los recursos temporales, los contenedores o los informes de pruebas se gestionen independientemente del resultado.
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsDependencias de trabajos con needs
La palabra clave needs hace que un trabajo espere a otros. Sin ella, los trabajos se ejecutan en paralelo.
Un trabajo incluido en needs debe finalizar correctamente antes de que se inicie el trabajo dependiente.
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shVarias dependencias
Un trabajo puede depender de varios trabajos pasando una lista a needs. Espera a que todos terminen.
Así se crean patrones de convergencia, en los que un trabajo final se ejecuta solo después de que todos los trabajos paralelos hayan finalizado correctamente.
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'Trabajos condicionales
La clave if también funciona en los trabajos, no solo en los pasos. Una condición a nivel de trabajo decide si se ejecuta el trabajo completo.
Aquí, el trabajo de despliegue se ejecuta únicamente para los push a main, aunque sigue dependiendo de las pruebas.
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shUsar las salidas de los trabajos
Los trabajos pueden pasar datos a trabajos posteriores mediante outputs. Un trabajo dependiente los lee a través del contexto needs.
Esto permite que una condición dependa de un valor calculado anteriormente, como si ha cambiado una versión.
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTCombinar condiciones
Puede combinar expresiones con && (y), || (o) y ! (no).
Este ejemplo se ejecuta únicamente para un push correcto a main que no procede de un fork.
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'if always con needs
Atención: un trabajo con needs se omite si falla una dependencia. Para ejecutar un trabajo final de generación de informes independientemente del resultado, combine needs con if: always().
Dentro puede inspeccionar needs.<job>.result para decidir qué informar.
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}Comprobación rápida
Compruebe su comprensión de la ejecución condicional.
Resumen
Ha aprendido a controlar el flujo de trabajo con condiciones y dependencias.
ifcontrola los pasos y trabajos mediante expresiones- Las funciones de estado, como
failure()yalways(), anulan la omisión tras un fallo needscrea patrones de ordenación y convergencia- Los
outputsde los trabajos proporcionan valores para condiciones posteriores
Estas primitivas le permiten crear canalizaciones precisas y eficientes.
Preguntas frecuentes
¿La lección «Ejecución condicional y dependencias entre jobs» es gratis?
Sí — el texto completo de «Ejecución condicional y dependencias entre jobs» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CI/CD with GitHub Actions & DevOps Pipelines, actualiza a CoddyKit PRO. El curso de CI/CD with GitHub Actions & DevOps Pipelines incluye 4 lecciones en total.
¿Qué aprenderé en «Ejecución condicional y dependencias entre jobs»?
Controle cuándo se ejecutan los pasos y jobs mediante condiciones if, la palabra clave needs, expresiones y funciones de comprobación de estado en los workflows de GitHub Actions. Practicas CI/CD with GitHub Actions & DevOps Pipelines con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar CI/CD with GitHub Actions & DevOps Pipelines?
No se requiere experiencia previa. CI/CD with GitHub Actions & DevOps Pipelines en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Ejecución condicional y dependencias entre jobs»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de CI/CD with GitHub Actions & DevOps Pipelines?
Sí. Cada lección de CI/CD with GitHub Actions & DevOps Pipelines incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Compilaciones matriciales para varios entornos
- Almacenamiento en caché de dependencias para acelerar la ejecución
- Workflows y Actions reutilizables
- Ejecución condicional y dependencias entre jobs