Hopp til innhold

runnerhut

Guider

Løsninger på CI-problemene team faktisk møter.

Buffer16

Hvordan få CI-cacher til å vedvareCacher er konfigurert, men trefffrekvensen er lav.Hvordan omgå cachegrensen på 10 GBCachene dine overskrider 10 GB per lagringssted og begynner å kaste ut stille.Hvordan dele en byggebuffer på tvers av depoterHvert depot opprettholder sin egen hurtigbuffer for de samme delte avhengighetene.Hvordan dele en Docker-buffer mellom jobberHvert matriseben gjenoppbygger de samme lagene.Slik fikser du cacheugyldiggjøring av DockerDocker lag gjenoppbygges selv når de relevante filene ikke ble endret.Hvordan skrive en hurtigbuffertast som trefferCachen er konfigurert, men går glipp av hver kjøring.Hvordan bruke ccache i GitHub ActionsC- og C++-bygg kompilerer alt på nytt på hver kjøring.Hvordan bruke sccache for Rust-byggCargo gjenoppbygger avhengigheter når målkatalogbufferen går glipp av.Slik aktiverer du Gradle-konfigurasjonsbufferenGradle bruker 30 til 60 sekunder på å konfigurere før han kompilerer noe.Hvordan cache verktøykjedeadministratorermise, asdf eller proto reinstaller språkkjøringer på hver kjøring.Hvordan bufre NuGet-pakkerdotnet restore laster ned de samme pakkene på hver kjøring.Hvordan bufre Jest-transformasjonerJest transformerer hver fil på nytt på hver kjøring.Hvordan bufre vcpkg- og Conan-pakkerC++-avhengighetsadministratorer bygger om pakker fra kilden ved hver kjøring.Hvordan cache Xcode DerivedDataXcode gjenoppbygger hele prosjektet på hver CI-kjøring.Velge en buildx cache backendDet er fire cache-backends, og det er uklart hvilke du skal bruke.Hvordan holde basisgrenens cache varmNye funksjonsgrener starter alltid med en kald cache.

Skala28

Hvordan skalere løpere med egen vertskapSelvvertende løpere står enten i kø på topp eller sitter stille og dyrt.Hvordan bruke løpergrupperEthvert depot kan planlegge jobber på en hvilken som helst løper.Hvordan designe en runner label-strategiEtiketter vokste organisk og ingen vet hvilke de skal bruke.Hosted eller BYOC: hvordan velgeDu er usikker på om du skal bruke vertsbaserte løpere eller distribuere i din egen sky.Hvordan bruke gjenbrukbare arbeidsflyter i stor skalaFemti depoter har femti litt forskjellige kopier av samme rørledning.Hvordan koordinere arbeidsflyter på tvers av depoterEn endring i ett depot må utløse bygg i andre.Hvordan bygge tilpassede løperbilderHver jobb bruker minutter på å installere de samme verktøyene.Slik ruller du ut grunnleggende bildeoppdateringer på en sikker måteEn grunnleggende bildeoppdatering bryter byggverk på tvers av mange depoter samtidig.Hvordan håndtere avhengighetsbot CI-belastningDependabot åpner tretti pull-forespørsler og CI-kostnadspikes.Hvordan jobbe med samtidighetsgrenserJobbkø og det er ikke klart hvilken grense som er bindende.Hvordan bruke containerjobber effektivtBeholderjobber gir reproduserbarhet, men bryter bufring.Hvordan bruke servicebeholdere riktigTester mislykkes med jevne mellomrom ved oppstart.Hvordan bygge én gang og distribuere mange gangerThe same artefact is rebuilt for every environment.Hvordan strukturere distribusjonsjobberImplementering er sakte, risikabelt og vanskelig å revidere.Hvordan kjøre forhåndsvisningsmiljøer effektivtHver pull-forespørsel venter på en full miljøbygging.Hvordan strukturere utgivelsesbyggUtgivelsesbygg er trege og noen ganger ikke-reproduserbare.Hvordan publisere byggeartefakterArtefaktlagringskostnadene vokser og oppbevaring ble aldri konfigurert.Hvordan håndtere store artefaktopplastingerOpplasting av byggeutdata tar minutter.Hvordan få inkrementelle bygg i CICI gjør alltid en ren build selv om byggesystemet ditt støtter inkrementell kompilering.Hvordan overføre data mellom jobberJobber må dele byggeproduksjon, og det er uklart hvordan.Hvordan du bruker matrise bygger godtMatrisen har vokst og ingen husker hvorfor hver kombinasjon eksisterer.Hvordan kontrollere matriseeksplosjonEn liten matriseendring tredoblet jobbantallet og regningen.Slik dimensjonerer du løpere for Java-byggDu gjetter på en løperstørrelse for en Maven- eller Gradle-konstruksjon.Slik dimensjonerer du løpere for Node-testsuiterJest- eller Vitest-arbeidere enten sulter eller slår, og du er ikke sikker på hvilken.Slik dimensjonerer du løpere for Python-testsuiterpytest kjører på en kjerne mens løperen har åtte tomganger.Slik dimensjonerer du løpere for Rust-byggCargo bygger skala med kjerner, men det er uklart hvor langt det går.Slik dimensjonerer du løpere for Docker-byggDu velger en løperstørrelse for bildebygginger.Slik dimensjonerer du løpere for Android-byggGradle-monteringer og instrumenteringstester trenger svært forskjellige maskiner.