Co się zmienia, gdy samodzielnie hostowany runner Git staje się częścią codziennego przepływu pracy dewelopera?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Gdy samodzielnie hostowany runner Git trafia do codziennego przepływu pracy, staje się zależnością produkcyjną: programiści zaczynają polegać na jego kolejce, toolchainie, dostępie do sieci, sekretach, pamięciach podręcznych i czasie odzyskiwania sprawności.

Topologia powinna zatem oddzielać sterowanie od wykonywania, sprawiać, by zadania były jednorazowe, oraz zachowywać wyłącznie stan, który jest celowo współdzielony. Szybki, trwały runner jest wygodny, ale ukryty dryf konfiguracji i szerokie uprawnienia mogą zmienić tę wygodę w delikatną granicę zaufania.

Traktuj runner jako zdalne wykonanie kodu

Każde zaakceptowane zadanie wykonuje kod kontrolowany przez repozytorium na infrastrukturze, której jesteś właścicielem. Zdefiniuj, które repozytoria, gałęzie, osoby współtworzące i zdarzenia związane z pull requestami mogą docierać do runnera, zanim przypiszesz mu poświadczenia wdrożeniowe lub pakietowe.

Projekt runnera oparty na microVM wykorzystuje jednorazowe maszyny wirtualne, aby zachować wydajność rozwiązania self-hosted, jednocześnie ograniczając stan przenoszony z jednego zadania do następnego.

Używaj oddzielnych grup runnerów dla zaufanych zadań wydawniczych i zwykłych testów. Publiczny workflow lub workflow uruchamiany przez fork nie powinien współdzielić środowiska wykonywania z sekretami wdrożeniowymi produkcji.

Przejdź od jednej szybkiej maszyny do kontraktu kolejki

Codzienne użycie tworzy oczekiwania dotyczące czasu pobrania zadania, współbieżności, anulowania i priorytetu. Mierz opóźnienie kolejki oddzielnie od czasu trwania zadania, aby nie mylić wolnego testu z niewystarczającą przepustowością runnera.

Ustaw współbieżność poniżej poziomu, przy którym jednoczesne kompilacje wysycają pamięć, magazyn danych lub pobieranie obrazów Dockera. Zarezerwuj przepustowość dla zadań interaktywnych lub wydawniczych, jeśli nie powinny czekać za długimi macierzami testów.

Udokumentuj rozwiązanie awaryjne dla programistów, gdy runner jest offline: wykonywanie hostowane, lokalne polecenie lub opóźnione zadanie niekrytyczne. Bez rozwiązania awaryjnego konserwacja staje się nieplanowaną awarią środowiska deweloperskiego.

Oddziel odbudowywalną pamięć podręczną od trwałego stanu

Stan runnera Zachować? Ochrona
Wypisany kod źródłowy Nie Pobieraj dla każdego zadania
Pamięć podręczna zależności i warstw Odbudowywalna Limit i automatyczne czyszczenie
Rejestracja runnera Wymienialna Automatyczna rejestracja
Artefakty kompilacji Zgodnie z zasadami przechowywania Zewnętrzny magazyn artefaktów
Sekrety i klucze wdrożeniowe Tak, ale nie na dysku Usługa sekretów z ograniczonym zakresem

Pamięci podręczne usprawniają codzienną pracę, ale muszą mieć limit rozmiaru, model własności i regułę usuwania. Artefakty kompilacji i dowody wydania powinny trafiać do zewnętrznego miejsca z jasno określonym czasem przechowywania, a nie do nieograniczonego katalogu roboczego.

Spraw, aby runner można było odtworzyć z obrazu lub skryptu aprowizacji. Jeśli odbudowa hosta niszczy jedyny klucz podpisujący lub wynik testu, te zasoby zostały zapisane w niewłaściwej roli.

-15% OFF

Dodaj poprawki, obserwowalność i odpowiedzialność za awarie

Śledź wersję runnera, poprawki systemu operacyjnego, wersje Dockera lub toolchaina, użycie dysku, współczynnik nieudanych zadań, opóźnienie kolejki i wzrost pamięci podręcznej. Wyznacz jedno okno konserwacyjne i jedną osobę odpowiedzialną, nawet gdy runner działa na osobistym serwerze.

Empiryczne badanie konserwacji workflow wykazało, że sama automatyzacja generuje stałą pracę związaną z naprawą błędów i usprawnianiem CI. Self-hosting dodaje do tego obciążenia cykl życia hosta.

Ustaw alerty dotyczące stanu offline, powtarzających się nieudanych zadań, pełnych dysków i nietypowo długich kolejek. Logi muszą wskazywać, czy przyczyną awarii był kod repozytorium, obraz runnera, dostęp do sieci czy host.

Przeprowadź test gotowości do codziennego przepływu pracy

Odtwórz runnera, zmień poświadczenie wdrożeniowe, uruchom dwie równoległe kompilacje, zapełnij i wyczyść pamięć podręczną, a następnie celowo odłącz hosta od sieci w trakcie zadania. Potwierdź, że programiści widzą awarię i mogą skorzystać ze ścieżki awaryjnej.

Pozostaw runnera na jednym hoście, gdy przestój jest akceptowalny, a zadania są zaufane. Rozdziel obciążenia wydawnicze, niezaufane lub zależne od konkretnego sprzętu, gdy wymagają różnych poświadczeń lub okien konserwacyjnych. Przewodnik po systemach operacyjnych serwerów domowych pomaga dopasować hosta runnera do powtarzalnych aktualizacji i odzyskiwania sprawności.

Przestań traktować runnera jak usługę hobbystyczną, gdy pominięte zadania blokują wydania lub pracę z klientami. W tym momencie zdefiniuj własność usługi, zapasową przepustowość i przetestowaną wymianę, tak jak w przypadku każdej innej zależności środowiska deweloperskiego.

Końcowa zasada konfiguracji

Konfiguracja spełnia wymagania, gdy każda usługa ma przypisaną rolę, chroniony stan, kontrolowaną ścieżkę dostępu, przetestowane odtwarzanie oraz mierzalny sygnał wskazujący, kiedy należy rozdzielić lub rozszerzyć topologię.

Konfiguracja NAS i serwera

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.