runnerhut
Ghiduri
Soluții pentru problemele de CI pe care echipele chiar le întâlnesc.
Viteza13
Cum să accelerezi GitHub ActionsConducta dvs. durează mai mult decât vrea oricine să aștepte și nu este evident unde trece timpul.Cum să găsiți pasul lent într-un flux de lucruConducta este lentă, dar fiecare pas individual pare rezonabil.Cum să reduceți GitHub Actions pornirile la receLucrările stau timp de 30 până la 90 de secunde înainte de a rula primul pas.Cum să diagnosticați GitHub Actions timpii de coadăLucrările sunt puse la coadă câteva minute înainte ca un alergător să le ridice.Cum să faci git checkout mai rapidacțiunile/checkout durează minute într-un depozit mare.Cum să rulați CI pe un depozit foarte mareVerificarea, indexarea și raportarea stării se degradează pe măsură ce depozitul crește.Cum să accelerezi plățile Git LFSObiectele LFS se descarcă în serie și domină timpul de plată.Cum să eliminați timpul inactiv în locuri de muncăLocurile de muncă petrec timp fără a face nimic - așteptând un serviciu, un somn sau o buclă de sondaj.Cum să gestionați locurile de muncă de lungă duratăUnele lucrări rulează ore întregi și ocazional ating limita de șase ore.Cum să rulezi eficient construcțiile de noapteBuild-urile nocturne sunt scumpe și nimeni nu citește rezultatele.Cum să opriți furtunile de reluare a CIDezvoltatorii reluează în mod repetat lucrările eșuate, înmulțind costurile și ascund eșecurile reale.Cum să împărțiți testele într-o matriceO lucrare de testare lungă domină conducta.Cum să rulați numai testele afectate de o modificareFiecare push rulează întreaga suită de testare, indiferent de ce s-a schimbat.
Cost13
Cum să reduceți costurile GitHub ActionsFactura CI crește mai repede decât echipa și nimeni nu este sigur de ce.Cum se măsoară costul CI pe cerere de extragereȘtiți totalul lunar, dar nu cât costă o singură cerere de tragere.Cum să atribuiți costul CI echipelorCheltuielile CI reprezintă un rând pe factură și nicio echipă nu se simte responsabilă pentru asta.Cum să setați un buget pentru minute CICheltuielile sunt descoperite la sfârșitul lunii, mai degrabă decât controlate în timpul acesteia.Când alergătorii mai mari economisesc baniUn alergător mai mare costă mai mult pe minut, așa că nu este clar dacă este mai ieftin în general.Cum să reduceți costurile macOS RunnermacOS domină factura CI.Cum să reduceți costurile de ieșire CITransferul de date reprezintă o parte mare și în creștere din factura BYOC.Cum să reduceți costurile de extragere ECRTragerile de imagini ale containerului generează taxe semnificative de transfer de date.Cum să reduceți costurile de transfer S3 în CICache-ul și traficul de artefacte către S3 este costisitor.Costul real al alergătorilor auto-găzduițiAlergătorii auto-găzduiți arată gratuit lângă facturarea pe minut.Cum să utilizați instanțe spot pentru alergătorii CIInstanțele la cerere sunt costisitoare pentru sarcinile de lucru care pot fi reîncercate în mod inerent.Cum să-ți dimensionezi alergătoriiMărimile alergătorului au fost alese o dată și nu au fost niciodată revăzute.Cum să rulați CI economic pe sursă deschisăCI cu sursă deschisă este gratuit pentru alergătorii găzduiți de GitHub, dar lent, iar auto-găzduirea este nesigură.
Memorarea în cache16
Cum să faci ca cache-urile CI să persistă de faptCache-urile sunt configurate, dar rata de accesare este scăzută.Cum să ocoliți limita de 10 GB cacheCache-urile dvs. depășesc 10 GB per depozit și începeți evacuarea în tăcere.Cum să partajați un cache de compilare între depoziteFiecare depozit își menține propriul cache pentru aceleași dependențe partajate.Cum să partajați un cache Docker între joburiFiecare picior de matrice reconstruiește aceleași straturi.Cum se remediază invalidarea cache-ului DockerStraturile Docker se reconstruiesc chiar și atunci când fișierele relevante nu s-au schimbat.Cum se scrie o cheie cache care loveșteCache-ul este configurat, dar lipsește la fiecare rulare.Cum să utilizați ccache în GitHub ActionsBuild-urile C și C++ recompilează totul la fiecare rulare.Cum se utilizează sccache pentru versiunile RustCargo reconstruiește dependențele ori de câte ori lipsește memoria cache a directorului țintă.Cum să activați memoria cache de configurare GradleGradle petrece între 30 și 60 de secunde pentru a configura înainte de a compila orice.Cum să memorați în cache managerii lanțului de instrumentemise, asdf sau proto reinstalează timpii de execuție a limbii la fiecare rulare.Cum să memorați în cache pachetele NuGetdotnet restore descarcă aceleași pachete la fiecare rulare.Cum să memorezi în cache transformările JestJest re-transformă fiecare fișier la fiecare rulare.Cum să memorați în cache pachetele vcpkg și ConanManagerii de dependențe C++ reconstruiesc pachetele din sursă la fiecare rulare.Cum să memorați în cache Xcode DerivedDataXcode reconstruiește întregul proiect la fiecare rulare CI.Alegerea unui backend cache buildxExistă patru backend-uri cache și nu este clar pe care să le folosiți.Cum să păstrați cache-ul ramurilor de bază caldNoile ramuri de caracteristici încep întotdeauna cu un cache rece.
Docker12
Cum se configurează memorarea în cache a stratului DockerConstruirea Docker durează zece minute, deoarece fiecare strat se reconstruiește.Cum să optimizați un Dockerfile pentru CIModificările mici ale codului declanșează reconstrucții lungi.Cum să utilizați versiunile în mai multe etape DockerImaginile sunt mari și conțin instrumente de construcție care nu ar trebui să fie expediate.Cum să rulați în siguranță versiunile concurente DockerPicioarele matricei paralele se luptă și construcțiile încetinesc sau eșuează.Cum să utilizați un generator Docker de la distanțăCache-ul stratului este transferat către și de la runner la fiecare build.Cum să construiți rapid imagini multi-platformăAdăugarea linux/arm64 face ca construcția să dureze douăzeci de minute.Cum să reduceți dimensiunea imaginii containeruluiImaginile sunt de sute de megaocteți și sunt lent pentru fiecare lucrare.Cum să transferați secrete într-o versiune DockerAveți nevoie de un token de registru privat sau cheie SSH în timpul construirii.Cum să configurați profilurile de constructor DockerImagini diferite au nevoie de resurse diferite de constructor.Cum să construiți multe imagini dintr-un monorepoFiecare push construiește fiecare imagine din depozit.Cum se publică în mai multe registreAceeași imagine este construită o dată pe registru.Cum să configurați un cache de tip pull-through de registryAtragerile de imagini sunt lente și continuați să atingeți limitele de rată de la Docker Hub.
braț647
Cum să mutați CI la arm64 alergătoriImplementați pe Graviton sau Ampere, dar construiți pe x64.Lista de verificare a migrației arm64Vrei să treci la arm64 fără a rupe conducta.Compilarea încrucișată versus brațul nativ64Aveți nevoie de binare arm64 și nu sunteți sigur dacă să compilați încrucișat sau să construiți nativ.De ce versiunile QEMU arm64 sunt atât de lenteAdăugarea linux/arm64 la o construcție Docker o face de douăzeci de ori mai lent.Fixarea modulelor native Node pe arm64Instalarea npm eșuează sau se compilează din sursă pe runnerele arm64.Fixarea roților Python pe braț64pip install compilează pachete din sursă pe arm64.Bazându-se pe alergătorii AWS GravitonVrei avantajul preț-performanță Graviton în CI.
macOS și iOS8
Cum să reduceți timpii de construire Xcode în CICompilările Xcode durează douăzeci de minute la fiecare rulare.Cum să accelerezi testele simulatorului iOSTestele pe simulator durează o jumătate de oră.Cum să gestionați semnarea codului iOS în CISemnarea funcționează local și eșuează intermitent în CI.Cum să legalizați aplicațiile macOS în CINotarizarea este lentă și uneori expiră.Remedierea epuizării discului macOS RunnerLucrările eșuează fără spațiu rămas pe dispozitiv pe macOS.Cum să paralelizezi iOS CIiOS CI este serial, iar minutele macOS sunt scumpe.Cum se încarcă în TestFlight de la CIÎncărcările TestFlight sunt lente și uneori eșuează după o construcție reușită.Cum să fixați versiunile XcodeO actualizare a imaginii runner a schimbat în tăcere versiunea Xcode, iar construcția dvs. s-a schimbat odată cu ea.
Windows5
Cum să faci Windows CI mai rapidLucrările Windows durează de trei ori mai mult decât lucrările echivalente Linux.Cum să memorați în cache ieșirea MSBuildFiecare build recompilează toate proiectele.Instalarea componentelor Visual Studio în CILipsește o sarcină de lucru VS necesară, iar instalarea durează cincisprezece minute.Cum să semnezi binare Windows în CISemnarea Authenticode necesită un certificat care nu trebuie expus.Cum să paralelizezi testele .NETTestele .NET rulează în serie și durează douăzeci de minute.
Securitate6
Cum să gestionezi secretele în GitHub ActionsSecretele sunt răspândite în setările depozitului și nimeni nu știe ce este încă folosit.Cum să rulați CI runners în VPC-ul dvsBuild-urile trebuie să ajungă la un serviciu intern care nu este expus public.Cum să le oferi alergătorilor un IP staticUn serviciu terță parte necesită listarea permiselor IP și IP-urile alergătorilor găzduiți se modifică în mod constant.Cum să rulați scanări de securitate fără a încetini CIScanarea vulnerabilităților adaugă minute la fiecare solicitare de extragere.Cum să vă asigurați lanțul de aprovizionare CIAcțiunile terță parte rulează cu acces la depozitul și secretele dvs.Cum să întărești permisiunile pentru fluxul de lucruFiecare flux de lucru rulează cu acces de scriere de care nu are nevoie.
Observabilitate10
Cum să colectați valorile alergătorilorNu puteți spune dacă un job este legat de CPU, de memorie sau de disc.Cum să urmăriți percentilele duratei construcțieiTimpul mediu de construcție pare bine, dar dezvoltatorii încă se plâng.Cum să exportați urmele CI cu OpenTelemetryDatele de sincronizare CI trăiesc într-un instrument separat de restul observabilității dvs.Cum să interogăți datele CI în mod programaticAveți nevoie de date CI într-un tablou de bord sau într-un raport săptămânal.Cum să rulați un raport săptămânal de sănătate CICI se degradează treptat și nimeni nu observă până când este rău.Cum să alertați cu privire la regresiile CIO schimbare face CI cu 40% mai lent și trece neobservată timp de săptămâni.Cum să te descurci cu locurile de muncă scazute din CITestele eșuează aleatoriu și oamenii reîncearcă până când trec.Cum să depanați un flux de lucru eșuatO lucrare eșuează în CI și funcționează peste tot.Cum să setați nivelurile de serviciu CINimeni nu este de acord cu cât de rapid ar trebui să fie CI, așa că nu primește niciodată prioritate.Cum să expuneți datele CI agenților AIAgenții care depanează erorile CI au doar text de jurnal cu care să lucreze.
Scară28
Cum să scalați alergătorii auto-găzduițiAlergătorii auto-găzduiți fie stau la coadă la vârf, fie stau inactiv și sunt scumpi.Cum se utilizează grupurile de alergătoriOrice depozit poate programa joburi pe orice runner.Cum să proiectați o strategie de etichetă de alergătorEtichetele au crescut organic și nimeni nu știe pe care să le folosească.Găzduit sau BYOC: cum să alegiNu sunteți sigur dacă folosiți alergători găzduiți sau implementați în propriul dvs. cloud.Cum să utilizați fluxurile de lucru reutilizabile la scarăCincizeci de depozite au cincizeci de copii ușor diferite ale aceleiași conducte.Cum să coordonați fluxurile de lucru între depoziteO schimbare într-un depozit trebuie să declanșeze versiuni în altele.Cum să construiți imagini personalizate ale alergătorilorFiecare lucrare petrece câteva minute instalând aceleași instrumente.Cum să lansați actualizările imaginii de bază în siguranțăO actualizare de bază a imaginii întrerupe versiunile în mai multe depozite simultan.Cum să gestionați încărcarea CI pentru bot de dependențăDependabot deschide treizeci de solicitări de extragere și crește costurile CI.Cum să lucrați cu limite de concurențăCoada de locuri de muncă și nu este clar care limită este obligatorie.Cum să utilizați eficient lucrările containeruluiLucrările container oferă reproductibilitate, dar întrerup stocarea în cache.Cum să utilizați corect containerele de serviceTestele eșuează intermitent la pornire.Cum să construiți o dată și să implementați de mai multe oriAcelași artefact este reconstruit pentru fiecare mediu.Cum să structurați joburile de implementareImplementările sunt lente, riscante și greu de auditat.Cum să rulați eficient mediile de previzualizareFiecare cerere de extragere așteaptă o construcție completă a mediului.Cum să structurați versiunile de versiuniVersiunile de lansare sunt lente și uneori nereproductibile.Cum se publică artefacte de construcțieCosturile de stocare a artefactelor sunt în creștere și păstrarea nu a fost niciodată configurată.Cum să gestionați încărcările mari de artefacteÎncărcarea ieșirii versiunii durează câteva minute.Cum să obțineți versiuni incrementale în CICI face întotdeauna o construcție curată, chiar dacă sistemul dvs. de compilare acceptă compilarea incrementală.Cum să transferați date între locuri de muncăLocurile de muncă trebuie să partajeze producția de construcție și nu este clar cum.Cum să utilizați matricea construiește bineMatricea a crescut și nimeni nu-și amintește de ce există fiecare combinație.Cum se controlează explozia matriceiO mică modificare a matricei a triplat numărul de locuri de muncă și factura.Cum se dimensionează runnerele pentru versiunile JavaGhiciți o dimensiune de alergător pentru o construcție Maven sau Gradle.Cum se dimensionează runnerele pentru suitele de testare NodeLucrătorii Jest sau Vitest fie mor de foame, fie se bat și nu sunteți sigur care.Cum se dimensionează runnerele pentru suitele de testare Pythonpytest rulează pe un nucleu, în timp ce runnerul are opt inactiv.Cum se dimensionează ghidajele pentru construcția RustCargo creează scară cu miezuri, dar nu este clar cât de departe ajunge.Cum se dimensionează rulourile pentru versiunile DockerAlegeți o dimensiune de rulare pentru imagini.Cum să dimensionați alergătorii pentru versiunile AndroidAsamblarea Gradle și testele de instrumentare necesită mașini foarte diferite.