Hoe een wijziging van één regel onze kloontijden met 99% verminderde %

(Pinterest Engineering) (23 okt.2020)

Urvashi Reddy | Software Engineer, Engineering Productivity Team
Adam Berry | Tech Lead, Engineering Productivity Team
Rui Li | Software Engineer, Engineering Productivity Team

Het Engineering Productivity-team van Pinterest kwam een ​​kleine wijziging tegen die een grote impact had op het verkorten van de bouwtijd voor pijpleidingen. We ontdekten dat het instellen van de refspec-optie tijdens git fetch onze kloonstap met 99% verminderde.

Het Engineering Productivity-team bij Pinterest is verantwoordelijk voor het ondersteunen van de ingenieurs die software bij het bedrijf bouwen en implementeren. Ons team onderhoudt een aantal infrastructuurservices en werkt vaak op grote schaal – door alle software op Pinterest te migreren (naar Bazel), een platform voor continue levering te creëren met de naam Hermez , en het onderhouden van (de) monorepos die zich een paar honderd keer per dag inzetten, om er maar een paar te noemen.

Al onze grotere inspanningen zijn bedoeld om vooruitgang te boeken met het doel om softwareontwikkeling en levering op Pinterest een snelle en pijnloze ervaring. Onlangs werden we eraan herinnerd hoe kleine details ook een grote impact kunnen hebben op dat doel. We ontdekten een over het hoofd geziene Git-optie die de bouwtijden in onze continue integratiepijplijnen aanzienlijk verkortte. Om te begrijpen hoe deze kleine wijziging zon grote impact heeft gehad, moeten we wat informatie over onze monorepos en pijpleidingen delen.

Monorepos en pijpleidingen

We hebben zes belangrijke opslagplaatsen op Pinterest: Pinboard, Optimus, Cosmos, Magnus, iOS en Android. Elk is een monorepo en herbergt een grote verzameling taalspecifieke diensten. Pinboard is zo oud als het bedrijf en is de grootste monorepo. Pinboard heeft meer dan 350K commits en is 20GB groot wanneer het volledig wordt gekloond.

Het klonen van monorepos met veel code en geschiedenis is tijdrovend en we moeten dit de hele dag door regelmatig doen in onze continue integratie pijpleidingen. Alleen al voor Pinboard doen we op werkdagen meer dan 60K git pulls. De meeste van onze Jenkins pipeline-configuratiescripts (geschreven in Groovy) beginnen met een “Checkout” -fase waarin we de repository klonen die in de latere fasen zal worden gebouwd en getest. Dit is hoe een typische “Checkout” -fase eruit ziet:

Als we de Git CLI rechtstreeks zouden gebruiken, zou deze vertalen naar:

“ `

Hoewel we Git vertellen een ondiepe kloon te doen, geen tags op te halen en de laatste 50 commits op te halen, We voeren deze operatie nog steeds niet zo snel uit als we zouden kunnen zijn. Dat komt omdat we de refspec -optie niet instellen. Merk op dat door het niet in het pipeline-configuratiescript in te stellen, we Git vertellen om alle refspecs op te halen: + refs / heads / *: refs / remotes / origin / *. In het geval van Pinboard zou die bewerking meer dan 2500 takken ophalen.

Door simpelweg de refspec-optie toe te voegen en te specificeren om welke refs we geven (master , in ons geval), kunnen we de refs beperken tot de branche waar we om geven en veel tijd besparen. Hier is hoe dat eruit ziet in onze pijplijncode:

Deze eenvoudige wijziging van één regel heeft onze kloontijden met 99% verminderd en daardoor onze build-tijden aanzienlijk verkort. Het klonen van onze grootste opslagplaats, Pinboard, ging van 40 minuten naar 30 seconden. Het laat zien dat onze kleine inspanningen soms ook een grote impact kunnen hebben.

Learnings

Zoals de meeste productiviteitsteams voor ontwikkelaars, werken we aan grote services die een grote impact hebben op onze dagelijkse ervaring. Het zijn echter soms de oplossingen in één regel die een groot verschil kunnen maken. Ons werk is om dat te begrijpen.

Als je een passie hebt voor het verbeteren van de productiviteit van ontwikkelaars, word dan lid van ons team! We nemen mensen in dienst voor technische functies in ons Engineering Productivity-team.

Voor meer informatie over Engineering op Pinterest, bekijk onze , en bezoek onze Pinterest Labs site. Ga naar onze Carrière pagina om vacatures te bekijken en hierop te solliciteren.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *