Kuinka yhden linjan muutos pienensi klooniaikojasi 99: llä %

(Pinterest Engineering) (23. lokakuuta 2020)

Urvashi Reddy | Ohjelmistoinsinööri, suunnittelun tuottavuustiimi
Adam Berry | Tekninen johtaja, suunnittelun tuottavuustiimi
Rui Li | Ohjelmistotekniikka, suunnittelun tuottavuustiimi.

Pinterestin suunnittelun tuottavuusryhmä koki pienen muutoksen, jolla oli suuri vaikutus putkilinjojen rakennusaikojen lyhentämisessä. Huomasimme, että refspec-vaihtoehdon asettaminen git-haun aikana vähensi kloonausvaihetta 99%.

Pinterestin tekninen tuottavuus -tiimi on vastuussa insinööreistä, jotka rakentavat ja asentavat ohjelmistoja yrityksessä. Tiimimme ylläpitää useita infrastruktuuripalveluja ja työskentelee usein laajamittaisesti – siirtämällä kaikki Pinterestin ohjelmistot (Bazeliin) luomalla Jatkuva toimitus -alustan nimeltä Hermez , ja ylläpidämme muutamia satoja kertoja päivässä sitoutuneita monoreposointeja, muutamia mainitakseni.

Kaikki suuremmat ponnistelumme on suunniteltu edistämään tavoitetta tehdä ohjelmistokehityksestä ja -toimituksesta nopeaa Pinterestissä. ja kivuton kokemus. Äskettäin muistutimme siitä, kuinka pienillä yksityiskohdilla voi myös olla suuri vaikutus tähän tavoitteeseen. Löysimme unohdetun Git-vaihtoehdon, joka lyhensi merkittävästi jatkuvan integroinnin putkistojemme rakennusaikoja. Jotta voisimme ymmärtää, miten pienellä muutoksella oli niin suuri vaikutus, meidän on jaettava vähän tietoa monorepoistamme ja putkistomme.

Monorepot ja putkilinjat

Meillä on kuusi päävarastoa Pinterestissä: Pinboard, Optimus, Cosmos, Magnus, iOS ja Android. Jokainen niistä on monorepo ja sisältää suuren joukon kielikohtaisia ​​palveluita. Piirilevy on yhtä vanha kuin yritys ja on suurin monorepo. Piirilevyllä on yli 350 000 sitoutumista ja se on 20 Gt: n kokoinen, kun se kloonataan kokonaan.

Paljon koodia ja historiaa sisältävien monorepojen kloonaus on aikaa vievää, ja meidän on tehtävä se usein koko päivän ajan jatkuvassa integraatiossamme putkistot. Pelkästään Pinboardia varten teemme yli 60K: n vedot arkipäivinä. Suurin osa Jenkins-putkiston määrityskripteistämme (kirjoitettu Groovy-muodossa) alkaa ”Checkout” -vaiheella, jossa kloonataan arkisto, jonka myöhemmät vaiheet rakentavat ja testaavat. Tyypillinen Checkout-vaihe näyttää tältä:

Jos käyttäisimme suoraan Git-käyttöliittymää, se kääntäisi seuraavasti:

Vaikka käskemme Gitiä tekemään matala klooni, olemaan hakematta tunnisteita ja noutamaan viimeiset 50 sitoutumista, me en vieläkään suorita tätä operaatiota niin nopeasti kuin voisimme olla. Tämä johtuu siitä, että emme aseta refspec-vaihtoehtoa. Huomaa, että jos et aseta sitä putkilinjan määrityskomentosarjassa, käskemme Gitä hakemaan kaikki refspec: + refs / heads / *: refs / remotes / origin / *. Pinboardin tapauksessa kyseinen toiminto noutaisi yli 2500 haaraa.

Lisäämällä vain refspec-vaihtoehto ja määrittelemällä, mitkä viitteet me välitämme (master , meidän tapauksessamme), voimme rajoittaa viitteet haaramme, josta välitämme, ja säästää paljon aikaa. Tältä näyttää liukukoodissamme:

Tämä yksinkertainen yhden rivin muutos lyhensi klooniaikojamme 99% ja lyhensi huomattavasti rakennusaikoja seurauksena. Kloonaamalla suurimman repomme, Pinboard nousi 40 minuutista 30 sekuntiin. Se osoittaa, että joskus pienillä ponnistuksillamme voi olla myös suuri vaikutus.

Oppimiset

Kuten useimmat kehittäjien tuottavuusryhmät, työskentelemme suurten palvelujen parissa, joilla on suuri vaikutus päivittäiseen kokemukseemme. Joskus yhden linjan korjaukset voivat kuitenkin tehdä valtavan eron. Työmme on sen ymmärtäminen.

Jos sinulla on intohimo kehittäjien tuottavuuden parantamiseksi, liity tiimimme! Palkkaamme insinööritehtäviä Engineering Productivity -tiimiin.

Jos haluat lisätietoja tekniikasta Pinterestissä, tutustu -sivustoomme ja vieraile sivustollamme Pinterest Labs -sivusto. Jos haluat tarkastella avoimia mahdollisuuksia ja hakea niihin, käy Ura -sivullamme.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *