runnerhut
Oppaat
Ratkaisuja CI-ongelmiin, joita tiimit oikeasti kohtaavat.
Nopeus13
GitHub ActionsPutkisi kestää kauemmin kuin kukaan haluaa odottaa, eikä ole selvää, mihin aika menee.Kuinka löytää työnkulun hidas vaiheValmistusprosessi on hidas, mutta jokainen yksittäinen askel näyttää järkevältä.GitHub Actions -kylmäkäynnistysten vähentäminenTyöt ovat paikallaan 30–90 sekuntia ennen kuin ensimmäinen vaihe suoritetaan.GitHub Actions -jonoaikojen diagnosointiTyöt ovat jonossa minuutteja ennen kuin juoksija poimii ne.Kuinka nopeuttaa kassan suorittamistatoiminnot/kirjautuminen kestää minuutteja suuressa arkistossa.Kuinka käyttää CI:tä erittäin suuressa arkistossaCheckout, indeksointi ja tilaraportointi heikkenevät arkiston kasvaessa.Kuinka nopeuttaa Git LFS -maksujaLFS-objektit latautuvat sarjassa ja hallitsevat kassaaikaa.Kuinka poistaa joutoaika työpaikoistaTyöpaikat viettävät aikaa tekemättä mitään – odottamalla palvelua, nukkumaanmenoa tai äänestyssilmukkaa.Kuinka käsitellä pitkäaikaisia töitäJotkut työt jatkuvat tuntikausia ja ylittävät toisinaan kuuden tunnin rajan.Kuinka ajaa iltaisia rakennuksia tehokkaastiYötyöt ovat kalliita, eikä kukaan lue tuloksia.Kuinka pysäyttää CI-rerun myrskytKehittäjät suorittavat epäonnistuneita töitä toistuvasti, moninkertaistavat kustannukset ja piilottavat todelliset epäonnistumiset.Kuinka sirpata testit matriisin yliYksi pitkä testityö hallitsee putkilinjaa.Kuinka suorittaa vain muutokset, joihin muutos vaikuttaaJokainen painallus suorittaa koko testisarjan riippumatta siitä, mikä on muuttunut.
Kustannukset13
GitHub Actions -kulujen vähentäminenCI-lasku kasvaa nopeammin kuin joukkue, eikä kukaan ole varma miksi.Kuinka mitata CI-hinta vetopyyntöä kohtiTiedät kuukausittaisen kokonaissumman, mutta et mitä yksittäinen vetopyyntö maksaa.Kuinka jakaa CI-kustannukset joukkueilleCI-kulutus on yksi rivi laskussa, eikä mikään tiimi ole vastuussa siitä.Kuinka asettaa CI-minuuttibudjettiKulutus havaitaan kuun lopussa sen sijaan, että sitä hallittaisiin sen aikana.Kun isommat juoksijat todella säästävät rahaaIsompi juoksija maksaa enemmän minuutilta, joten on epäselvää, onko se kokonaisuutena halvempi.Kuinka leikata macOS-käyttökustannuksiamacOS hallitsee CI-laskua.Kuinka vähentää CI-lähtökustannuksiaTiedonsiirto on suuri ja kasvava osuus BYOC-laskusta.Kuinka vähentää ECR-vedon kustannuksiaSäiliön kuvavedot aiheuttavat merkittäviä tiedonsiirtokuluja.Kuinka vähentää S3-siirtokustannuksia CI:ssäVälimuisti- ja artefaktiliikenne S3:lle on kallista.Itseisännöityjen juoksijoiden todelliset kustannuksetItseisännöidyt juoksijat näyttävät ilmaisilta minuuttilaskutuksen lisäksi.Kuinka käyttää spot-esiintymiä CI-juoksissaOn-demand-esiintymät ovat kalliita työkuormille, jotka ovat luonnostaan uudelleen kokeiltavissa.Kuinka mitoittaa juoksijasi oikeaan kokoonJuoksijoiden koot valittiin kerran, eikä niitä koskaan tarkistettu.Kuinka käyttää CI:tä taloudellisesti avoimessa lähdekoodissaAvoimen lähdekoodin CI on ilmainen GitHub-isännöidyille käyttäjille, mutta hidas, ja itseisännöinti ei ole turvallista.
Välimuisti16
Kuinka saada CI-välimuistit todella säilymäänVälimuistit on määritetty, mutta osumaprosentti on alhainen.Kuinka kiertää 10 Gt:n välimuistirajaVälimuistisi ylittävät 10 Gt arkistoa kohden ja alat häätää hiljaa.Rakennusvälimuistin jakaminen arkistojen keskenJokainen arkisto ylläpitää omaa välimuistiaan samoille jaetuille riippuvuuksille.Docker-välimuistin jakaminen töiden välilläJokainen matriisijalka rakentaa uudelleen samat kerrokset.Docker-välimuistin mitätöinnin korjaaminenDocker-tasot rakennetaan uudelleen, vaikka asiaankuuluvat tiedostot eivät muuttuisi.Kuinka kirjoittaa välimuistiavain, joka osuuVälimuisti on määritetty, mutta se puuttuu joka ajon aikana.Kuinka käyttää välimuistia GitHub ActionsC- ja C++-koontiversiot kääntävät kaiken uudelleen joka ajon aikana.Kuinka käyttää sccachea Rust-rakennuksiinCargo rakentaa uudelleen riippuvuudet aina, kun kohdehakemiston välimuisti puuttuu.Gradlen määritysvälimuistin käyttöönottoGradle käyttää 30–60 sekuntia asetusten tekemiseen ennen kuin kääntää mitään.Kuinka välimuistiin tallennetaan työkaluketjujen hallintalaitteetmise, asdf tai proto asenna kielen ajonajat uudelleen joka ajon aikana.NuGet-pakettien tallentaminen välimuistiindotnet return lataa samat paketit joka ajon aikana.Kuinka tallentaa Jest-muunnokset välimuistiinJest muuttaa jokaisen tiedoston uudelleen joka ajon aikana.Kuinka tallentaa vcpkg- ja Conan-paketteja välimuistiinC++-riippuvuuden hallintaohjelmat rakentavat paketit uudelleen lähteestä joka ajon aikana.Kuinka välimuistiin tallennetaan Xcode DerivedDataXcode rakentaa koko projektin uudelleen jokaisella CI-ajolla.Buildx-välimuistin taustaohjelman valitseminenVälimuistitaustaohjelmia on neljä, ja on epäselvää, mitä käyttää.Kuinka pitää perushaaran välimuisti lämpimänäUudet ominaisuushaarat alkavat aina kylmällä välimuistilla.
Docker12
Docker-kerroksen välimuistin määrittäminenDocker rakentaminen vie kymmenen minuuttia, koska jokainen kerros rakentuu uudelleen.Docker-tiedoston optimointi CI:llePienet koodimuutokset käynnistävät pitkiä uudistuksia.Kuinka käyttää monivaiheisia Docker-koontiversioitaKuvat ovat suuria ja sisältävät rakennustyökaluja, joita ei pitäisi lähettää.Samanaikaisten Docker-koontiversioiden ajaminen turvallisestiRinnakkaiset matriisijalat kilpailevat ja rakentaminen hidastuu tai epäonnistuu.Docker-etämuodostimen käyttäminenKerrosvälimuisti siirretään juoksijalle ja siitä pois jokaisen koontiversion yhteydessä.Kuinka luoda usean alustan kuvia nopeastiLinux/arm64:n lisääminen vie rakentamiseen kaksikymmentä minuuttia.Kuinka pienentää säilön kuvan kokoaKuvat ovat satoja megatavuja, ja ne ovat hitaita jokaisessa työssä.Kuinka siirtää salaisuuksia Docker-koontirakenteeseenTarvitset yksityisen rekisteritunnuksen tai SSH-avaimen rakentamisen aikana.Docker rakentajaprofiilien määrittäminenErilaiset kuvat tarvitsevat erilaisia rakentajan resursseja.Kuinka rakentaa monia kuvia monorepostaJokainen painallus rakentaa jokaisen arkiston kuvan.Kuinka julkaista useisiin rekistereihinSama kuva luodaan kerran rekisteriä kohden.Rekisterin läpivientivälimuistin määrittäminenKuvan vedot ovat hitaita ja törmäät jatkuvasti Docker Hub -nopeusrajoihin.
käsivarsi647
Kuinka siirtää CI arm64-juoksiinKäytät Gravitoniin tai Ampereen, mutta rakennat x64:lle.arm64-siirtymisen tarkistuslistaHaluat siirtyä arm64:ään rikkomatta putkilinjaa.Ristikääntäminen vs. natiivi arm64Tarvitset arm64-binäärit etkä ole varma, pitäisikö ristikääntää vai rakentaa natiivisti.Miksi QEMU arm64 -koontiversiot ovat niin hitaitaLinuxin/arm64:n lisääminen Docker-koontiversioon hidastaa sitä kaksikymmentä kertaa.Node-natiivimoduulien korjaaminen arm64:äännpm-asennus epäonnistuu tai käännetään lähteestä arm64-ajoissa.Python-renkaiden kiinnitys varteen64pip install kokoaa paketit arm64:n lähteestä.Perustuu AWS Graviton -juoksiinHaluat Gravitonin hinta-laatu-edun CI:ssä.
macOS ja iOS8
Kuinka lyhentää Xcoden rakennusaikoja CI:ssäXcode-koontiversiot vievät kaksikymmentä minuuttia joka ajon aikana.Kuinka nopeuttaa iOS-simulaattoritestejäSimulaattoritestit kestävät puoli tuntia.Kuinka käsitellä iOS-koodin kirjautumista CI:ssäAllekirjoitus toimii paikallisesti ja epäonnistuu ajoittain CI:ssä.Kuinka vahvistaa macOS-sovellukset CI:ssäNotaarin vahvistaminen on hidasta ja toisinaan aikakatkaistaan.Korjataan macOS Runner -levyn tyhjeneminenTyöt epäonnistuvat, koska laitteessa ei ole tilaa macOS:ssä.Kuinka rinnastaa iOS CIiOS CI on sarjakäyttöinen ja macOS-minuutit ovat kalliita.Kuinka ladata TestFlightiin CI:stäTestFlight-lataukset ovat hitaita ja joskus epäonnistuvat onnistuneen rakentamisen jälkeen.Kuinka kiinnittää Xcode-versiotRunner-kuvapäivitys muutti hiljaa Xcode-versiota ja koontiversiosi muuttui sen mukana.
Windows5
Kuinka tehdä Windows CI:stä nopeampiWindows-työt kestävät kolme kertaa niin kauan kuin vastaavat Linux-työt.Kuinka tallentaa MSBuild-tulosteen välimuistiinJokainen rakennelma kääntää kaikki projektit uudelleen.Visual Studio -komponenttien asentaminen CI:äänVaadittu VS-työkuorma puuttuu ja sen asentaminen kestää viisitoista minuuttia.Kuinka allekirjoittaa Windows-binaarit CI:ssäAuthenticode-allekirjoitus vaatii varmenteen, jota ei saa paljastaa.Kuinka rinnastaa .NET-testejä.NET-testit suoritetaan sarjassa ja kestävät kaksikymmentä minuuttia.
Turvallisuus6
Kuinka hallita salaisuuksia GitHub ActionsSalaisuudet ovat hajallaan arkiston asetuksissa, eikä kukaan tiedä, mitä edelleen käytetään.Kuinka ajaa CI-ajoja VPC:n sisälläRakennusten on saavutettava sisäinen palvelu, joka ei ole julkisesti esillä.Kuinka antaa juoksijoille staattinen IPKolmannen osapuolen palvelu edellyttää IP-osoitteiden sallimista, ja isännöidyn juoksijan IP-osoitteet muuttuvat jatkuvasti.Kuinka suorittaa suojaustarkistuksia hidastamatta CI:täHaavoittuvuustarkistus lisää minuutteja jokaiseen vetopyyntöön.Kuinka turvata CI-toimitusketjusiKolmannen osapuolen toiminnot suorittavat pääsyn arkistoon ja salaisuuksiin.Työnkulun käyttöoikeuksien vahvistaminenJokainen työnkulku suoritetaan kirjoitusoikeuksilla, joita se ei tarvitse.
Havaittavuus10
Kuinka kerätä juoksijamittareitaEt voi tietää, onko työ sidottu suorittimeen, muistiin vai levyyn.Kuinka seurata rakentamisen keston prosenttipisteitäKeskimääräinen rakennusaika näyttää hyvältä, mutta kehittäjät valittavat silti.Kuinka viedä CI-jäljitystä OpenTelemetrylläCI-ajoitustiedot ovat erillisessä työkalussa muusta havainnoitavuudestasi.CI-tietojen kysely ohjelmallisestiTarvitset CI-tietoja kojelautaan tai viikoittaiseen raporttiin.Viikoittaisen CI-terveysraportin suorittaminenCI hajoaa vähitellen, eikä kukaan huomaa, ennen kuin se on huono.Kuinka varoittaa CI-regressioistaMuutos hidastaa CI:tä 40 % ja sitä ei huomaa viikkoja.Kuinka käsitellä hilseileviä CI-töitäTestit epäonnistuvat satunnaisesti ja ihmiset yrittävät uudelleen, kunnes ne läpäisevät.Viankorjaus epäonnistuneesta työnkulustaTyö epäonnistuu CI:ssä ja toimii kaikkialla muualla.Kuinka asettaa CI-palvelutasotKukaan ei ole samaa mieltä siitä, kuinka nopea CI:n tulisi olla, joten sitä ei koskaan priorisoida.Kuinka paljastaa CI-tiedot tekoälyagenteilleCI-virheitä korjaavilla agenteilla on vain lokiteksti käytettäväksi.
Mittakaava28
Kuinka skaalata itse isännöityjä juoksijoitaItseisännöidyt juoksijat joko jonottavat ruuhkassa tai istuvat toimettomana ja kalliita.Kuinka käyttää juoksijaryhmiäMikä tahansa arkisto voi ajoittaa töitä mille tahansa juoksijalle.Kuinka suunnitella juoksijamerkkistrategiaTarrat kasvoivat orgaanisesti, eikä kukaan tiedä mitä käyttää.Isännöi tai BYOC: kuinka valitaEt ole varma, käytätkö isännöityjä juoksijoita vai otatko ne käyttöön omassa pilvessäsi.Kuinka käyttää uudelleenkäytettäviä työnkulkuja mittakaavassaViidelläkymmenellä arkistolla on viisikymmentä hieman erilaista kopiota samasta liukuhihnasta.Kuinka koordinoida työnkulkuja arkistoissaMuutoksen yhdessä arkistossa täytyy käynnistää koonnoksia muissa.Kuinka luoda mukautettuja juoksijakuviaJokainen työ vie minuutteja samojen työkalujen asentamiseen.Peruskuvapäivitysten käyttöönotto turvallisestiPeruskuvapäivityskatkot koottavat useat arkistot kerralla.Kuinka käsitellä riippuvuusbotin CI-kuormaaDependabot avaa kolmekymmentä vetopyyntöä ja CI-kustannuspiikkejä.Kuinka työskennellä samanaikaisuusrajojen kanssaTyöjono ja ei ole selvää, mikä raja on sitova.Kuinka käyttää konttitöitä tehokkaastiSäilötyöt antavat toistettavuuden, mutta rikkovat välimuistin.Kuinka käyttää palvelusäiliöitä oikeinTestit epäonnistuvat ajoittain käynnistyksen yhteydessä.Kuinka rakentaa kerran ja ottaa käyttöön monta kertaaSama esine rakennetaan uudelleen jokaiseen ympäristöön.Kuinka rakentaa käyttöönottotyötKäyttöönotot ovat hitaita, riskialttiita ja vaikeita tarkastaa.Kuinka käyttää esikatseluympäristöjä tehokkaastiJokainen vetopyyntö odottaa täyttä ympäristön rakentamista.Kuinka jäsentää julkaisuversioitaJulkaisujen koontiversiot ovat hitaita eivätkä toisinaan toistettavissa.Kuinka julkaista rakentamisen artefaktejaArtefakttien säilytyskustannukset kasvavat, eikä säilytystä koskaan määritetty.Kuinka käsitellä suuria artefaktilatauksiaRakennustulosteen lataaminen kestää minuutteja.Kuinka saada inkrementaalisia koonnoksia CI:ssäCI tekee aina puhtaan koontiversion, vaikka koontijärjestelmäsi tukee inkrementaalista kääntämistä.Kuinka siirtää tietoja töiden välilläTyöpaikkojen on jaettava rakennustuotanto, ja on epäselvää, miten.Kuinka käyttää matriisirakennelmia hyvinMatriisi on kasvanut, eikä kukaan muista, miksi kukin yhdistelmä on olemassa.Kuinka hallita matriisin räjähdystäPieni matriisin muutos kolminkertaisti työmäärän ja laskun.Kuinka mitoittaa runners Java-koontiversioita vartenArvaat juoksukokoa Maven- tai Gradle-rakenteelle.Node-testipakettien juoksujen koon mitoitusJestin tai Vitestin työntekijät näkevät nälkää tai puskevat, etkä ole varma kumpi.Kuinka mitoittaa juoksijat Python-testiohjelmia vartenpytest toimii yhdellä ytimellä, kun juoksijalla on kahdeksan tyhjäkäyntiä.Kuinka mitoittaa juoksut Rust-rakenteisiinCargo rakentaa mittakaavassa ytimiä, mutta on epäselvää, kuinka pitkälle se menee.Kuinka mitoittaa juoksut Docker-rakenteisiinValitset juoksukoon kuvien rakentamiseen.Kuinka mitoittaa juoksijat Android-koontiversioilleGradle-kokoonpanot ja instrumentointitestit vaativat hyvin erilaisia koneita.