runnerhut
Guider
Løsninger på CI-problemene team faktisk møter.
Hastighet13
Hvordan øke hastigheten på GitHub ActionsRørledningen din tar lengre tid enn noen ønsker å vente, og det er ikke åpenbart hvor tiden blir av.Hvordan finne det langsomme trinnet i en arbeidsflytThe pipeline is slow but every individual step looks reasonable.Hvordan redusere GitHub Actions kaldstarterJobbene sitter i 30 til 90 sekunder før det første trinnet går.Hvordan diagnostisere GitHub Actions køtiderJobbene står i kø i minutter før en løper henter dem.Hvordan gjøre git checkout raskerehandlinger/utsjekking tar minutter på et stort lager.Hvordan kjøre CI på et veldig stort depotUtsjekking, indeksering og statusrapportering forringes etter hvert som depotet vokser.Hvordan øke hastigheten på Git LFS-utsjekkeneLFS-objekter lastes ned serielt og dominerer utsjekkingstiden.Hvordan eliminere ledig tid i jobberJobber bruker tid på å gjøre ingenting - venter på en tjeneste, en søvn eller en avstemningssløyfe.Hvordan håndtere langvarige jobberNoen jobber går i timevis og når noen ganger grensen på seks timer.Hvordan kjøre nattlig bygger effektivtNattbygg er dyre og ingen leser resultatene.Hvordan stoppe CI rerun stormerUtviklere kjører sviktende jobber gjentatte ganger, multipliserer kostnadene og skjuler reelle feil.Hvordan sønderdele tester på tvers av en matriseÉn lang testjobb dominerer rørledningen.Slik kjører du kun testene som er berørt av en endringHvert trykk kjører hele testpakken uavhengig av hva som endret seg.
Kostnad13
Hvordan redusere kostnadene for GitHub ActionsCI-regningen vokser raskere enn teamet, og ingen er sikre på hvorfor.Hvordan måle CI-kostnad per pull-forespørselDu vet den månedlige summen, men ikke hva en enkelt pull-forespørsel koster.Hvordan tilskrive CI-kostnader til teamCI-forbruk er én linje på fakturaen, og ingen team føler seg ansvarlige for det.Hvordan sette et CI-minuttbudsjettUtgifter oppdages i slutten av måneden i stedet for kontrollert i løpet av den.Når større løpere faktisk sparer pengerEn større løper koster mer per minutt, så det er uklart om det totalt sett er billigere.Hvordan kutte kostnader for macOS runnermacOS dominerer CI-regningen.Hvordan redusere CI-utgangskostnaderDataoverføring er en stor og økende andel av BYOC-regningen.Hvordan redusere ECR-trekkkostnadeneContainer image pulls genererer betydelige dataoverføringskostnader.Hvordan redusere S3-overføringskostnadene i CIBuffer- og artefakttrafikk til S3 er dyrt.Den virkelige kostnaden for løpere som er vert for selvSelvvertende løpere ser gratis ut ved siden av fakturering per minutt.Hvordan bruke spot-instanser for CI-løpereOn-demand-forekomster er dyre for arbeidsbelastninger som iboende kan prøves på nytt.Slik tilpasser du løperne i riktig størrelseLøperstørrelser ble valgt én gang og ble aldri sett på nytt.Hvordan kjøre CI økonomisk på åpen kildekodeÅpen kildekode CI er gratis på GitHub-vertsbaserte løpere, men treg, og selvhosting er utrygt.
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.
Docker12
Hvordan sette opp Docker lagbufringDocker-bygg tar ti minutter fordi hvert lag gjenoppbygges.Hvordan optimalisere en Dockerfile for CISmå kodeendringer utløser lange ombygginger.Slik bruker du flertrinns Docker-byggBildene er store og inneholder byggeverktøy som ikke skal sendes.Slik kjører du samtidig Docker bygger sikkertParallelle matrisebein kjemper og bygger tregere eller svikter.Slik bruker du en ekstern Docker-byggerLagbufferen overføres til og fra løperen på hvert bygg.Hvordan bygge multiplattformbilder rasktÅ legge til linux/arm64 gjør at byggingen tar tjue minutter.Hvordan redusere størrelsen på beholderbildetBilder er hundrevis av megabyte og trege å hente i hver jobb.Hvordan overføre hemmeligheter til en Docker-byggDu trenger et privat registertoken eller SSH-nøkkel under byggingen.Slik konfigurerer du byggeprofiler for DockerUlike bilder trenger forskjellige byggerressurser.Hvordan bygge mange bilder fra en monorepoHvert trykk bygger hvert bilde i depotet.Hvordan publisere til flere registreDet samme bildet bygges én gang per register.Hvordan sette opp en registergjennomføringsbufferBildetrekk er sakte, og du fortsetter å nå Docker Hub-hastighetsgrenser.
arm647
Hvordan flytte CI til arm64-løpereDu distribuerer til Graviton eller Ampere, men bygger på x64.sjekkliste for arm64-migreringDu vil flytte til arm64 uten å bryte rørledningen.Krysskompilering versus innfødt arm64Du trenger arm64-binærfiler og er usikker på om du skal krysskompilere eller bygge naturlig.Hvorfor QEMU arm64 bygger er så tregeÅ legge til linux/arm64 til en Docker-bygg gjør det tjue ganger tregere.Fikser node-native moduler på arm64npm-installasjonen mislykkes eller kompileres fra kilden på arm64-løpere.Feste Python-hjul på arm64pip install kompilerer pakker fra kilden på arm64.Bygger på AWS Graviton-løpereDu vil ha Graviton-pris-ytelsesfordelen i CI.
macOS og iOS8
Hvordan kutte Xcode byggetider i CIXcode-bygg tar tjue minutter på hver løpetur.Hvordan øke hastigheten på iOS-simulatortesterSimulatortester tar en halvtime.Hvordan håndtere iOS-kodesignering i CISignering fungerer lokalt og svikter med jevne mellomrom i CI.Hvordan notarisere macOS-apper i CINotarisering er treg og av og til tidsavbrutt.Retter utmattelse av macOS runner-diskJobber mislykkes uten plass igjen på enheten på macOS.Hvordan parallellisere iOS CIiOS CI er seriell og macOS-minutter er dyre.Hvordan laste opp til TestFlight fra CITestFlight-opplastinger er trege og noen ganger mislykkes etter en vellykket konstruksjon.Slik pinner du Xcode-versjonerEn løperbildeoppdatering endret Xcode-versjonen stille og bygget endret seg med den.
Windows5
Hvordan gjøre Windows CI raskereWindows-jobber tar tre ganger så lang tid som tilsvarende Linux-jobber.Hvordan bufre MSBuild-utdataHvert bygg rekompilerer alle prosjekter.Installere Visual Studio-komponenter i CIEn nødvendig VS-arbeidsbelastning mangler, og installasjonen tar femten minutter.Hvordan signere Windows-binærfiler i CIAutentikodesignering trenger et sertifikat som ikke må eksponeres.Hvordan parallellisere .NET-tester.NET-tester kjører serielt og tar tjue minutter.
Sikkerhet6
Hvordan administrere hemmeligheter i GitHub ActionsHemmeligheter er spredt over depotinnstillinger, og ingen vet hva som fortsatt brukes.Slik kjører du CI-løpere inne i VPC-en dinByggene må nå en intern tjeneste som ikke er offentlig eksponert.Hvordan gi løpere en statisk IPEn tredjepartstjeneste krever IP-godkjenningslisting og vertsbaserte løper-IP-er endres hele tiden.Slik kjører du sikkerhetsskanninger uten å bremse CISårbarhetsskanning legger til minutter til hver pull-forespørsel.Slik sikrer du CI-forsyningskjedenTredjepartshandlinger kjører med tilgang til depotet og hemmeligheter.Slik skjerper du arbeidsflyttillatelserHver arbeidsflyt kjører med skrivetilgang den ikke trenger.
Observerbarhet10
Hvordan samle inn løperberegningerDu kan ikke se om en jobb er CPU-bundet, minnebundet eller diskbundet.Slik sporer du prosentiler for byggevarighetGjennomsnittlig byggetid ser bra ut, men utviklere klager fortsatt.Hvordan eksportere CI-spor med OpenTelemetryCI-timingdata lever i et separat verktøy fra resten av observerbarheten din.Hvordan spørre CI-data programmatiskDu trenger CI-data i et dashbord eller en ukentlig rapport.Hvordan kjøre en ukentlig CI-helserapportCI degraderes gradvis og ingen legger merke til det før det er dårlig.Hvordan varsle om CI-regresjonerEn endring gjør CI 40 % langsommere og den går ubemerket hen i flere uker.Hvordan håndtere flassete CI-jobberTester mislykkes tilfeldig og folk prøver på nytt til de består.Hvordan feilsøke en sviktende arbeidsflytEn jobb feiler i CI og fungerer alle andre steder.Hvordan stille inn CI-tjenestenivåerIngen er enige om hvor raskt CI skal være, så det blir aldri prioritert.Hvordan eksponere CI-data for AI-agenterAgenter som feilsøker CI-feil har bare loggtekst å jobbe med.
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.