es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gradle, CI/CD, monorepo: ¿Cómo desplegar/publicar solo los subproyectos cambiados al fusionarse con el principal?

Estamos sufriendo mucho con una arquitectura de microservicios.

Cada microservicio tiene su propio repositorio y CI/CD (despliegue automático en la fusión a la rama principal en Github).

Pero hay muchos obstáculos, entre ellos: comparten muchísimo código, por lo que estamos usando un repositorio de artefactos internos para publicar bibliotecas compartidas. Y eso también trae muchos problemas.

Para los artefactos compartidos utilizamos un monorepo y eso hizo todo bastante más fácil, lo que nos llevó a pensar: Bueno, hagamos un monorepo para todos los microservicios (que en realidad no son tantos).

Pero entonces, ¿cómo hacemos CI/CD?

  • ¿Una rama por microservicio (como un “main” para cada microservicio)?

  • ¿Un script inteligente que identifica qué subproyectos fueron modificados?

  • ¿Alguna información en el comentario del commit que indique a Github action qué subproyecto desplegar?

Todos parecen soluciones temporales poco elegantes. ¿Alguien ha experimentado con esto y lo ha solucionado de manera más elegante?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para Monorepo con CI/CD para Microservicios

    Como experto en IT especializado en Gradle, Monorepo y CI/CD, se puede implementar la siguiente solución para resolver los problemas enfrentados con una arquitectura de microservicios que tiene cada microservicio con su propio repositorio e CI/CD:

    1. Consolidar todos los microservicios en un solo Monorepo
    2. En el Monorepo, separar cada microservicio en una carpeta o subproyecto específico.

    3. Utilizar Gradle para administrar el Monorepo y definir construcciones individuales para cada subproyecto.

    4. Implementar CI/CD utilizando una herramienta que pueda activar construcciones basadas en condiciones específicas, como un push a una rama específica que corresponde a un microservicio.

    5. Usar Gradle para construir y publicar bibliotecas compartidas en un artifactory interno, que se pueden utilizar en todos los microservicios del Monorepo.

    Este enfoque elimina la necesidad de repositorios separados para cada microservicio, simplifica la gestión de bibliotecas compartidas y facilita la implementación de cambios en varios microservicios. También permite un mejor control de versiones, ya que todos los microservicios son parte de una única base de código.

    En conclusión, adoptar un enfoque Monorepo con una herramienta como Gradle puede llevar a una gestión de código más sencilla, un mejor control de versiones y un proceso de CI/CD más eficiente.

Comments are closed.