In che modo una modifica di una riga ha ridotto i nostri tempi di clonazione del 99 %

(Pinterest Engineering) (23 ottobre 2020)

Urvashi Reddy | Ingegnere del software, team di produttività tecnica di Adam Berry | Responsabile tecnico, team di produttività ingegneristica di Rui Li | Software Engineer, Engineering Productivity Team

Il team Engineering Productivity di Pinterest ha riscontrato un piccolo cambiamento che ha avuto un grande impatto sulla riduzione dei tempi di costruzione attraverso le pipeline. Abbiamo scoperto che limpostazione dellopzione refspec durante git fetch ha ridotto il nostro passo di clonazione del 99%.

Il team di produttività ingegneristica di Pinterest è responsabile del supporto degli ingegneri che creano e distribuiscono software presso lazienda. Il nostro team gestisce una serie di servizi di infrastruttura e spesso lavora su larga scala, migrando tutto il software su Pinterest (su Bazel), creando una piattaforma di consegna continua chiamata Hermez , e mantenendo (i) monorepos che si impegnano a poche centinaia di volte al giorno, per citarne alcuni.

Tutti i nostri maggiori sforzi sono progettati per progredire verso lobiettivo di rendere lo sviluppo e la consegna del software su Pinterest e unesperienza indolore. Recentemente, ci è stato ricordato come anche piccoli dettagli possono avere un grande impatto su tale obiettivo. Abbiamo scoperto unopzione Git trascurata che ha ridotto significativamente i tempi di compilazione nelle nostre pipeline di integrazione continua. Per capire come questo piccolo cambiamento abbia avuto un impatto così grande, dobbiamo condividere alcune informazioni sui nostri monorepos e sulle nostre pipeline.

Monorepos e pipeline

Abbiamo sei repository principali su Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS e Android. Ognuno è un monorepo e ospita unampia raccolta di servizi specifici per la lingua. La bacheca è vecchia quanto lazienda ed è il monorepo più grande. Pinboard ha più di 350.000 commit e una dimensione di 20 GB quando clonato completamente.

La clonazione di monorepos con molto codice e cronologia richiede tempo e dobbiamo farlo frequentemente durante il giorno nella nostra integrazione continua condutture. Solo per la bacheca, eseguiamo più di 60.000 git pull nei giorni lavorativi. La maggior parte dei nostri script di configurazione della pipeline Jenkins (scritti in Groovy) iniziano con una fase di “Checkout” in cui cloniamo il repository che le fasi successive costruiranno e testeranno. Ecco come appare una tipica fase di “Pagamento”:

Se usassimo direttamente la CLI Git, si tradurrebbe in:

“ `

Anche se stiamo dicendo a Git di eseguire un clone superficiale, di non recuperare nessun tag e di recuperare gli ultimi 50 commit, noi Non stiamo ancora eseguendo questa operazione il più velocemente possibile. Questo perché non stiamo impostando lopzione refspec . Si noti che, non impostandolo nello script di configurazione della pipeline, stiamo dicendo a Git di recuperare tutti i refspec: + refs / heads / *: refs / remotes / origin / *. Nel caso di Pinboard, tale operazione recupererebbe più di 2.500 rami.

Aggiungendo semplicemente lopzione refspec e specificando quali riferimenti ci interessano (master , nel nostro caso), possiamo limitare i ref al ramo a cui teniamo e risparmiare molto tempo. Ecco come appare il nostro codice della pipeline:

Questa semplice modifica di una riga ha ridotto i tempi di clonazione del 99% e di conseguenza ha ridotto notevolmente i tempi di creazione. Clonando il nostro repository più grande, Pinboard è passato da 40 minuti a 30 secondi. Ciò dimostra che a volte anche i nostri piccoli sforzi possono avere un grande impatto.

Apprendimento

Come la maggior parte dei team di produttività degli sviluppatori, lavoriamo su servizi di grandi dimensioni che hanno un grande impatto sulla nostra esperienza quotidiana. Tuttavia, a volte sono le correzioni di una riga che possono fare unenorme differenza. Il nostro lavoro consiste nel comprenderlo.

Se hai una passione per migliorare la produttività degli sviluppatori, unisciti al nostro team! Stiamo assumendo ruoli tecnici nel nostro team di produttività ingegneristica.

Per ulteriori informazioni sullingegneria in Pinterest, dai unocchiata al nostro e visita il nostro Pinterest Labs sito. Per visualizzare e presentare domanda per le opportunità aperte, visita la nostra pagina Opportunità di lavoro .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *