Jak změna jednoho řádku snížila naše časy klonů o 99 %

(Pinterest Engineering) (23. října 2020)

Urvashi Reddy | Softwarový inženýr, tým strojírenské produktivity
Adam Berry | Tech Lead, Engineering Productivity Team
Rui Li | Softwarový inženýr, tým strojírenské produktivity

Tým strojírenské produktivity na Pinterestu narazil na malou změnu, která měla velký dopad na zkrácení doby sestavování napříč kanály. Zjistili jsme, že nastavení možnosti refspec během git fetch snížilo náš krok klonování o 99%.

Tým Engineering Productivity ve společnosti Pinterest je zodpovědný za podporu techniků, kteří ve společnosti vytvářejí a nasazují software. Náš tým udržuje řadu infrastrukturních služeb a často pracuje na velkém úsilí – migraci veškerého softwaru na Pinterestu (do Bazelu), vytvoření platformy Continuous Delivery s názvem Hermez , a udržování monorepos, která se zavázala několik stokrát denně, abychom jmenovali alespoň některé.

Veškeré naše větší úsilí je navrženo tak, aby pokročilo v cíli rychlého vývoje a dodávky softwaru na Pinterest a bezbolestný zážitek. Nedávno jsme si připomněli, jak malé detaily mohou mít také velký dopad na tento cíl. Objevili jsme přehlédnutou možnost Git, která významně snížila časy sestavení v našich potrubích pro nepřetržitou integraci. Abychom pochopili, jak tato malá změna měla tak velký dopad, musíme sdílet malé informace o našich monorepos a našich potrubích.

Monorepos a Pipelines

Na Pinterestu máme šest hlavních úložišť: Pinboard, Optimus, Cosmos, Magnus, iOS a Android. Každý z nich je monorepo a má velkou sbírku jazykově specifických služeb. Pinboard je stejně starý jako společnost a je největším monorepo. Pinboard má více než 350 tis. Závazků a při úplném klonování má velikost 20 GB.

Klonování monorepos, které mají spoustu kódu a historie, je časově náročné a v naší nepřetržité integraci to musíme dělat často po celý den. potrubí. Jen v případě Pinboardu provádíme v pracovní dny více než 60 tis. Gitů. Většina našich konfiguračních skriptů potrubí Jenkins (napsaných v Groovy) začíná fází „Checkout“, kde klonujeme úložiště, které budou sestavovat a testovat pozdější fáze. Takto vypadá obvyklá fáze „Pokladna“:

Pokud bychom přímo používali Git CLI, přeloží se to do:

„ „

I když říkáme Gitu, aby provedl mělký klon, nenačetl žádné značky a načetl posledních 50 závazků, my tuto operaci stále neprovádíme tak rychle, jak bychom mohli. Je to proto, že nenastavujeme možnost refspec . Všimněte si, že když to nenastavíte ve skriptu konfigurace kanálu, řekneme Gitu, aby načetl všechny refspecs: + refs / heads / *: refs / remotes / origin / *. V případě Pinboardu by tato operace přinesla více než 2 500 větví.

Pouhým přidáním možnosti refspec a zadáním, na kterých refs nám záleží (master , v našem případě), můžeme omezit doporučení na pobočku, na které nám záleží, a ušetřit spoustu času. V našem kódu kanálu vypadá takto:

Tato jednoduchá změna jednoho řádku snížila naše časy klonů o 99% a ve výsledku výrazně snížila naše časy sestavení. Klonováním našeho největšího repo se Pinboard změnil ze 40 minut na 30 sekund. Ukazuje se, že někdy může mít velký dopad i naše malé úsilí.

Učení

Jako většina týmů produktivity vývojářů pracujeme na velkých službách, které mají velký dopad na naše každodenní zkušenosti. Někdy jsou to však opravy jednoho řádku, které mohou udělat obrovský rozdíl. Naše práce spočívá v pochopení toho.

Pokud máte vášeň pro zlepšování produktivity vývojářů, připojte se k našemu týmu! Hledáme inženýrské role v našem týmu produktivní produktivity.

Chcete-li se dozvědět více o inženýrství na Pinterestu, podívejte se na naši a navštivte naši Pinterest Labs web. Chcete-li zobrazit otevřené příležitosti a přihlásit se k nim, navštivte naši Kariéry stránku.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *