Pipeline, który dokłada wątpliwości zamiast jasnego sygnału

Pipeline, który dokłada wątpliwości zamiast jasnego sygnału

Dobry pipeline ma mówić po prostu: ta zmiana coś zepsuła albo środowisko jest niezdrowe. Gdy przez miesiące słyszysz raczej „znów coś poszło, odpal jeszcze raz”, przestajesz słuchać treści komunikatu - słuchasz tylko dźwięku alarmu. Ten tekst jest o cenie tego znieczulenia, szczególnie dla QA, które w tym samym czasie próbuje zrozumieć realne ryzyko zmiany.

Objawy, które znasz z autopsji

Zazwyczaj nie trzeba długo szukać:

  • Losowość - ten sam job przechodzi cztery razy z rzędu, piąty raz pada na kroku, który „nikt nie dotykał”.
  • Retry jako procedura - zamiast diagnozy jest playbook: „poczekaj pięć minut i kliknij jeszcze raz”.
  • Brak właściciela czerwieni - kanał #builds świeci na czerwono, a wątek kończy się na „u mnie działa” albo „to infrastruktura”.
  • Żarty zamiast reakcji - śmiech maskuje to, że nikt już nie wierzy, że czerwień coś znaczy.

To nie jest tylko kwestia frustracji deweloperów. To jest uszkodzony kanał informacyjny, dokładnie ten, na którym opiera się wiele zespołów, żeby powiedzieć „main jest zdrowy”.

Koszt większy niż minuty na retry

Pierwszy poziom kosztu to oczywiste: czas na ponowne uruchomienia, blokady na merge’u, czekanie na slot na środowisku.

Drugi poziom jest cichszy: triage bez końca. Ktoś musi przeczytać log, stwierdzić „znów ten sam timeout”, wrzucić link do zgłoszenia z zeszłego miesiąca i wrócić do PR-a, który właśnie miał być przeanalizowany pod kątem zakresu. Każda taka pętla zabiera uwagę, której nie odzyskasz przez „szybszy komputer”.

Trzeci poziom to normalizacja czerwieni. Gdy większość alarmów okazuje się szumem, ludzie przestają traktować każdy czerwony build jako sygnał do zatrzymania się. Wtedy pojawia się merge „bo i tak zwykle to flak” - i dokładnie wtedy prawdziwy regres wygląda jak kolejny fałszywy alarm, dopóki nie wypłynie na produkcji.

Dla QA oznacza to podwójne obciążenie: musicie i tak rozumieć zmianę (patrz wpis o czasie na PR i zakres), a jednocześnie filtrować hałas z pipeline’u, żeby w ogóle wiedzieć, czy Wasza praca eksploracyjna ma sens w danym momencie.

Przeoczone edge case’y jako efekt systemu

Kiedy coś pęknie na produkcji, łatwo winić „brak przypadku testowego”. Często bliżej prawdy jest prostszy mechanizm:

  • Cienkie zrozumienie zmiany - bo czas poszedł na piąty retry i piątą dyskusję o tym, czy środowisko testowe ma aktualną konfigurację.
  • Wyczerpany budżet uwagi - po trzech fałszywych alarmach w ciągu dnia trudniej wejść w głęboką analizę granic feature’u.
  • Granice systemu - integracje, uprawnienia, kolejki, dane testowe, strefy czasowe - tam, gdzie jedna założona „oczywistość” nie jest prawdą.

To nie zawsze jest historia „za mało testów”. Często to historia sygnału zagłuszonego przez szum - i o tym warto mówić w retrospektywach tak samo poważnie jak o pokryciu.

Co naprawiać najpierw - kolejność ma znaczenie

Sensowna kolejność zwykle wygląda tak:

  1. Rozdziel sygnał od szumu - zanim dorzucisz testy, ustal, które czerwienie realnie mówią o jakości zmiany, a które o niestabilnym środowisku, danych albo znanym flaku.
  2. Ustabilizuj albo wyizoluj - flaky suite, który blokuje każdy PR, powinien być albo naprawiony, albo oznaczony i odseparowany tak, żeby nie udawał bramki jakości na main.
  3. Właścicielstwo i SLA - kto reaguje na czerwień na main, w jakim czasie, kiedy eskalacja - bez tego wracacie do „wszyscy patrzą, nikt nie klika”.

Poniżej skrót, który możecie wkleić do notatek zespołu:

Objaw Typowy pierwotny powód Sensowny pierwszy krok
Ten sam krok pada „losowo” Race, timeout, zewnętrzna zależność, brudne dane Odtwarzalny log, minimalny repro, limit czasu i retry z limitem
Pada tylko na CI, lokalnie nie Różnica środowiska, sekrety, zasoby Porównanie env, jawna lista założeń CI
Pada po merge innej zmiany Coupling testów, współdzielone konto, kolejność Izolacja danych, kolejka jobów, review zależności
Zawsze ten sam zespół „naprawia build” Brak rotacji właścicielstwa Jasny owner kroku + rotacja albo runbook

To nie zastępuje debugowania, ale zatrzymuje zespół przed dokładaniem testów na fundament, który już pęka.

Metryki, które coś mówią (nawet przybliżone)

Nie musicie od razu budować dashboardu. Wystarczy przez dwa tygodnie zbierać ręcznie:

  • Ile procent czerwonych buildi na main kończy się statusem „znany flake / środowisko” zamiast „realny defekt”? Jeśli to jest większość, problemem nie jest pokrycie - problemem jest wiarygodność sygnału.
  • Ile medianowo minut od czerwieni do decyzji (retry, fix, revert)? Rosnąca mediana często oznacza brak właściciela, nie „trudne bugi”.
  • Ile razy QA przerywa analizę PR-a, żeby zająć się „pilnym” buildem? To jest bezpośredni most do tekstu o ukrytym podatku na kontekst zmiany.

Zamknięcie

Jeśli u Was CI jest memem, odpowiedź rzadko brzmi wyłącznie „dokup więcej testów”. Zwykle potrzebujecie czyściejszego sygnału z pipeline’u i krótkiego, wspólnego obrazu zmiany zanim odpalicie wszystko - inaczej dokładacie kolejne minuty wykonania na fundament pełen fałszywych alarmów.

Nie chodzi o perfekcję zielonego builda przez sto procent czasu. Chodzi o to, żeby gdy jest czerwono, zespół wiedział, że to ma znaczenie - i żeby QA mogło spokojnie policzyć czas na zrozumienie zakresu, zamiast gasić kolejny pozorny pożar.