Cómo un cambio de una línea redujo nuestros tiempos de clonación en 99% %

(Ingeniería de Pinterest) (23 de octubre de 2020)

Urvashi Reddy | Ingeniero de software, equipo de productividad de ingeniería de Adam Berry | Jefe de tecnología, equipo de productividad de ingeniería de Rui Li | Ingeniero de software, equipo de productividad de ingeniería

El equipo de productividad de ingeniería de Pinterest se encontró con un pequeño cambio que tuvo un gran impacto en la reducción de los tiempos de construcción en las tuberías. Descubrimos que configurar la opción refspec durante git fetch redujo nuestro paso de clonación en un 99%.

El equipo de productividad de ingeniería de Pinterest es responsable de brindar apoyo a los ingenieros que crean e implementan software en la empresa. Nuestro equipo mantiene una serie de servicios de infraestructura y, a menudo, trabaja en esfuerzos a gran escala: migrando todo el software en Pinterest (a Bazel), creando una plataforma de entrega continua llamada Hermez , y mantener (los) monorepos con los que se comprometen unos cientos de veces al día, por nombrar algunas.

Todos nuestros esfuerzos más grandes están diseñados para avanzar en el objetivo de hacer que el desarrollo y la entrega de software en Pinterest sean rápidos y experiencia indolora. Recientemente, recordamos cómo los pequeños detalles también pueden tener un gran impacto en ese objetivo. Descubrimos una opción de Git pasada por alto que redujo significativamente los tiempos de compilación en nuestras canalizaciones de integración continua. Para entender cómo este pequeño cambio tuvo un impacto tan grande, necesitamos compartir un poco de información sobre nuestros monorepos y nuestros pipelines.

Monorepos and Pipelines

Tenemos seis repositorios principales en Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS y Android. Cada uno es un monorepo y alberga una gran colección de servicios específicos del idioma. Pinboard es tan antiguo como la empresa y es el monorepo más grande. Pinboard tiene más de 350K confirmaciones y tiene un tamaño de 20 GB cuando se clona por completo.

La clonación de monorepos que tienen mucho código e historial lleva mucho tiempo, y debemos hacerlo con frecuencia a lo largo del día en nuestra integración continua oleoductos. Solo para Pinboard, hacemos más de 60K git pulls en días hábiles. La mayoría de nuestros scripts de configuración de canalización de Jenkins (escritos en Groovy) comienzan con una etapa de «Checkout» donde clonamos el repositorio que las etapas posteriores construirán y probarán. Así es como se ve una etapa típica de «pago»:

Si estuviéramos usando la CLI de Git directamente, se traduciría a:

« `

A pesar de que le estamos diciendo a Git que haga un clon superficial, que no obtenga ninguna etiqueta y que obtenga las últimas 50 confirmaciones, nosotros Todavía no estamos ejecutando esta operación tan rápido como podríamos. Eso es porque no estamos configurando la opción refspec . Tenga en cuenta que al no configurarlo en el script de configuración de la canalización, le estamos diciendo a Git que obtenga todas las especificaciones: + refs / heads / *: refs / remotes / origin / *. En el caso de Pinboard, esa operación obtendría más de 2500 ramas.

Simplemente agregando la opción refspec y especificando qué referencias nos interesan (master , en nuestro caso), podemos limitar las referencias a la rama que nos importa y ahorrar mucho tiempo. Así es como se ve en nuestro código de canalización:

Este simple cambio de una línea redujo nuestros tiempos de clonación en un 99% y, como resultado, redujo significativamente nuestros tiempos de construcción. Clonando nuestro repositorio más grande, Pinboard pasó de 40 minutos a 30 segundos. Esto demuestra que a veces nuestros pequeños esfuerzos también pueden tener un gran impacto.

Aprendizajes

Como la mayoría de los equipos de productividad de desarrolladores, trabajamos en grandes servicios que tienen un gran impacto en nuestra experiencia diaria. Sin embargo, a veces son las correcciones de una línea las que pueden marcar una gran diferencia. Nuestro trabajo consiste en entender eso.

Si te apasiona mejorar la productividad de los desarrolladores, ¡únete a nuestro equipo! Estamos contratando para puestos de ingeniería en nuestro equipo de productividad de ingeniería.

Para obtener más información sobre ingeniería en Pinterest, consulte nuestro y visite nuestro Pinterest Labs sitio. Para ver y postularse a oportunidades abiertas, visite nuestra página Carreras .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *