Modificarea unei singure linii a redus timpul de clonare cu 99 %

(Pinterest Engineering) (23 octombrie 2020)

Urvashi Reddy | Inginer software, echipa de productivitate inginerie
Adam Berry | Conducător tehnic, echipă de productivitate inginerie
Rui Li | Inginer software, echipa de productivitate inginerie

Echipa de productivitate inginerie de la Pinterest a întâmpinat o mică modificare care a avut un impact mare în reducerea timpilor de construcție din conducte. Am constatat că setarea opțiunii refspec în timpul preluării git-ului ne-a redus pasul de clonare cu 99%.

Echipa Engineering Productivity de la Pinterest este responsabilă pentru susținerea inginerilor care construiesc și implementează software la companie. Echipa noastră menține o serie de servicii de infrastructură și lucrează adesea la eforturi la scară largă – migrarea tuturor software-urilor de la Pinterest (către Bazel), creând o platformă de livrare continuă numită Hermez , și menținerea (monorepozitelor) care se angajează de câteva sute de ori pe zi, pentru a numi câteva.

Toate eforturile noastre mai mari sunt concepute pentru a progresa în scopul de a face dezvoltarea și livrarea software-ului la Pinterest rapid. și experiență nedureroasă. Recent, ni s-a amintit de modul în care detaliile mici pot avea, de asemenea, un impact mare asupra acestui obiectiv. Am descoperit o opțiune Git ignorată, care a redus semnificativ timpii de construcție în conductele noastre de integrare continuă. Pentru a înțelege cum această mică schimbare a avut un impact atât de mare, trebuie să împărtășim puține informații despre monorepozițiile și conductele noastre.

Monorepoși și conducte

Avem șase depozite principale la Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS și Android. Fiecare este un monorepo și găzduiește o mare colecție de servicii specifice limbii. Pinboard este la fel de vechi ca și compania și este cel mai mare monorepo. Pinboard are peste 350K de comitere și are o dimensiune de 20 GB atunci când este clonată complet.

Clonarea monorepozitelor care au mult cod și istoric necesită mult timp și trebuie să o facem frecvent pe tot parcursul zilei în integrarea noastră continuă conducte. Numai pentru Pinboard, facem mai mult de 60K git pulls în zilele lucrătoare. Majoritatea scripturilor noastre de configurare a conductelor Jenkins (scrise în Groovy) încep cu o etapă „Checkout” în care clonăm depozitul pe care etapele ulterioare îl vor construi și testa. Iată cum arată o etapă tipică „Checkout”:

Dacă am folosi direct Git CLI, s-ar traduce în:

„ `

Chiar dacă îi spunem lui Git să facă o clonă superficială, să nu aducă etichete și să aducă ultimele 50 de confirmări, noi încă nu rulăm această operațiune cât de repede am putea fi. Asta pentru că nu setăm opțiunea refspec . Observați că, dacă nu îl setați în scriptul de configurare a conductei, îi spunem lui Git să preia toate refspecții: + refs / heads / *: refs / telecomenzi / origine / *. În cazul Pinboard, acea operațiune ar prelua mai mult de 2.500 de ramuri.

Prin simpla adăugare a opțiunii refspec și specificarea referințelor care ne interesează (master , în cazul nostru), putem limita referințele la filiala de care ne pasă și economisim mult timp. Iată cum arată în codul nostru de canalizare:

Această simplă modificare cu o singură linie ne-a redus timpul de clonare cu 99% și, ca urmare, a redus semnificativ timpul de construire. Clonând cea mai mare repo a noastră, Pinboard a trecut de la 40 de minute la 30 de secunde. Aceasta demonstrează că uneori micile noastre eforturi pot avea un impact mare.

Învățături

La fel ca majoritatea echipelor de productivitate pentru dezvoltatori, lucrăm la servicii mari care au un impact mare asupra experienței noastre de zi cu zi. Cu toate acestea, uneori corecțiile cu o singură linie pot face o mare diferență. Munca noastră este să înțelegem acest lucru.

Dacă aveți o pasiune pentru îmbunătățirea productivității dezvoltatorilor, alăturați-vă echipei noastre! Angajăm pentru roluri de inginer în echipa noastră de productivitate inginerie.

Pentru a afla mai multe despre inginerie la Pinterest, consultați nostru și vizitați-ne Pinterest Labs site. Pentru a vizualiza și a aplica la oportunități deschise, accesați pagina noastră < Cariere .

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *