0Pricing
DevOps Bootcamp · Lección

CI/CD para monorepositorios

Explore estrategias para optimizar las canalizaciones de CI/CD en monorepositorios, incluida la ejecución selectiva de trabajos según los archivos modificados.

CI/CD para monorepositorios es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 1 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 DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.

¿Qué es un monorepo?

Un monorepo es un único repositorio que contiene el código de muchos proyectos o aplicaciones. En lugar de tener repositorios separados para cada servicio o biblioteca, todo se encuentra en un mismo lugar.

Considérelo como una gran biblioteca con muchos libros (proyectos) en un solo edificio (repositorio), en lugar de tener un edificio separado para cada libro. Este enfoque tiene ventajas y desventajas, especialmente para CI/CD.

Desafíos de CI/CD en monorepos

Aunque los monorepos ofrecen ventajas, como facilitar el uso compartido de código, pueden plantear desafíos para los pipelines de Integración continua/entrega continua (CI/CD):

  • Compilaciones lentas: Si cada cambio activa una compilación completa y el conjunto completo de pruebas para *todos* los proyectos, los pipelines se vuelven muy lentos.
  • Desperdicio de recursos: Ejecutar innecesariamente trabajos no relacionados consume minutos de compilación y recursos.
  • Frustración de los desarrolladores: Los ciclos de retroalimentación largos pueden ralentizar el ritmo de desarrollo.

La necesidad de un CI/CD selectivo

La clave para un CI/CD eficiente en monorepos es la selectividad. Queremos que nuestros pipelines sean lo suficientemente inteligentes como para:

  • Identificar *qué* ha cambiado.
  • Ejecutar trabajos de CI/CD *solo* para los proyectos afectados por esos cambios.

Este enfoque ahorra tiempo, reduce el consumo de recursos y proporciona una retroalimentación más rápida a los desarrolladores.

Activación por rutas: `on.paths`

GitHub Actions ofrece una forma eficaz de lograr esta selectividad mediante el filtro paths en los activadores del flujo de trabajo. Puede especificar directorios o archivos cuyos cambios deben activar un flujo de trabajo.

Si cambia un archivo fuera de estas rutas, el flujo de trabajo no se ejecutará. ¡Esto es perfecto para los monorepos!

on:
  push:
    branches:
      - main
    paths:
      - 'apps/frontend/**'
      - 'libs/shared/**'

El filtro de rutas en acción

Este es un flujo de trabajo sencillo que solo se ejecuta cuando se envían cambios en archivos del directorio apps/backend o en un archivo README.md específico.

Esto garantiza que solo se activen las pruebas o compilaciones relevantes para su servicio backend.

name: Backend CI

on:
  push:
    branches:
      - main
    paths:
      - 'apps/backend/**'
      - 'README.md'

jobs:
  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build backend app
        run: echo "Building backend..."

Ignorar rutas: `paths-ignore`

A veces querrá que un flujo de trabajo se ejecute para *la mayoría* de los cambios, pero que se omita si solo se modifican determinados archivos (por ejemplo, documentación o archivos de registro). El filtro paths-ignore es perfecto para esto.

Funciona de forma similar a paths, pero especifica los archivos que *no* deben activar el flujo de trabajo.

on:
  pull_request:
    branches:
      - main
    paths-ignore:
      - 'docs/**'
      - '**/*.md'

Ejecuciones selectivas dinámicas con `git diff`

Para una lógica más compleja, puede utilizar comandos de Git como git diff dentro de los pasos del flujo de trabajo para comprobar dinámicamente los cambios. Esto le permite crear condiciones personalizadas.

Por ejemplo, podría comprobar si se han producido cambios en una carpeta específica y establecer una variable de salida para decidir si debe ejecutarse un trabajo posterior.

Ejemplo de ejecución condicional de un trabajo

Este paso del flujo de trabajo utiliza git diff para comprobar si algún archivo de apps/api/ ha cambiado entre el commit actual y la rama base. Si ha cambiado alguno, establece la variable de salida api_changed en 'true'.

Esta salida puede controlar si se ejecuta un trabajo de 'deploy API'.

jobs:
  check-changes:
    runs-on: ubuntu-latest
    outputs:
      api_changed: ${{ steps.diff.outputs.api_changed }}
    steps:
      - uses: actions/checkout@v4
      - name: Check API changes
        id: diff
        run: |
          if git diff --quiet ${{ github.event.before }} ${{ github.sha }} -- apps/api/;
          then
            echo "api_changed=false" >> $GITHUB_OUTPUT
          else
            echo "api_changed=true" >> $GITHUB_OUTPUT
          fi

  deploy-api:
    needs: check-changes
    if: needs.check-changes.outputs.api_changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy API
        run: echo "Deploying API..."

Estructura de un monorepo para CI/CD

Una estructura de monorepo organizada simplifica considerablemente el CI/CD selectivo. Agrupar archivos y proyectos relacionados en directorios bien definidos facilita el uso eficaz de los filtros paths.

  • /apps/frontend
  • /apps/backend
  • /libs/shared
  • /docs

Una separación clara permite dirigir los flujos de trabajo con precisión.

Cuestionario sobre CI/CD en monorepos

Optimizar el CI/CD para monorepos es fundamental para mantener el ritmo de desarrollo y utilizar los recursos de forma eficiente. Considere qué estrategias abordan mejor los desafíos de una base de código grande y consolidada.

Repaso y próximos pasos

Ha aprendido a abordar los desafíos de CI/CD en monorepos mediante la implementación de la ejecución selectiva de trabajos. Con los filtros paths de GitHub Actions y las técnicas avanzadas de git diff, puede garantizar que sus pipelines ejecuten únicamente lo necesario.

Esto se traduce en una retroalimentación más rápida, costes reducidos y una experiencia de desarrollo más fluida. ¡Siga explorando cómo perfeccionar sus flujos de trabajo para lograr una eficiencia aún mayor!

Preguntas frecuentes

¿La lección «CI/CD para monorepositorios» es gratis?

Sí — el texto completo de «CI/CD para monorepositorios» 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 DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.

¿Qué aprenderé en «CI/CD para monorepositorios»?

Explore estrategias para optimizar las canalizaciones de CI/CD en monorepositorios, incluida la ejecución selectiva de trabajos según los archivos modificados. Practicas DevOps Bootcamp 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 DevOps Bootcamp?

No se requiere experiencia previa. DevOps Bootcamp 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 1 de 4.

¿Cuánto tiempo toma la lección «CI/CD para monorepositorios»?

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 DevOps Bootcamp?

Sí. Cada lección de DevOps Bootcamp 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

  1. CI/CD para monorepositorios
  2. Workflows entre repositorios
  3. Gestión centralizada de workflows
  4. Filtrado por rutas y compilaciones selectivas
← Volver a DevOps Bootcamp