Poner fin al dolor: Repensando CI para Monorepos Grandes

Rate this content
Bookmark

Escalar bases de código grandes, especialmente monorepos, puede ser una pesadilla en los sistemas de Integración Continua (CI). El panorama actual de las herramientas de CI tiende a ser orientado a máquinas, de bajo nivel y exigente en términos de mantenimiento. Lo peor es que a menudo están desconectadas de las necesidades y el flujo de trabajo real del desarrollador.

¿Por qué es un obstáculo el CI? Porque los sistemas de CI actuales son comodines, sin una comprensión específica de tu base de código. No pueden aprovechar el contexto en el que operan para ofrecer optimizaciones.

En esta charla, exploraremos el futuro del CI, diseñado específicamente para bases de código grandes y monorepos. Imagina un sistema de CI que comprenda la estructura de tu espacio de trabajo, paralelice dinámicamente las tareas en máquinas utilizando datos históricos, y haga todo esto con una configuración mínima y de alto nivel. Repensemos el CI, haciéndolo más inteligente, eficiente y alineado con las necesidades del desarrollador.

This talk has been presented at DevOps.js Conf 2024, check out the latest edition of this JavaScript Conference.

FAQ

Un monorepo es un repositorio que contiene múltiples proyectos o productos, que pueden tener interdependencias entre sí. La estructura de un proyecto en un monorepo debe garantizar consistencia en la configuración y versiones utilizadas, y permitir movilidad entre proyectos para facilitar su mantenimiento y automatización.

Los principales desafíos incluyen la optimización de la configuración de CI para manejar múltiples proyectos simultáneamente, la necesidad de ejecutar tareas en paralelo para evitar tiempos de espera largos en cada PR, y la complejidad de mantener y ajustar la configuración de CI conforme el monorepo crece y cambia.

NX es una herramienta de gestión de monorepos que ofrece funciones como la ejecución paralela de tareas y la capacidad de ejecutar solo nodos afectados por cambios recientes. Esto ayuda a optimizar el tiempo de CI y a manejar las dependencias dentro del monorepo de manera eficiente.

NX Replay es una característica de NX que actúa como una caché de cálculos distribuida. Calcula una clave hash basada en diversas fuentes, como código fuente y variables de entorno, y almacena los resultados de las tareas junto con esta clave. Si un cálculo posterior coincide con la clave hash, NX puede reproducir los resultados sin necesidad de recomputación.

NX permite la distribución de tareas en múltiples máquinas y la generación dinámica de tareas para pruebas de extremo a extremo, lo que ayuda a reducir significativamente los tiempos de ejecución de CI. Además, su capacidad para detectar y reejecutar tareas inestables mejora la confiabilidad de los procesos de CI.

La escalabilidad dinámica de NX permite adaptar el número de máquinas utilizadas en función del volumen de tareas, optimizando los recursos y reduciendo costos. Esto asegura una distribución eficiente y la capacidad de manejar fluctuaciones en la carga de trabajo sin configuración manual continua.

NX facilita la división dinámica de pruebas de extremo a extremo en tareas más pequeñas que pueden distribuirse entre varias máquinas. Esto permite una ejecución más rápida y eficiente de las pruebas, reduciendo los cuellos de botella y mejorando el rendimiento general de CI.

Juri Strumpflohner
Juri Strumpflohner
25 min
15 Nov, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
La charla de hoy analiza la reevaluación del CI en monorepos, con un enfoque en aprovechar el gráfico implícito de dependencias de proyectos para optimizar los tiempos de compilación y gestionar la complejidad. Se destaca el uso de NX Replay y NX Agents como una forma de mejorar la eficiencia del CI mediante el almacenamiento en caché de cálculos anteriores y la distribución de tareas en múltiples máquinas. Se discuten la distribución detallada y la detección de fallas como métodos para mejorar la eficiencia de la distribución y garantizar una configuración limpia. Habilitar la distribución con NX Agents simplifica el proceso de configuración, y NX Cloud ofrece escalabilidad dinámica y reducción de costos. En general, la charla explora estrategias para mejorar la escalabilidad y eficiencia de los flujos de CI en monorepos.

1. Introducción a Repensar CI en Monorepos

Short description:

