runnerhut
Poradniki
Rozwiązania problemów CI, które zespoły faktycznie napotykają.
Prędkość13
Jak przyspieszyć GitHub ActionsTwój rurociąg trwa dłużej, niż ktokolwiek chciałby czekać, i nie jest oczywiste, kiedy ten czas upływa.Jak znaleźć powolny krok w przepływie pracyRurociąg jest powolny, ale każdy pojedynczy krok wygląda rozsądnie.Jak ograniczyć GitHub Actions zimne startyZadania pozostają od 30 do 90 sekund przed uruchomieniem pierwszego kroku.Jak zdiagnozować GitHub Actions czasy kolejekZadania czekają w kolejce przez kilka minut, zanim biegacz je odbierze.Jak przyspieszyć realizację transakcji gitdziałania/zamówienie zajmuje kilka minut w dużym repozytorium.Jak uruchomić CI na bardzo dużym repozytoriumKasowanie, indeksowanie i raportowanie statusu pogarszają się wraz z rozwojem repozytorium.Jak przyspieszyć realizację transakcji Git LFSObiekty LFS są pobierane seryjnie i dominują w czasie realizacji transakcji.Jak wyeliminować przestoje w pracyJobs spędza czas na nic nierobieniu — czekaniu na usługę, uśpieniu lub pętli ankiet.Jak sobie radzić z długotrwałymi zadaniamiNiektóre zadania trwają godzinami i czasami przekraczają limit sześciu godzin.Jak efektywnie uruchamiać kompilacje nocneNocne kompilacje są drogie i nikt nie czyta wyników.Jak zatrzymać burze ponownego uruchomienia CIProgramiści wielokrotnie uruchamiają nieudane zadania, mnożąc koszty i ukrywając prawdziwe awarie.Jak podzielić testy na macierzW potoku dominuje jedno długie zadanie testowe.Jak uruchomić tylko te testy, których dotyczy zmianaKażde naciśnięcie uruchamia cały zestaw testów niezależnie od tego, co się zmieniło.
Koszt13
Jak zmniejszyć koszty GitHub ActionsRachunek CI rośnie szybciej niż zespół i nikt nie jest pewien dlaczego.Jak zmierzyć koszt CI na żądanie ściągnięciaZnasz miesięczną sumę, ale nie wiesz, ile kosztuje pojedyncze żądanie ściągnięcia.Jak przypisać koszty CI do zespołówWydatki na CI stanowią jedną linię na fakturze i żaden zespół nie czuje się za nie odpowiedzialny.Jak ustawić budżet minut CIWydatki są odkrywane pod koniec miesiąca, a nie kontrolowane w jego trakcie.Kiedy więksi biegacze faktycznie oszczędzają pieniądzeWiększy biegacz kosztuje więcej za minutę, więc nie jest jasne, czy ogólnie jest tańszy.Jak obniżyć koszty uruchamiania systemu macOSmacOS dominuje na rachunku CI.Jak zmniejszyć koszty wyjścia CITransfer danych stanowi dużą i rosnącą część rachunku BYOC.Jak obniżyć koszty ściągania ECRPobieranie obrazów kontenerów generuje znaczne opłaty za transfer danych.Jak obniżyć koszty transferu S3 w CIRuch pamięci podręcznej i artefaktów do S3 jest kosztowny.Prawdziwy koszt biegaczy hostowanych samodzielnieBiegacze korzystający z własnego hostingu wyglądają bezpłatnie przy rozliczeniu minutowym.Jak korzystać z instancji punktowych dla biegaczy CIWystąpienia na żądanie są drogie w przypadku obciążeń, które z natury można ponawiać.Jak prawidłowo dobrać rozmiar swoich biegaczyRozmiary biegaczy zostały wybrane raz i nigdy nie były ponownie sprawdzane.Jak ekonomicznie uruchomić CI na otwartym kodzie źródłowymCI typu open source jest bezpłatne w przypadku modułów uruchamiających hostowanych na GitHubie, ale jest powolne, a samodzielne hostowanie jest niebezpieczne.
Buforowanie16
Jak sprawić, by pamięci podręczne CI faktycznie przetrwałyPamięci podręczne są skonfigurowane, ale współczynnik trafień jest niski.Jak obejść limit 10 GB pamięci podręcznejTwoje pamięci podręczne przekraczają 10 GB na repozytorium i zaczynają dyskretnie eksmitować.Jak udostępnić pamięć podręczną kompilacji pomiędzy repozytoriamiKażde repozytorium utrzymuje własną pamięć podręczną dla tych samych współużytkowanych zależności.Jak współdzielić pamięć podręczną Docker pomiędzy zadaniamiKażda noga matrycy odbudowuje te same warstwy.Jak naprawić unieważnienie pamięci podręcznej DockerWarstwy Docker odbudowują się nawet wtedy, gdy odpowiednie pliki nie uległy zmianie.Jak napisać klucz pamięci podręcznej, który trafiaPamięć podręczna jest skonfigurowana, ale brakuje jej przy każdym uruchomieniu.Jak używać ccache w GitHub ActionsKompilacje C i C++ rekompilują wszystko przy każdym uruchomieniu.Jak używać sccache do kompilacji RustCargo odbudowuje zależności, gdy brakuje pamięci podręcznej katalogu docelowego.Jak włączyć pamięć podręczną konfiguracji GradleGradle spędza od 30 do 60 sekund na konfigurowaniu przed kompilacją czegokolwiek.Jak buforować menedżerów łańcucha narzędzimise, asdf lub proto instalują ponownie środowiska wykonawcze języka przy każdym uruchomieniu.Jak buforować pakiety NuGetdotnet Restore pobiera te same pakiety przy każdym uruchomieniu.Jak buforować transformacje JestJest ponownie przekształca każdy plik przy każdym uruchomieniu.Jak buforować pakiety vcpkg i ConanMenedżerowie zależności C++ odbudowują pakiety ze źródła przy każdym uruchomieniu.Jak buforować dane pochodne XcodeXcode przebudowuje cały projekt przy każdym uruchomieniu CI.Wybór zaplecza pamięci podręcznej buildxIstnieją cztery backendy pamięci podręcznej i nie jest jasne, którego użyć.Jak utrzymać ciepło pamięci podręcznej gałęzi podstawowejNowe gałęzie funkcji zawsze zaczynają się od zimnej pamięci podręcznej.
Docker12
Jak skonfigurować buforowanie warstw DockerKompilacja Docker zajmuje dziesięć minut, ponieważ każda warstwa jest przebudowywana.Jak zoptymalizować plik Dockerfile pod kątem CIMałe zmiany w kodzie powodują długie przebudowy.Jak korzystać z wieloetapowych kompilacji DockerObrazy są duże i zawierają narzędzia do kompilacji, które nie powinny być wysyłane.Jak bezpiecznie uruchamiać współbieżne kompilacje DockerRównoległe odnogi matrycy rywalizują ze sobą, a kompilacje spowalniają lub kończą się niepowodzeniem.Jak korzystać ze zdalnego kreatora DockerPamięć podręczna warstwy jest przesyłana do i z modułu runner przy każdej kompilacji.Jak szybko tworzyć obrazy wieloplatformoweDodanie linux/arm64 sprawia, że kompilacja zajmuje dwadzieścia minut.Jak zmniejszyć rozmiar obrazu konteneraObrazy zajmują setki megabajtów i ich pobieranie przy każdym zadaniu jest powolne.Jak przekazać sekrety do kompilacji DockerPodczas kompilacji potrzebny jest token rejestru prywatnego lub klucz SSH.Jak skonfigurować profile konstruktora DockerRóżne obrazy wymagają różnych zasobów konstruktora.Jak zbudować wiele obrazów z monorepoKażde naciśnięcie powoduje utworzenie każdego obrazu w repozytorium.Jak publikować w wielu rejestrachTen sam obraz jest tworzony raz dla każdego rejestru.Jak skonfigurować pamięć podręczną rejestruPobieranie obrazów jest powolne i ciągle przekraczasz limity szybkości Docker Hub.
ramię647
Jak przenieść CI do uzbrajania biegaczyWdrażasz w Graviton lub Ampere, ale budujesz na x64.lista kontrolna migracji arm64Chcesz przejść do arm64 bez przerywania potoku.Kompilacja krzyżowa a natywna wersja 64Potrzebujesz plików binarnych arm64 i nie jesteś pewien, czy kompilować krzyżowo, czy budować natywnie.Dlaczego kompilacje QEMU arm64 są tak powolneDodanie linux/arm64 do kompilacji Docker powoduje, że jest ona dwudziestokrotnie wolniejsza.Naprawianie natywnych modułów Node na arm64instalacja npm kończy się niepowodzeniem lub kompiluje się ze źródła na biegaczach arm64.Mocowanie kół Pythona na ramieniu64pip install kompiluje pakiety ze źródła na arm64.Opiera się na prowadnicach AWS GravitonChcesz przewagi cenowej Graviton w CI.
macOS i iOS8
Jak skrócić czas kompilacji Xcode w CIKażde uruchomienie kompilacji Xcode zajmuje dwadzieścia minut.Jak przyspieszyć testy symulatora iOSTesty na symulatorze trwają pół godziny.Jak obsługiwać podpisywanie kodu iOS w CIPodpisywanie działa lokalnie i czasami kończy się niepowodzeniem w CI.Jak poświadczyć aplikacje macOS w CINotarializacja jest powolna i czasami przekracza limit czasu.Naprawianie wyczerpania dysku runner systemu macOSZadania kończą się niepowodzeniem z powodu braku wolnego miejsca na urządzeniu w systemie macOS.Jak zrównoleglić iOS CIiOS CI to połączenie szeregowe, a minuty w systemie MacOS są drogie.Jak przesłać do TestFlight z CIPrzesyłanie TestFlight jest powolne i czasami kończy się niepowodzeniem po pomyślnej kompilacji.Jak przypiąć wersje XcodeAktualizacja obrazu modułu uruchamiającego po cichu zmieniła wersję Xcode, a wraz z nią zmieniła się Twoja kompilacja.
Okna5
Jak przyspieszyć CI WindowsZadania w systemie Windows trwają trzy razy dłużej niż równoważne zadania w systemie Linux.Jak buforować dane wyjściowe programu MSBuildKażda kompilacja powoduje rekompilację wszystkich projektów.Instalowanie komponentów Visual Studio w CIBrakuje wymaganego obciążenia VS, a jego instalacja zajmuje piętnaście minut.Jak podpisywać pliki binarne systemu Windows w CIPodpisywanie Authenticode wymaga certyfikatu, którego nie wolno ujawniać.Jak zrównoleglić testy .NETTesty .NET są uruchamiane szeregowo i trwają dwadzieścia minut.
Bezpieczeństwo6
Jak zarządzać sekretami w GitHub ActionsSekrety są rozsiane po ustawieniach repozytorium i nikt nie wie, co jest nadal używane.Jak uruchomić moduły CI w swoim VPCKompilacje muszą dotrzeć do usługi wewnętrznej, która nie jest ujawniana publicznie.Jak nadać biegaczom statyczny adres IPUsługa strony trzeciej wymaga umieszczenia na liście dozwolonych adresów IP, a adresy IP hostowanych biegaczy stale się zmieniają.Jak uruchamiać skanowanie bezpieczeństwa bez spowalniania CISkanowanie pod kątem luk w zabezpieczeniach dodaje minuty do każdego żądania ściągnięcia.Jak zabezpieczyć swój łańcuch dostaw CIDziałania stron trzecich są uruchamiane z dostępem do Twojego repozytorium i sekretów.Jak wzmocnić uprawnienia przepływu pracyKażdy przepływ pracy działa z dostępem do zapisu, którego nie potrzebuje.
Obserwowalność10
Jak zbierać dane o biegaczachNie można stwierdzić, czy zadanie jest powiązane z procesorem, pamięcią czy dyskiem.Jak śledzić percentyle czasu trwania kompilacjiŚredni czas kompilacji wygląda dobrze, ale programiści nadal narzekają.Jak eksportować ślady CI za pomocą OpenTelemetryDane dotyczące czasu CI znajdują się w oddzielnym narzędziu od reszty obserwowalności.Jak programowo wysyłać zapytania do danych CIPotrzebujesz danych CI w dashboardzie lub cotygodniowym raporcie.Jak wygenerować cotygodniowy raport o kondycji CICI ulega stopniowej degradacji i nikt tego nie zauważa, dopóki nie stanie się zła.Jak ostrzegać o regresjach CIZmiana sprawia, że CI jest o 40% wolniejszy i pozostaje niezauważony przez tygodnie.Jak radzić sobie z niestabilnymi zadaniami CITesty kończą się niepowodzeniem i ludzie próbują ponownie, dopóki nie zaliczą testu.Jak debugować nieudany przepływ pracyZadanie kończy się niepowodzeniem w CI i działa wszędzie indziej.Jak ustawić poziomy usług CINikt nie jest zgodny co do tego, jak szybka powinna być CI, więc nigdy nie jest ona traktowana priorytetowo.Jak udostępnić dane CI agentom AIAgenci debugujący awarie CI mają do dyspozycji tylko tekst dziennika.
Skala28
Jak skalować biegaczy hostowanych na własnym serwerzeBiegacze z własnym hostingiem albo ustawiają się w kolejce w godzinach szczytu, albo siedzą bezczynnie i są kosztowni.Jak korzystać z grup biegaczyKażde repozytorium może planować zadania na dowolnym biegaczu.Jak zaprojektować strategię dotyczącą etykiet biegowychEtykiety rosły organicznie i nikt nie wiedział, których użyć.Hostowane lub BYOC: jak wybraćNie masz pewności, czy skorzystać z hostowanych modułów biegaczy, czy wdrożyć je we własnej chmurze.Jak korzystać z przepływów pracy wielokrotnego użytku na dużą skalęPięćdziesiąt repozytoriów ma pięćdziesiąt nieco różnych kopii tego samego potoku.Jak koordynować przepływy pracy w repozytoriachZmiana w jednym repozytorium musi wywołać kompilację w innym.Jak tworzyć niestandardowe obrazy biegaczyKażda praca wymaga kilku minut na zainstalowanie tych samych narzędzi.Jak bezpiecznie wdrażać aktualizacje obrazu podstawowegoAktualizacja obrazu podstawowego przerywa kompilacje w wielu repozytoriach jednocześnie.Jak obsługiwać obciążenie CI bota zależnościZależność otwiera trzydzieści żądań ściągnięcia i skoki kosztów CI.Jak pracować z limitami współbieżnościZadania stoją w kolejce i nie jest jasne, który limit jest wiążący.Jak efektywnie wykorzystywać zadania konteneroweZadania kontenera zapewniają powtarzalność, ale przerywają buforowanie.Jak prawidłowo korzystać z kontenerów usługowychTesty czasami kończą się niepowodzeniem przy uruchomieniu.Jak zbudować raz i wdrożyć wiele razyTen sam artefakt jest odbudowywany dla każdego środowiska.Jak zorganizować zadania wdrożenioweWdrożenia są powolne, ryzykowne i trudne do kontrolowania.Jak efektywnie uruchamiać środowiska podgląduKażde żądanie ściągnięcia czeka na kompilację pełnego środowiska.Jak strukturyzować kompilacje wydańKompilacje wydań są powolne i czasami niemożliwe do odtworzenia.Jak publikować artefakty kompilacjiKoszty przechowywania artefaktów rosną, a przechowywanie nigdy nie zostało skonfigurowane.Jak obsługiwać przesyłanie dużych artefaktówPrzesyłanie wyników kompilacji zajmuje kilka minut.Jak uzyskać przyrostowe kompilacje w CICI zawsze wykonuje czystą kompilację, nawet jeśli Twój system kompilacji obsługuje kompilację przyrostową.Jak przekazywać dane pomiędzy zadaniamiZadania muszą udostępniać wyniki kompilacji i nie jest jasne, w jaki sposób.Jak dobrze korzystać z matrycMatryca rozrosła się i nikt nie pamięta, dlaczego istnieje każda kombinacja.Jak kontrolować eksplozję matrixaNiewielka zmiana matrycy potroiła liczbę zadań i rachunek.Jak dobrać rozmiar modułów biegaczy dla kompilacji JavaZgadujesz rozmiar biegacza dla kompilacji Maven lub Gradle.Jak dobrać rozmiar modułów biegaczy dla zestawów testów NodePracownicy Jest lub Vitest albo głodują, albo rzucają się i nie jesteś pewien, który.Jak dobrać rozmiar modułów biegaczy dla zestawów testów Pythonapytest działa na jednym rdzeniu, podczas gdy biegacz ma osiem bezczynnych.Jak dobrać rozmiar biegaczy do wersji RustCargo buduje skalę za pomocą rdzeni, ale nie jest jasne, jak daleko to sięga.Jak dobrać rozmiar prowadnic do kompilacji DockerWybierasz rozmiar prowadnicy do budowania obrazu.Jak dobrać rozmiar prowadnic do wersji na AndroidaMontaż Gradle i testy oprzyrządowania wymagają bardzo różnych maszyn.