Spring til indhold

runnerhut (løberhytte)

Guides

Løsninger på de CI-problemer teams reelt løber ind i.

Omkostninger13

Sådan reduceres omkostningerne til GitHub ActionsCI regningen vokser hurtigere end holdet, og ingen ved hvorfor.Sådan måler du CI-omkostninger pr. pull-anmodningDu kender den månedlige total, men ikke hvad en enkelt pull-anmodning koster.Sådan tilskrives CI-omkostninger til holdCI-forbrug er én linje på fakturaen, og ingen hold føler sig ansvarlige for det.Sådan indstilles et CI-minutterbudgetUdgifter opdages i slutningen af måneden i stedet for at blive kontrolleret i løbet af den.Når større løbere rent faktisk sparer pengeEn større løber koster mere i minuttet, så det er uklart, om den samlet set er billigere.Sådan reducerer du omkostningerne til macOS runnermacOS dominerer CI-regningen.Sådan reduceres CI-udgangsomkostningerDataoverførsel er en stor og voksende del af BYOC-regningen.Sådan reduceres ECR pull-omkostningerContainer image pulls genererer betydelige dataoverførselsomkostninger.Sådan reduceres S3-overførselsomkostninger i CICache- og artefakttrafik til S3 er dyrt.De reelle omkostninger ved selvværtede løbereSelvværtede løbere ser gratis ud ved siden af fakturering pr. minut.Sådan bruger du spot-instanser til CI-løbereOn-demand-instanser er dyre for arbejdsbelastninger, der i sagens natur kan prøves igen.Sådan tilpasser du dine løbere i den rigtige størrelseLøberstørrelser blev valgt én gang og blev aldrig genbesøgt.Hvordan man kører CI økonomisk på open sourceOpen source CI er gratis på GitHub-hostede løbere, men langsom, og selvhosting er usikker.

Caching16

Sådan får du CI-caches til at fortsætteCaches er konfigureret, men hitfrekvensen er lav.Sådan omgås cachegrænsen på 10 GBDine caches overstiger 10 GB pr. lager og begynder stille at smide dem ud.Sådan deler du en build-cache på tværs af repositoriesHvert lager bevarer sin egen cache for de samme delte afhængigheder.Sådan deler du en Docker-cache mellem jobHvert matrixben genopbygger de samme lag.Sådan repareres Docker cache-ugyldiggørelseDocker lag genopbygges, selv når de relevante filer ikke blev ændret.Hvordan man skriver en cache-nøgle, der rammerCachen er konfigureret, men går glip af hver kørsel.Sådan bruger du ccache i GitHub ActionsC og C++ builds omkompilerer alt på hver kørsel.Sådan bruger du sccache til Rust buildsCargo genopbygger afhængigheder, når målkatalogcachen mangler.Sådan aktiverer du Gradle-konfigurationscachenGradle bruger 30 til 60 sekunder på at konfigurere, før han kompilerer noget.Sådan cachelagres værktøjskædeadministratorermise, asdf eller proto geninstaller sprogkørselstider ved hver kørsel.Sådan cachelagres NuGet-pakkerdotnet gendannelse downloader de samme pakker ved hver kørsel.Sådan cachelagres Jest-transformationerJest re-transformerer hver fil på hver kørsel.Sådan cachelagres vcpkg- og Conan-pakkerC++ afhængighedsadministratorer genopbygger pakker fra kilden ved hver kørsel.Sådan cachelagres Xcode DerivedDataXcode genopbygger hele projektet på hver CI-kørsel.Valg af en buildx-cache-backendDer er fire cache-backends, og det er uklart, hvilke der skal bruges.Sådan holder du basisgrencachen varmNye funktionsgrene starter altid med en kold cache.

Skala28

Sådan skalerer du selvværtede løbereSelvværtede løbere står enten i kø i spidsbelastningsperioder eller sidder stille og dyrt.Sådan bruger du løbergrupperEthvert lager kan planlægge job på enhver runner.Hvordan man designer en runner label-strategiEtiketter voksede organisk, og ingen ved, hvilke de skal bruge.Hosted eller BYOC: hvordan man vælgerDu er usikker på, om du skal bruge hostede løbere eller implementere i din egen sky.Sådan bruger du genanvendelige arbejdsgange i stor skalaHalvtreds lagre har halvtreds lidt forskellige kopier af den samme pipeline.Hvordan man koordinerer arbejdsgange på tværs af repositoriesEn ændring i ét lager skal udløse builds i andre.Sådan bygger du brugerdefinerede løberbillederHvert job bruger minutter på at installere de samme værktøjer.Sådan udrulles grundlæggende billedopdateringer sikkertEn grundlæggende billedopdatering bryder builds på tværs af mange lagre på én gang.Hvordan man håndterer afhængighedsbot CI-belastningDependabot åbner tredive pull-anmodninger og CI-omkostningsspidser.Sådan arbejder du med samtidighedsgrænserJobs kø, og det er ikke klart, hvilken grænse der er bindende.Hvordan man bruger containerjob effektivtContainerjob giver reproducerbarhed, men bryder caching.Sådan bruges servicebeholdere korrektTests mislykkes med mellemrum ved opstart.Hvordan man bygger én gang og implementerer mange gangeDen samme artefakt er genopbygget til ethvert miljø.Sådan struktureres implementeringsjobImplementeringer er langsomme, risikable og svære at revidere.Hvordan man kører forhåndsvisningsmiljøer effektivtHver pull-anmodning venter på en fuld miljøbygning.Hvordan man strukturerer release buildsUdgivelsesbyg er langsomme og til tider ikke-reproducerbare.Sådan udgiver du byggeartefakterArtefaktlageromkostninger vokser, og opbevaring blev aldrig konfigureret.Sådan håndteres store artefaktuploadsUpload af build-output tager minutter.Sådan får du inkrementelle builds i CICI laver altid en ren build, selvom dit byggesystem understøtter trinvis kompilering.Sådan overfører du data mellem jobJobs skal dele byggeoutput, og det er uklart hvordan.Hvordan man bruger matrix bygger godtMatrixen er vokset, og ingen kan huske, hvorfor hver kombination eksisterer.Sådan styres matrixeksplosionEn lille matrixændring tredoblede jobantallet og regningen.Sådan dimensioneres løbere til Java-buildsDu gætter på en løberstørrelse til en Maven- eller Gradle-bygning.Sådan dimensioneres løbere til Node-testsuiterJest eller Vitest arbejdere enten sulter eller tæsker, og du er ikke sikker på hvilken.Sådan dimensioneres løbere til Python-testsuiterpytest kører på en kerne, mens løberen har otte tomgang.Sådan dimensioneres løbere til Rust-bygningerCargo bygger skala med kerner, men det er uklart, hvor langt det rækker.Sådan dimensioneres løbere til Docker-bygningerDu vælger en løbestørrelse til billedopbygninger.Sådan dimensioneres løbere til Android buildsGradle-samlinger og instrumenteringstest kræver meget forskellige maskiner.