Hoy, me gustaría hablar sobre cómo podríamos repensar cómo funciona CI en monorepos. Mi nombre es Joris Sturmfloner y he estado utilizando monorepos durante seis años. También soy miembro del equipo principal de NX y un experto desarrollador de Google en tecnologías web y Angular.

[♪ música tocando ♪ Muy bien. Hoy me gustaría hablar un poco sobre cómo podríamos repensar cómo funciona CI en comparación con la situación actual de CI que tenemos, con un enfoque particular en monorepos y monorepos grandes potencialmente. Cómo podríamos optimizar eso. Antes de continuar, mi nombre es Joris Sturmfloner. He estado utilizando monorepos durante probablemente seis años. Desde hace unos cuatro años, también soy miembro del equipo principal de NX, que es una herramienta de gestión de monorepos. Y también soy un experto desarrollador de Google en tecnologías web y Angular y también soy instructor en AgHead, donde publico cursos sobre desarrollo web y herramientas para desarrolladores.

2. Consideraciones para CI en Monorepos

Short description:

Al trabajar con monorepos, debemos considerar la experiencia local del desarrollador, la automatización y las reglas, y los pipelines de tareas. Las soluciones de CI actuales no están optimizadas para monorepos y requieren un mantenimiento manual a nivel bajo. Los desarrolladores desean una forma de definir su estructura de CI a alto nivel y necesitan estrategias para garantizar la escalabilidad y la velocidad y el rendimiento manejables.

Entonces, cuando nos adentramos en la dirección de un monorepo, no es gratuito, ¿verdad? Hay algunas consideraciones que deben tenerse en cuenta. Una de las más importantes es, obviamente, la experiencia local del desarrollador. ¿Cómo estructuramos un proyecto en un monorepo? ¿Cómo nos aseguramos de tener consistencia en cómo se configuran estos productos? ¿Qué versión utilizan? ¿Cómo se configuran de manera que también podamos tener cierta movilidad entre proyectos, potencialmente, y también nos ayude a mantenerlos? La automatización y las reglas en torno a esos proyectos también son una parte muy importante, especialmente en lo que respecta al mantenimiento y la longevidad de dicho monorepo.

También cosas como características de los pipelines de tareas, poder ejecutar cosas en paralelo. Porque claramente en un monorepo, ya no ejecutamos solo un proyecto, sino potencialmente una serie de proyectos donde también hay dependencias. Y por lo tanto, necesitamos poder construir productos dependientes primero antes de ejecutar nuestro proyecto. Y esas son cosas que no queremos hacer manualmente, sino que queremos tener soporte de herramientas. Pero hoy me gustaría centrarme específicamente en el elefante en la habitación cuando hablamos de monorepos, que a menudo no se le presta atención de inmediato, lo cual es un error, que es CI. Porque claramente hay algo: la situación actual de CI no está optimizada para monorepos porque está muy orientada a la máquina, por lo que debemos centrarnos en instrucciones exactas que queremos procesar. Necesitamos tener un enfoque muy instructivo. También es muy detallado en ese sentido. Requiere mucho mantenimiento porque, como mencioné, ya no ejecutamos solo un proyecto y ya está. Ejecutamos una serie de proyectos. Ejecutamos múltiples proyectos. Y por lo tanto, necesitamos tener estrategias para ajustar el CI para asegurarnos de que incluso cuando cambia la estructura de nuestro monorepo, cuando se agregan más productos al monorepo, siga funcionando. También diría que está un poco alejado de lo que los desarrolladores desean, porque como desarrollador, me gustaría tener una forma más a alto nivel de definir mi estructura de CI, mi ejecución de CI, mi pipeline de CI, en el sentido de decir, hey, quiero ejecutar todos estos proyectos que se han modificado, por ejemplo, en ese PR, en lugar de tener que ajustar cada aspecto de ese proyecto. Y como dije antes, realmente no funcionan para monorepos, están diseñados para ser mucho más generales y para espacios de trabajo de proyectos individuales en general. Así que hoy me gustaría adentrarme en algunos de estos aspectos, específicamente en lo que respecta a la velocidad y el rendimiento, porque eso es algo importante en lo que debemos prestar atención, porque de lo contrario nuestro monorepo sería un problema. Porque si tenemos una buena colaboración local dentro de los equipos, pero nuestro pipeline tarda más de una hora en cada PR, eso será un problema.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Elevando Monorepos con los Espacios de Trabajo de npm
DevOps.js Conf 2022DevOps.js Conf 2022
33 min
Elevando Monorepos con los Espacios de Trabajo de npm
Top Content
NPM workspaces help manage multiple nested packages within a single top-level package, improving since the release of NPM CLI 7.0. You can easily add dependencies to workspaces and handle duplications. Running scripts and orchestration in a monorepo is made easier with NPM workspaces. The npm pkg command is useful for setting and retrieving keys and values from package.json files. NPM workspaces offer benefits compared to Lerna and future plans include better workspace linking and adding missing features.
¿Por qué es tan lento el CI?
DevOps.js Conf 2022DevOps.js Conf 2022
27 min
¿Por qué es tan lento el CI?
Slow CI has a negative impact on productivity and finances. Debugging CI workflows and tool slowness is even worse. Dependencies impact CI and waiting for NPM or YARN is frustrating. The ideal CI job involves native programs for static jobs and lightweight environments for dynamic jobs. Improving formatter performance and linting is a priority. Performance optimization and fast tools are essential for CI and developers using slower hardware.
Despliegue Atómico para Hipsters de JavaScript
DevOps.js Conf 2024DevOps.js Conf 2024
25 min
Despliegue Atómico para Hipsters de JavaScript
This Talk discusses atomic deployment for JavaScript and TypeScript, focusing on automated deployment processes, Git hooks, and using hard links to copy changes. The speaker demonstrates setting up a bare repository, configuring deployment variables, and using the post-receive hook to push changes to production. They also cover environment setup, branch configuration, and the build process. The Talk concludes with tips on real use cases, webhooks, and wrapping the deployment process.
Cómo construir tuberías de CI/CD para una aplicación de microservicios
DevOps.js Conf 2021DevOps.js Conf 2021
33 min
Cómo construir tuberías de CI/CD para una aplicación de microservicios
Top Content
This Talk discusses the benefits of microservices and containers for building CI-CD pipelines. It explains how container technology enables portability and scalability. The challenges of microservices include network communication and testing in isolation. The Talk introduces Tacton, a cloud-native CICD pipeline for Kubernetes, and highlights the use of GitOps and Argo CD. It also discusses the importance of maintaining referential integrity between microservices and the evolving role of operators in the DevOps world.
Microfrontends Federados a Gran Escala
React Summit 2023React Summit 2023
31 min
Microfrontends Federados a Gran Escala
Top Content
This Talk discusses the transition from a PHP monolith to a federated micro-frontend setup at Personio. They implemented orchestration and federation using Next.js as a module host and router. The use of federated modules and the integration library allowed for a single runtime while building and deploying independently. The Talk also highlights the importance of early adopters and the challenges of building an internal open source system.
Escala tu aplicación de React sin micro-frontends
React Summit 2022React Summit 2022
21 min
Escala tu aplicación de React sin micro-frontends
This Talk discusses scaling a React app without micro-frontend and the challenges of a growing codebase. Annex is introduced as a tool for smart rebuilds and computation caching. The importance of libraries in organizing code and promoting clean architecture is emphasized. The use of caching, NxCloud, and incremental build for optimization is explored. Updating dependencies and utilizing profiling tools are suggested for further performance improvements. Splitting the app into libraries and the benefits of a build system like NX are highlighted.

Workshops on related topic

React a Escala con Nx
React Summit 2023React Summit 2023
145 min
React a Escala con Nx
Top Content
Featured WorkshopFree
Isaac Mann
Isaac Mann
Vamos a utilizar Nx y algunos de sus plugins para acelerar el desarrollo de esta aplicación.
Algunas de las cosas que aprenderás:- Generar un espacio de trabajo Nx prístino- Generar aplicaciones frontend React y APIs backend dentro de tu espacio de trabajo, con proxies preconfigurados- Crear librerías compartidas para reutilizar código- Generar nuevos componentes enrutados con todas las rutas preconfiguradas por Nx y listas para usar- Cómo organizar el código en un monorepositorio- Mover fácilmente las librerías alrededor de tu estructura de carpetas- Crear historias de Storybook y pruebas e2e de Cypress para tus componentes
Tabla de contenidos: - Lab 1 - Generar un espacio de trabajo vacío- Lab 2 - Generar una aplicación React- Lab 3 - Ejecutores- Lab 3.1 - Migraciones- Lab 4 - Generar una librería de componentes- Lab 5 - Generar una librería de utilidades- Lab 6 - Generar una librería de rutas- Lab 7 - Añadir una API de Express- Lab 8 - Mostrar un juego completo en el componente de detalle de juego enrutado- Lab 9 - Generar una librería de tipos que la API y el frontend pueden compartir- Lab 10 - Generar historias de Storybook para el componente de interfaz de usuario compartido- Lab 11 - Prueba E2E del componente compartido
Monorepos de Node con Nx
Node Congress 2023Node Congress 2023
160 min
Monorepos de Node con Nx
Top Content
WorkshopFree
Isaac Mann
Isaac Mann
Varias apis y varios equipos en el mismo repositorio pueden causar muchos dolores de cabeza, pero Nx te tiene cubierto. Aprende a compartir código, mantener archivos de configuración y coordinar cambios en un monorepo que puede escalar tanto como tu organización. Nx te permite dar estructura a un repositorio con cientos de colaboradores y elimina las desaceleraciones de CI que normalmente ocurren a medida que crece la base de código.
Índice de contenidos:- Laboratorio 1 - Generar un espacio de trabajo vacío- Laboratorio 2 - Generar una api de node- Laboratorio 3 - Ejecutores- Laboratorio 4 - Migraciones- Laboratorio 5 - Generar una biblioteca de autenticación- Laboratorio 6 - Generar una biblioteca de base de datos- Laboratorio 7 - Añadir un cli de node- Laboratorio 8 - Limites de módulo- Laboratorio 9 - Plugins y Generadores - Introducción- Laboratorio 10 - Plugins y Generadores - Modificación de archivos- Laboratorio 11 - Configuración de CI- Laboratorio 12 - Caché distribuida
Despliega una aplicación de componentes web y configura un flujo de integración continua
DevOps.js Conf 2022DevOps.js Conf 2022
111 min
Despliega una aplicación de componentes web y configura un flujo de integración continua
Workshop
Philippe Ozil
Philippe Ozil
Únete a nosotros en un masterclass en el que desplegarás una aplicación Node.js simple construida con componentes web y configurarás un flujo de integración continua (CI). Aprenderás sobre el poder del Lightning Web Runtime (LWR) y las GitHub Actions.
Aporta Calidad y Seguridad al pipeline de CI/CD
DevOps.js Conf 2022DevOps.js Conf 2022
76 min
Aporta Calidad y Seguridad al pipeline de CI/CD
WorkshopFree
Elena Vilchik
Elena Vilchik
En esta masterclass repasaremos todos los aspectos y etapas al integrar tu proyecto en el ecosistema de Calidad y Seguridad del Código. Tomaremos una aplicación web simple como punto de partida y crearemos un pipeline de CI que active el monitoreo de calidad del código. Realizaremos un ciclo completo de desarrollo, comenzando desde la codificación en el IDE y abriendo una Pull Request, y te mostraré cómo puedes controlar la calidad en esas etapas. Al final de la masterclass, estarás listo para habilitar esta integración en tus propios proyectos.
Potenciando tu CI/CD con GitHub Actions
DevOps.js Conf 2022DevOps.js Conf 2022
155 min
Potenciando tu CI/CD con GitHub Actions
Workshop
David Rubio Vidal
David Rubio Vidal
Obtendrás conocimiento sobre los conceptos de GitHub Actions, como:- El concepto de secretos de repositorio.- Cómo agrupar pasos en trabajos con un propósito determinado.- Dependencias y orden de ejecución de trabajos: ejecutar trabajos en secuencia y en paralelo, y el concepto de matriz.- Cómo dividir la lógica de los eventos de Git en diferentes archivos de flujo de trabajo (en empuje de rama, en empuje a master/principal, en etiqueta, en implementación).- Para respetar el concepto de DRY (No te repitas), también exploraremos el uso de acciones comunes, tanto dentro del mismo repositorio como desde un repositorio externo.