runnerhut
Útmutatók
Megoldások azokra a CI-problémákra, amelyekkel a csapatok tényleg találkoznak.
Sebesség13
Hogyan lehet felgyorsítani a GitHub ActionsAz Ön csővezetéke tovább tart, mint amennyit bárki várni szeretne, és nem egyértelmű, hová telik az idő.Hogyan lehet megtalálni a lassú lépést a munkafolyamatbanA folyamat lassú, de minden egyes lépés ésszerűnek tűnik.Hogyan csökkenthető a GitHub Actions hidegindításaA feladatok 30-90 másodpercig maradnak az első lépés végrehajtása előtt.A GitHub Actions várakozási idők diagnosztizálásaA munkák percekig sorban állnak, mielőtt egy futó felveszi őket.Hogyan lehet gyorsabbá tenni a fizetésta műveletek/kijelentkezés perceket vesz igénybe egy nagy adattáron.Hogyan lehet CI-t futtatni egy nagyon nagy adattáronA fizetés, az indexelés és az állapotjelentés mind leromlik, ahogy az adattár növekszik.A Git LFS fizetések felgyorsításaAz LFS objektumok sorozatosan töltődnek le, és uralják a fizetési időt.Hogyan lehet kiküszöbölni az üresjáratokat a munkahelyekenA munkák azzal töltik az időt, hogy semmit sem csinálnak – várnak egy szolgáltatásra, alvásra vagy szavazási körre.Hogyan kell kezelni a hosszú távú munkákatEgyes munkák órákig tartanak, és időnként elérik a hatórás határt.Hogyan futtass hatékonyan éjszakai építkezéseketAz éjszakai építkezések drágák, és senki sem olvassa el az eredményeket.Hogyan lehet megállítani a CI újrafuttatási viharokatA fejlesztők ismételten futtatják a sikertelen feladatokat, megsokszorozzák a költségeket és elrejtik a valódi hibákat.Hogyan lehet szilánkos teszteket mátrixon keresztülEgy hosszú tesztmunka uralja a folyamatot.Csak a változás által érintett tesztek futtatásaMinden nyomás lefuttatja a teljes tesztcsomagot, függetlenül attól, hogy mi változott.
Költség13
A GitHub Actions költségeinek csökkentéseA CI-számla gyorsabban nő, mint a csapaté, és senki sem tudja, miért.Hogyan mérjük a CI-költséget lehívási kérésenkéntIsmeri a havi végösszeget, de azt nem, hogy mennyibe kerül egy lehívási kérelem.Hogyan rendeljük hozzá a CI-költséget a csapatokhozA CI-költés egy sor a számlán, és egyetlen csapat sem érez felelősséget érte.CI perc költségvetés beállításaA költést a hónap végén fedezik fel, nem pedig a hónap során szabályozzák.Amikor a nagyobb futók valóban pénzt takarítanak megEgy nagyobb futó többe kerül percenként, így nem világos, hogy összességében olcsóbb-e.A macOS futtató költségeinek csökkentéseA macOS uralja a CI-számlát.Hogyan lehet csökkenteni a CI kilépési költségeitAz adatátvitel a BYOC számla nagy és egyre növekvő részét teszi ki.Hogyan csökkenthető az ECR pull költségeiA konténerkép-lehívások jelentős adatátviteli költségeket generálnak.Hogyan csökkenthetjük az S3 átviteli költségeit a CI-benA gyorsítótár és a műtermék-forgalom az S3 felé drága.A saját vendéglátó futók valós költségeA saját vendéglátó futók ingyenesnek tűnnek a percszámlázás mellett.A spot példányok használata CI-futók számáraAz igény szerinti példányok drágák a természetüknél fogva újrapróbálható munkaterhelésekhez.Hogyan állítsd be a megfelelő méretű futókatA futóméreteket egyszer választották ki, és soha nem nézték meg újra.Hogyan lehet gazdaságosan futtatni a CI-t nyílt forráskódonA nyílt forráskódú CI ingyenes a GitHub által üzemeltetett futókon, de lassú, és az öntárolás nem biztonságos.
Gyorsítótárazás16
Hogyan lehet a CI gyorsítótárakat ténylegesen fennmaradniA gyorsítótárak konfigurálva vannak, de a találati arány alacsony.Hogyan lehet megkerülni a 10 GB-os gyorsítótár-korlátotA gyorsítótárak tárolónként meghaladják a 10 GB-ot, és elkezdődik a csendes kilakoltatás.Hogyan lehet megosztani egy build gyorsítótárat a tárolók közöttMinden adattár saját gyorsítótárat tart fenn ugyanazon megosztott függőségek számára.A Docker gyorsítótár megosztása a feladatok közöttMinden mátrix láb ugyanazokat a rétegeket építi újra.A Docker gyorsítótár érvénytelenítésének elhárításaA Docker rétegek akkor is újraépülnek, ha a vonatkozó fájlok nem változtak.Hogyan írjunk olyan gyorsítótár-kulcsot, amely eltaláljaA gyorsítótár konfigurálva van, de minden futtatáskor hiányzik.A gyorsítótár használata a GitHub ActionsA C és C++ buildek mindent újrafordítanak minden futtatáskor.A sccache használata Rust buildekhezA Cargo újraépíti a függőségeket, amikor a célkönyvtár gyorsítótára hiányzik.A Gradle konfigurációs gyorsítótárának engedélyezéseA Gradle 30-60 másodpercet tölt a konfigurálással, mielőtt bármit is fordítana.Az eszközlánc-kezelők gyorsítótárazásaA mise, asdf vagy proto újratelepíti a nyelvi futtatókörnyezetet minden futtatáskor.A NuGet-csomagok gyorsítótárazásaA dotnet restore minden futtatáskor ugyanazokat a csomagokat tölti le.A Jest transzformációk gyorsítótárazásaA Jest minden futtatáskor minden fájlt újraalakít.A vcpkg és a Conan csomagok gyorsítótárazásaA C++-függőségkezelők minden futtatáskor újraépítik a csomagokat a forrásból.Az Xcode DerivedData gyorsítótárazásaAz Xcode minden CI-futáskor újraépíti az egész projektet.A buildx gyorsítótár-háttér kiválasztásaNégy gyorsítótár-háttérprogram van, és nem világos, hogy melyiket használja.Hogyan lehet melegen tartani az alap ág gyorsítótárátAz új szolgáltatáságak mindig hideg gyorsítótárral kezdődnek.
Docker12
A Docker réteggyorsítótár beállításaA Docker felépítése tíz percet vesz igénybe, mert minden réteg újraépül.Hogyan optimalizálhatunk egy Docker-fájlt CI-hezA kis kódmódosítások hosszú újraépítést váltanak ki.A többlépcsős Docker buildek használataA képek nagyok, és olyan összeállítási eszközöket tartalmaznak, amelyeket nem szabad elküldeni.Egyidejű Docker buildek biztonságos futtatásaA párhuzamos mátrixlábak versengenek, és az építmények lelassulnak vagy meghiúsulnak.Távoli Docker builder használataA réteggyorsítótár minden összeállításnál átkerül a futtatóba és onnan.Hogyan készítsünk többplatformos képeket gyorsanA linux/arm64 hozzáadásával a felépítés húsz percet vesz igénybe.Hogyan lehet csökkenteni a konténer képméretétA képek több száz megabájtosak, és lassúak a betöltésük minden feladathoz.Hogyan lehet titkokat átvinni egy Docker buildbeA felépítés során szükség van egy privát regisztrációs tokenre vagy SSH-kulcsra.A Docker builder profilok konfigurálásaA különböző képekhez különböző építői erőforrások szükségesek.Hogyan készítsünk sok képet egy monorepobólMinden lenyomással felépül minden kép az adattárban.Több nyilvántartásban való közzétételUgyanaz a képfájl egyszer kerül összeállításra rendszerleíró adatbázisonként.A rendszerleíró adatbázis áthúzó gyorsítótárának beállításaA képlehívások lassúak, és folyamatosan eléri a Docker Hub sebességkorlátait.
kar647
A CI áthelyezése arm64 futókraGravitonra vagy Ampere-re telepíti, de x64-re épít.arm64 migrációs ellenőrzőlistaA csővezeték megszakítása nélkül szeretne áttérni az arm64-re.Keresztfordítás versus natív kar64Arm64 bináris fájlokra van szüksége, és nem biztos abban, hogy keresztfordítást vagy natív építést hajtson végre.Miért olyan lassúak a QEMU arm64 buildek?A linux/arm64 hozzáadása egy Docker buildhez hússzor lassabb lesz.A Node natív moduljainak javítása az arm64-enAz npm telepítés sikertelen, vagy a forrásból fordítódik le az arm64 futókon.Python kerekek rögzítése a karon64A pip install a csomagokat az arm64 forrásból fordítja le.Az AWS Graviton futókra építveA Graviton ár-teljesítmény előnyt szeretné elérni a CI-ben.
macOS és iOS8
Hogyan csökkenthető az Xcode felépítési ideje CI-benAz Xcode összeállítása minden futtatáskor húsz percet vesz igénybe.Az iOS szimulátor tesztek felgyorsításaA szimulátoros tesztek fél órát vesznek igénybe.Az iOS-kód aláírásának kezelése CI-benAz aláírás helyileg működik, és időszakosan meghiúsul a CI-ben.A macOS-alkalmazások közjegyzői hitelesítése a CI-benA közjegyzői hitelesítés lassú, és időnként túllép.A macOS runner lemez kimerültségének javításaA feladatok meghiúsulnak, és nem marad hely az eszközön a macOS rendszeren.Az iOS CI párhuzamosításaAz iOS CI soros, a macOS percek pedig drágák.Hogyan lehet feltölteni a TestFlight-ba a CI-rőlA TestFlight-feltöltések lassúak, és néha sikertelenek egy sikeres felépítés után.Az Xcode verziók rögzítéseA futóképfrissítés csendben megváltoztatta az Xcode verziót, és ezzel együtt a builded is megváltozott.
Windows5
Hogyan lehet gyorsabbá tenni a Windows CI-tA Windows-feladatok háromszor annyi ideig tartanak, mint a megfelelő Linux-feladatok.Az MSBuild kimenet gyorsítótárazásaMinden build újrafordítja az összes projektet.A Visual Studio összetevőinek telepítése CI-benA szükséges VS-munkaterhelés hiányzik, és a telepítés tizenöt percet vesz igénybe.Hogyan írjunk alá Windows bináris fájlokat CI-benA hitelesítőkód-aláíráshoz olyan tanúsítványra van szükség, amelyet nem szabad nyilvánosságra hozni.A .NET-tesztek párhuzamosításaA .NET-tesztek sorozatban futnak, és húsz percig tartanak.
Biztonság6
Titkok kezelése a GitHub Actions-banA titkok szétszórva vannak az adattárbeállítások között, és senki sem tudja, mit használnak még.CI futók futtatása a VPC-n belülAz építményeknek el kell érniük egy olyan belső szolgáltatást, amely nem nyilvános.Hogyan adjunk statikus IP-t a futóknakA harmadik féltől származó szolgáltatásokhoz engedélyezni kell az IP-címeket, és a hosztolt futó IP-címei folyamatosan változnak.Biztonsági ellenőrzések futtatása a CI lelassítása nélkülA sebezhetőségi vizsgálat perceket ad minden lehívási kérelemhez.Hogyan biztosítsa CI ellátási láncátA harmadik féltől származó műveletek az Ön adattárához és titkaihoz való hozzáféréssel futnak.A munkafolyamat-engedélyek szigorításaMinden munkafolyamat olyan írási hozzáféréssel fut, amelyre nincs szüksége.
Megfigyelhetőség10
Hogyan gyűjtsünk futómutatókatNem lehet megállapítani, hogy egy job CPU-hoz, memóriához vagy lemezhez kötött-e.Hogyan lehet nyomon követni az építési időtartam százalékos értékétAz átlagos felépítési idő jól néz ki, de a fejlesztők továbbra is panaszkodnak.CI nyomkövetések exportálása az OpenTelemetry segítségévelA CI időzítési adatok a megfigyelhetőség többi részétől külön eszközben élnek.CI adatok lekérdezése programozottanCI-adatokra van szüksége egy irányítópulton vagy egy heti jelentésben.Heti CI állapotjelentés futtatásaA CI fokozatosan lebomlik, és senki sem veszi észre, amíg nem rossz.Hogyan lehet figyelmeztetni a CI-regresszióraA változás 40%-kal lelassítja a CI-t, és hetekig észrevétlen marad.Hogyan kell kezelni a hibás CI-feladatokatA tesztek véletlenszerűen sikertelenek, és az emberek addig próbálkoznak újra, amíg sikeresek nem lesznek.A hibás munkafolyamat hibakereséseEgy munka meghiúsul a CI-ben, és mindenhol máshol működik.A CI szolgáltatási szintek beállításaSenki sem ért egyet abban, hogy milyen gyorsnak kell lennie a CI-nek, ezért soha nem kap prioritást.Hogyan lehet a CI-adatokat AI-ügynökök elé tárniA CI hibákat hibakereső ügynökök csak naplószöveggel dolgozhatnak.
Skála28
Hogyan lehet méretezni a saját vendéglátó futókatAz önállóan gazdálkodó futók csúcsidőben állnak sorban, vagy tétlenül ülnek és drágák.A futócsoportok használataBármely tárhely ütemezheti a feladatokat bármely futón.Hogyan tervezzünk futócímkés stratégiátA címkék szervesen növekedtek, és senki sem tudja, melyiket használja.Hosted vagy BYOC: hogyan válasszNem biztos abban, hogy hosztolt futókat használ-e, vagy saját felhőbe telepítse.Az újrafelhasználható munkafolyamatok nagyarányú használataÖtven adattárnak ötven, kissé eltérő másolata van ugyanannak a folyamatnak.Hogyan lehet koordinálni a munkafolyamatokat az adattárak közöttAz egyik adattárban végrehajtott változtatásnak ki kell váltania a többiben a felépítést.Hogyan készítsünk egyedi futóképeketMinden munka percekig tart ugyanazon eszközök telepítésével.Az alapképfrissítések biztonságos közzétételeAz alapképfrissítés megszakítja az építményeket egyszerre több tárolóban.Hogyan kezeljük a függőségi bot CI terheléstA Dependabot harminc lehívási kérelmet nyit meg, és CI-költségcsúcsokat nyit meg.Hogyan kell dolgozni egyidejűségi korlátokkalFeladatsor, és nem világos, hogy melyik korlát kötelező.Hogyan lehet hatékonyan használni a konténeres feladatokatA tárolófeladatok reprodukálhatóságot biztosítanak, de megszakítják a gyorsítótárat.A szerviztárolók megfelelő használataA tesztek időszakosan meghiúsulnak az indításkor.Hogyan építsünk egyszer és telepítsünk többszörUgyanaz a műtárgy újjáépül minden környezethez.Hogyan strukturáljuk a telepítési munkákatA telepítés lassú, kockázatos és nehezen ellenőrizhető.Az előnézeti környezetek hatékony futtatásaMinden lehívási kérelem egy teljes környezeti összeállításra vár.Hogyan strukturáljuk a kiadási építményeketA kiadások lassúak és esetenként nem reprodukálhatók.Építési műtermékek közzétételeA műtermékek tárolási költségei nőnek, és a megőrzést soha nem konfigurálták.A nagyméretű műtermék-feltöltések kezeléseA build kimenetének feltöltése perceket vesz igénybe.Hogyan szerezhet be növekményes buildeket a CI-benA CI mindig tiszta összeállítást végez, még akkor is, ha az összeállítási rendszere támogatja a növekményes fordítást.Hogyan lehet adatokat átadni a munkák közöttA munkáknak meg kell osztaniuk az építési teljesítményt, és nem világos, hogyan.Hogyan kell jól használni a mátrix építményeketA mátrix nőtt, és senki sem emlékszik, miért létezik az egyes kombinációk.Hogyan lehet irányítani a mátrix robbanástEgy kis mátrixmódosítás megháromszorozta a munkák számát és a számlát.A futók méretezése Java buildekhezMaven vagy Gradle felépítésű futóméretre tippel.A futók méretezése a Node tesztcsomagokhozA Jest vagy a Vitest dolgozói vagy éheznek, vagy vernek, és nem biztos benne, hogy melyiket.A futók méretezése Python tesztcsomagokhozA pytest egy magon fut, míg a futónak nyolc üresjárata van.Hogyan méretezzük a futókat Rust építményekhezA Cargo magokkal építi a méretet, de nem világos, hogy ez meddig megy el.A futók méretezése Docker építményekhezÖn kiválaszt egy futóméretet a képalkotásokhoz.A futók méretezése Android buildekhezA gradle-összeállításokhoz és a műszervizsgálatokhoz nagyon különböző gépekre van szükség.