runnerhut (loperhut)
Gidsen
Oplossingen voor de CI-problemen die teams echt tegenkomen.
Snelheid13
Hoe te versnellen GitHub ActionsUw pijplijn duurt langer dan iemand wil wachten, en het is niet duidelijk waar de tijd naartoe gaat.Hoe je de langzame stap in een workflow kunt vindenDe pijplijn is traag, maar elke afzonderlijke stap lijkt redelijk.Hoe u GitHub Actions koude starts kunt verminderenTaken duren 30 tot 90 seconden voordat de eerste stap wordt uitgevoerd.Een diagnose stellen van GitHub Actions wachtrijtijdenTaken staan minutenlang in de wachtrij voordat een hardloper ze ophaalt.Hoe je Git Checkout sneller kunt makenacties/afrekenen duurt minuten op een grote repository.Hoe CI op een zeer grote repository te draaienAfrekenen, indexeren en statusrapportage gaan allemaal achteruit naarmate de repository groeit.Hoe u Git LFS-kassa's kunt versnellenLFS-objecten worden serieel gedownload en domineren de afrekentijd.Hoe u inactieve tijd in banen kunt eliminerenBanen besteden tijd aan nietsdoen: wachten op een dienst, een slaappauze of een poll-loop.Hoe om te gaan met langlopende klussenSommige banen duren uren en bereiken af en toe de limiet van zes uur.Hoe u nachtelijke builds efficiënt kunt uitvoerenNachtelijke builds zijn duur en niemand leest de resultaten.Hoe u CI-herhalingsstormen kunt stoppenOntwikkelaars voeren mislukte taken herhaaldelijk uit, waardoor de kosten toenemen en echte mislukkingen verborgen blijven.Hoe u tests in een matrix kunt verdelenEén lange testklus domineert de pijplijn.Alleen de tests uitvoeren die door een wijziging worden beïnvloedBij elke push wordt de hele testsuite uitgevoerd, ongeacht wat er is veranderd.
Kosten13
Hoe u de GitHub Actions-kosten kunt verlagenDe CI-rekening groeit sneller dan het team en niemand weet precies waarom.Hoe u de CI-kosten per pull-aanvraag kunt metenU kent het maandtotaal, maar niet wat een enkele pull-request kost.Hoe CI-kosten aan teams kunnen worden toegeschrevenCI-uitgaven vormen één regel op de factuur en geen enkel team voelt zich er verantwoordelijk voor.Hoe u een CI-minutenbudget insteltDe uitgaven worden aan het eind van de maand ontdekt en niet tijdens de maand gecontroleerd.Wanneer grotere hardlopers daadwerkelijk geld besparenEen grotere runner kost meer per minuut, dus het is onduidelijk of deze in totaal goedkoper is.Hoe u de kosten van macOS-runners kunt verlagenmacOS domineert de CI-wet.Hoe u de uitgaande CI-kosten kunt verlagenGegevensoverdracht vormt een groot en groeiend deel van de BYOC-rekening.Hoe u de ECR-pull-kosten kunt verlagenHet ophalen van containerimages brengt aanzienlijke kosten voor gegevensoverdracht met zich mee.Hoe u de S3-overdrachtskosten in CI kunt verlagenCache- en artefactverkeer naar S3 is duur.De werkelijke kosten van zelfgehoste hardlopersZelfgehoste hardlopers zien er gratis uit naast facturering per minuut.Spotinstances gebruiken voor CI-hardlopersInstanties op aanvraag zijn duur voor werkbelastingen die inherent opnieuw kunnen worden geprobeerd.Hoe u uw hardlopers op de juiste maat kunt instellenRunner-maten zijn één keer gekozen en nooit opnieuw bekeken.Hoe u CI economisch kunt uitvoeren op open sourceOpen-source CI is gratis op door GitHub gehoste hardlopers, maar traag en zelfhosting is onveilig.
Caching16
Hoe u ervoor kunt zorgen dat CI-caches daadwerkelijk blijven bestaanCaches zijn geconfigureerd, maar het trefferpercentage is laag.Hoe u de cachelimiet van 10 GB kunt omzeilenUw caches overschrijden de 10 GB per repository en beginnen stilletjes te worden verwijderd.Hoe u een build-cache deelt tussen repository'sElke repository onderhoudt zijn eigen cache voor dezelfde gedeelde afhankelijkheden.Een Docker-cache delen tussen takenElke matrixpoot bouwt dezelfde lagen opnieuw op.Hoe u Docker-cache-invalidatie kunt oplossenDocker-lagen worden opnieuw opgebouwd, zelfs als de relevante bestanden niet zijn gewijzigd.Hoe u een cachesleutel schrijft die toeslaatDe cache is geconfigureerd, maar mist bij elke run.Cache gebruiken in GitHub ActionsC- en C++-builds compileren alles bij elke run opnieuw.Sccache gebruiken voor Rust-buildsCargo herbouwt afhankelijkheden wanneer de cache van de doelmap ontbreekt.Hoe u de Gradle-configuratiecache inschakeltGradle besteedt 30 tot 60 seconden aan het configureren voordat hij iets compileert.Toolchain-managers in de cache opslaanmise, asdf of proto herinstalleren de taalruntimes bij elke run.Hoe NuGet-pakketten in de cache te plaatsendotnet herstel downloadt bij elke run dezelfde pakketten.Jest-transformaties in de cache opslaanJest transformeert elk bestand bij elke run opnieuw.Hoe vcpkg- en Conan-pakketten in de cache te plaatsenC++-afhankelijkheidsmanagers bouwen bij elke run pakketten opnieuw op vanaf de broncode.Hoe Xcode DerivedData in de cache te plaatsenXcode herbouwt het hele project bij elke CI-run.Een buildx-cache-backend kiezenEr zijn vier cache-backends en het is onduidelijk welke te gebruiken.Hoe de cache van de basisvertakking warm te houdenNieuwe feature-takken beginnen altijd met een koude cache.
Docker12
Hoe u Docker-laagcaching insteltHet bouwen van Docker duurt tien minuten omdat elke laag opnieuw wordt opgebouwd.Hoe u een Dockerfile voor CI kunt optimaliserenKleine codewijzigingen veroorzaken lange herbouwingen.Meerfasige Docker-builds gebruikenAfbeeldingen zijn groot en bevatten bouwtools die niet mogen worden verzonden.Hoe u gelijktijdige Docker-builds veilig kunt uitvoerenParallelle matrixbenen strijden en bouwen vertragen of mislukken.Een externe Docker-builder gebruikenDe laagcache wordt bij elke build van en naar de runner overgedragen.Hoe u snel afbeeldingen voor meerdere platforms kunt bouwenDoor linux/arm64 toe te voegen duurt de build twintig minuten.Hoe u de grootte van een containerafbeelding kunt verkleinenAfbeeldingen zijn honderden megabytes groot en worden bij elke taak traag opgehaald.Geheimen doorgeven aan een Docker-buildTijdens de build hebt u een privéregistertoken of SSH-sleutel nodig.Hoe Docker builder-profielen configurerenVerschillende afbeeldingen hebben verschillende bouwmiddelen nodig.Hoe u veel afbeeldingen kunt maken vanuit een monorepoMet elke push wordt elke afbeelding in de repository opgebouwd.Hoe te publiceren naar meerdere registersPer register wordt één keer dezelfde image gemaakt.Hoe u een pull-through-cache voor het register insteltHet ophalen van afbeeldingen gaat langzaam en je blijft Docker Hub-snelheidslimieten bereiken.
arm647
Hoe CI naar arm64-lopers te verplaatsenJe implementeert op Graviton of Ampere maar bouwt voort op x64.arm64-migratiechecklistU wilt overstappen naar arm64 zonder de pijplijn te verbreken.Cross-compiling versus native arm64U heeft binaire bestanden van arm64 nodig en weet niet zeker of u moet cross-compileren of native moet bouwen.Waarom QEMU arm64-builds zo traag zijnHet toevoegen van linux/arm64 aan een Docker-build maakt het twintig keer langzamer.Reparatie van native Node-modules op arm64npm-installatie mislukt of compileert vanaf de broncode op arm64-hardlopers.Python-wielen op arm64 reparerenpip install compileert pakketten van de broncode op arm64.Voortbouwend op AWS Graviton-hardlopersU wilt het Graviton-prijs-prestatievoordeel in CI.
macOS en iOS8
Hoe u de Xcode-buildtijden in CI kunt verkortenXcode-builds duren bij elke run twintig minuten.Hoe iOS-simulatortests te versnellenSimulatortests duren een half uur.Hoe om te gaan met het ondertekenen van iOS-code in CIOndertekenen werkt lokaal en mislukt af en toe in CI.Hoe macOS-apps in CI notarieel te makenNotarisatie is traag en er treedt af en toe een time-out op.Oplossing voor het uitputten van de macOS runner-schijfTaken mislukken en er is geen ruimte meer op het apparaat op macOS.Hoe iOS CI te parallellisereniOS CI is serieel en macOS-minuten zijn duur.Hoe te uploaden naar TestFlight vanuit CITestFlight-uploads zijn traag en mislukken soms na een succesvolle build.Hoe Xcode-versies vast te pinnenEen runner-image-update veranderde stilletjes de Xcode-versie en uw build veranderde mee.
Ramen5
Hoe u Windows CI sneller kunt makenWindows-taken duren drie keer zo lang als de equivalente Linux-taken.MSBuild-uitvoer in de cache opslaanElke build compileert alle projecten opnieuw.Visual Studio-componenten installeren in CIEen vereiste VS-workload ontbreekt en het installeren ervan duurt vijftien minuten.Hoe Windows-binaire bestanden in CI te ondertekenenAuthenticode-ondertekening vereist een certificaat dat niet mag worden vrijgegeven.Hoe .NET-tests te parallelliseren.NET-tests worden serieel uitgevoerd en duren twintig minuten.
Beveiliging6
Geheimen beheren in GitHub ActionsGeheimen liggen verspreid over de repository-instellingen en niemand weet wat er nog steeds wordt gebruikt.Hoe u CI-lopers binnen uw VPC kunt uitvoerenBuilds moeten een interne service bereiken die niet openbaar wordt gemaakt.Hoe hardlopers een statisch IP-adres te gevenVoor een service van derden zijn IP-toelatingslijsten vereist en de gehoste runner-IP's veranderen voortdurend.Beveiligingsscans uitvoeren zonder CI te vertragenKwetsbaarheidsscans voegen minuten toe aan elk pull-verzoek.Hoe u uw CI-toeleveringsketen kunt beveiligenActies van derden worden uitgevoerd met toegang tot uw repository en geheimen.Hoe u workflow-machtigingen kunt versterkenElke workflow wordt uitgevoerd met schrijftoegang die deze niet nodig heeft.
Waarneembaarheid10
Hoe hardloperstatistieken te verzamelenU kunt niet bepalen of een taak CPU-gebonden, geheugengebonden of schijfgebonden is.Hoe u de percentielen van de bouwduur kunt bijhoudenDe gemiddelde bouwtijd ziet er goed uit, maar ontwikkelaars klagen nog steeds.CI-traceringen exporteren met OpenTelemetryCI-timinggegevens bevinden zich in een afzonderlijk hulpmiddel, los van de rest van uw waarneembaarheid.Hoe u CI-gegevens programmatisch kunt opvragenJe hebt CI-gegevens nodig in een dashboard of een wekelijks rapport.Hoe u een wekelijks CI-gezondheidsrapport kunt uitvoerenCI verslechtert geleidelijk en niemand merkt het totdat het slecht is.Hoe u kunt waarschuwen voor CI-regressiesEen verandering maakt CI 40% langzamer en blijft wekenlang onopgemerkt.Hoe om te gaan met zwakke CI-takenTests mislukken willekeurig en mensen proberen het opnieuw totdat ze slagen.Hoe u een falende workflow kunt debuggenEen taak mislukt in CI en werkt overal elders.CI-serviceniveaus instellenNiemand is het eens over hoe snel CI zou moeten zijn, dus het krijgt nooit prioriteit.Hoe u CI-gegevens beschikbaar stelt aan AI-agentenAgenten die fouten in CI-fouten opsporen, beschikken alleen over logtekst om mee te werken.
Schaal28
Hoe u zelfgehoste hardlopers kunt schalenZelfgehoste hardlopers staan in de rij op de spitsuren of zitten stil en duur.Hoe hardlopergroepen te gebruikenElke repository kan taken plannen voor elke hardloper.Hoe u een runner-labelstrategie ontwerptEtiketten zijn organisch gegroeid en niemand weet welke te gebruiken.Gehost of BYOC: hoe te kiezenU weet niet zeker of u gehoste runners moet gebruiken of in uw eigen cloud moet implementeren.Hoe u herbruikbare workflows op schaal kunt gebruikenVijftig opslagplaatsen hebben vijftig enigszins verschillende kopieën van dezelfde pijplijn.Hoe u workflows tussen opslagplaatsen kunt coördinerenEen verandering in de ene repository moet builds in andere repository's activeren.Hoe u aangepaste hardloperafbeeldingen kunt makenBij elke klus zijn minuten nodig om dezelfde gereedschappen te installeren.Hoe u basisimage-updates veilig kunt uitrollenEen basisimage-update verbreekt builds in veel repository's tegelijk.Hoe om te gaan met de CI-belasting van afhankelijkheidsbotsDependabot opent dertig pull-aanvragen en CI-kostenpieken.Hoe u met gelijktijdigheidslimieten kunt werkenTaken staan in de rij en het is niet duidelijk welke limiet bindend is.Hoe u containerbanen effectief kunt gebruikenContainertaken zorgen voor reproduceerbaarheid, maar breken de caching.Hoe u servicecontainers op de juiste manier gebruiktTests mislukken af en toe bij het opstarten.Hoe je één keer bouwt en vele malen implementeertVoor elke omgeving wordt hetzelfde artefact opnieuw opgebouwd.Implementatietaken structurerenImplementaties zijn traag, riskant en moeilijk te controleren.Hoe u preview-omgevingen efficiënt kunt uitvoerenElke pull-aanvraag wacht op een volledige omgevingsbuild.Hoe je releasebuilds structureertReleasebuilds zijn traag en soms niet reproduceerbaar.Bouwartefacten publicerenDe opslagkosten voor artefacten stijgen en retentie is nooit geconfigureerd.Hoe u met grote artefact-uploads omgaatHet uploaden van build-uitvoer duurt minuten.Hoe u incrementele builds in CI kunt krijgenCI voert altijd een schone build uit, ook al ondersteunt uw buildsysteem incrementele compilatie.Gegevens doorgeven tussen takenBanen moeten de bouwproductie delen en het is onduidelijk hoe.Hoe je matrixbuilds goed kunt gebruikenDe matrix is gegroeid en niemand herinnert zich waarom elke combinatie bestaat.Hoe de matrixexplosie te beheersenEen kleine verandering in de matrix verdrievoudigde het aantal banen en de rekening.Hoe hardlopers op maat te maken voor Java-buildsJe gokt op een runnermaat voor een Maven- of Gradle-build.Hoe hardlopers op maat te maken voor Node-testsuitesWerknemers van Jest of Vitest lijden honger of zijn aan het worstelen, en je weet niet zeker welke.Hoe hardlopers op maat te maken voor Python-testsuitespytest draait op één core, terwijl de runner er acht inactief heeft.Hoe u lopers op maat kunt maken voor Rust-constructiesCargo bouwt schaal met kernen, maar het is onduidelijk hoe ver dat gaat.Hoe u lopers op maat kunt maken voor Docker-buildsU kiest een runnermaat voor afbeeldingsopbouw.Hoe hardlopers op maat te maken voor Android-buildsVoor Gradle-assemblages en instrumentatietests zijn zeer verschillende machines nodig.