Naar inhoud springen

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.

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.