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.
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

Jak zbudować domowy serwer w pokoju w akademiku, nie zajmując całego jedynego biurka
Serwer w akademiku powinien mieścić się w jednej małej, cichej i energooszczędnej obudowie usługowej, z uporządkowanym okablowaniem, prywatnym dostępem oraz możliwością odzyskania danych poza...

Dlaczego studenci budują własne serwery zamiast płacić za większą przestrzeń w chmurze?
Studenci zyskują kontrolę nad pamięcią masową i praktyczne umiejętności z zakresu systemów dzięki własnemu serwerowi, ale chmura nadal ma dużą wartość ze względu na...

Odzyskiwalna konfiguracja domowego laboratorium deweloperskiego do wymiany dysku rozruchowego
Zachowaj wymienność dysku rozruchowego, przenosząc definicje, trwały stan, sekrety i dane potrzebne do odzyskiwania do udokumentowanych, niezależnie tworzonych warstw kopii zapasowych.

