Filtrado por rutas y compilaciones selectivas
Active únicamente los workflows y jobs afectados por un cambio mediante filtros de rutas, detección de cambios y matrices condicionales en monorepos y configuraciones multirrepositorio.
Filtrado por rutas y compilaciones selectivas 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.
El problema de las compilaciones desperdiciadas
En un monorepo, un cambio en la documentación no debería volver a compilar ni implementar el backend, el frontend y la aplicación móvil.
Las compilaciones selectivas ejecutan solo las partes de la canalización afectadas por un cambio, lo que ahorra tiempo y minutos del runner.
Filtros de rutas en los desencadenadores
El enfoque más sencillo es el filtro paths del desencadenador. Un flujo de trabajo solo se ejecuta cuando cambian archivos que coinciden con el patrón.
on:
push:
paths:
- 'services/api/**'Ignorar rutas
También puede hacer lo contrario con paths-ignore: ejecutar el flujo de trabajo para todo excepto las rutas indicadas.
Esto resulta útil para omitir CI cuando solo cambian documentos.
on:
push:
paths-ignore:
- 'docs/**'
- '**.md'Limitaciones de los filtros de desencadenadores
Los filtros del nivel del desencadenador deciden si se ejecuta todo el flujo de trabajo. Sin embargo, en un monorepo a menudo querrá un solo flujo de trabajo que decida qué trabajos ejecutar.
Para ello, detecte los cambios dentro del flujo de trabajo y ramifique según el resultado.
Acción de detección de cambios
La acción dorny/paths-filter inspecciona las diferencias y genera valores booleanos para cada grupo de rutas con nombre.
Los trabajos posteriores leen esos valores para decidir si deben ejecutarse.
- uses: dorny/paths-filter@v3
id: changes
with:
filters: |
api:
- 'services/api/**'
web:
- 'services/web/**'Condicionar trabajos a los cambios detectados
Un trabajo de detección expone valores de salida; los trabajos posteriores utilizan if con el contexto needs para ejecutarse de forma condicional.
build-api:
needs: detect
if: needs.detect.outputs.api == 'true'
runs-on: ubuntu-latest
steps:
- run: ./build-api.shConectar los valores de salida
El trabajo de detección debe declarar outputs que reenvíen los resultados del filtro para que otros trabajos puedan leerlos.
detect:
runs-on: ubuntu-latest
outputs:
api: ${{ steps.changes.outputs.api }}
web: ${{ steps.changes.outputs.web }}Matrices dinámicas
Para muchos servicios, puede crear una matriz dinámicamente a partir de las rutas modificadas, de modo que solo los servicios cambiados entren en ella.
Genere una lista JSON en un trabajo y pásela a la matriz del siguiente.
strategy:
matrix:
service: ${{ fromJSON(needs.detect.outputs.list) }}Git Diff para la detección
También puede detectar cambios con git sin procesar. Compare la confirmación actual con la base para enumerar los directorios modificados.
git diff --name-only origin/main...HEAD | cut -d/ -f1-2 | sort -uComprobaciones obligatorias y omisiones
Tenga cuidado: si se omite una comprobación de estado obligatoria porque no ha cambiado nada, la protección de ramas puede bloquear la fusión mientras espera esa comprobación.
La solución es añadir un trabajo de control final que siempre se complete correctamente y sea la única comprobación obligatoria, resumiendo los trabajos condicionales.
gate:
needs: [build-api, build-web]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo 'all required jobs resolved'Cachés por paquete
Las compilaciones selectivas combinan bien con las cachés por paquete. Use el archivo de bloqueo de cada servicio como clave de la caché para que los cambios no relacionados no la invaliden.
Juntos, estos mecanismos mantienen rápidas las canalizaciones del monorepo incluso a medida que el repositorio crece.
Comprobación rápida
Compruebe sus conocimientos sobre las compilaciones selectivas.
Resumen
Aprendió a compilar solo lo que ha cambiado.
pathsypaths-ignorecontrolan flujos de trabajo completos- Las acciones de detección de cambios generan valores booleanos por ruta
- Los trabajos usan
if+needspara ejecutarse de forma condicional, y las matrices se pueden crear dinámicamente - Añada un trabajo de control con
always()para garantizar la compatibilidad con las comprobaciones obligatorias
Las compilaciones selectivas mantienen el CI/CD de los monorepos rápido y rentable.
Preguntas frecuentes
¿La lección «Filtrado por rutas y compilaciones selectivas» es gratis?
Sí — el texto completo de «Filtrado por rutas y compilaciones selectivas» 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 «Filtrado por rutas y compilaciones selectivas»?
Active únicamente los workflows y jobs afectados por un cambio mediante filtros de rutas, detección de cambios y matrices condicionales en monorepos y configuraciones multirrepositorio. 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 «Filtrado por rutas y compilaciones selectivas»?
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
- CI/CD para monorepositorios
- Workflows entre repositorios
- Gestión centralizada de workflows
- Filtrado por rutas y compilaciones selectivas