Wprowadzenie
CI/CD – ciągła integracja i ciągłe dostarczanie – brzmi jak must-have każdej nowoczesnej firmy. I słusznie, bo automatyzacja buildów, testów i deploymentów oszczędza czas i redukuje błędy. Jednak w małych firmach często implementuje się CI/CD na szybko, bez głębszej refleksji. Efekt? Zamiast przyspieszać, pipeline staje się wąskim gardłem, generuje niepotrzebne koszty i frustrację zespołu. W tym artykule pokażę trzy najczęstsze błędy w strategii CI/CD, które widzę u klientów – i podpowiem, jak je naprawić.
1. Za długi czas wykonania pipeline’u – gdy czekanie zabija flow
Wielu developerów w małych firmach narzeka: „Pushuję kod, a potem czekam 20 minut na zielone światło”. Długi pipeline to wróg produktywności. Zamiast płynnie przechodzić do kolejnego zadania, programista przerywa pracę, sprawdza status, poprawia błędy i czeka ponownie. Badania pokazują, że przerwanie koncentracji na 10 minut może kosztować nawet 23 minuty na powrót do pełnego skupienia.
Przykład z życia:
Klient (firma SaaS z 6 developerami) miał pipeline, który uruchamiał pełną baterię testów integracyjnych, end-to-end i skanów bezpieczeństwa przy każdym pushu. Średni czas wykonania – 35 minut. Deweloperzy wciskali zmiany raz dziennie, aby nie tracić czasu. Efekt? Rzadkie commity, większe ryzyko konfliktów i opóźnienia w release’ach.
Rozwiązanie:
Podziel pipeline na etapy. Szybkie testy jednostkowe i lintery uruchamiaj przy każdym pushu (powinny zająć <5 minut). Testy integracyjne i end-to-end – tylko na głównym branchu lub przy pull requestach przed mergem. Skanowanie bezpieczeństwa – raz na dzień lub przy release candidate. Skrócenie feedback loop do 2-3 minut natychmiast podniosło szybkość wdrożeń o 40%.
2. Brak cache’owania zależności – niepotrzebne pobieranie na nowo
Każdy pipeline w popularnych narzędziach (GitHub Actions, GitLab CI, Jenkins) zaczyna się od czystego środowiska. Jeśli nie skonfigurujesz cache’owania zależności (node_modules, vendor, .m2), za każdym razem pobierasz je od nowa. Dla projektu z 200+ pakietami npm to 3-5 minut samego czekania na npm install. Pomnóż przez 20 buildów dziennie – godzina stracona każdego dnia.
Przykład z życia:
Firma e-commerce używała GitHub Actions bez cache. Średni czas instalacji zależności – 4 minuty. Po dodaniu cache (wystarczy dodać odpowiednią akcję) czas spadł do 30 sekund. Oszczędność? Około 10 godzin miesięcznie na jeden pipeline. Dla trzech pipeline’ów – 30 godzin, czyli prawie tydzień pracy jednego developera.
Rozwiązanie:
W każdym narzędziu CI/CD zaimplementuj cache’owanie. W GitHub Actions użyj akcji actions/cache. W GitLab CI – klucz cache w konfiguracji. Ustaw odpowiednie klucze (np. hash pliku package-lock.json), aby cache był odświeżany tylko przy zmianach zależności.
3. Brak strategii na nieudane buildu – ignorowanie błędów to strata czasu
Typowy scenariusz: pipeline się psuje, developer dostaje powiadomienie, ale nie ma czasu od razu zająć się błędem. Odkłada na później. Tymczasem kolejni developerzy pushują zmiany, które też padają na tym samym błędzie. Każdy traci czas na analizę, a zespół dryfuje w chaosie.
Przykład z życia:
W jednej z firm testy jednostkowe zawierały flaky test – test, który czasem przechodzi, czasem nie. Nikt nie traktował go poważnie. Zespół przyzwyczaił się do klikania „Rerun”. W ciągu miesiąca flaky test generował 15 niepotrzebnych rerunów, każdy po 10 minut – 2,5 godziny czystej straty. A do tego demoralizacja: „i tak może przejść następnym razem”.
Rozwiązanie:
Ustal politykę: jeśli pipeline jest czerwony (z wyjątkiem znanych flaky testów) – zespół zatrzymuje się i priorytetowo naprawia. Flaky testy powinny być oznaczane i naprawiane w maksymalnie 2 dni. Rozważ wprowadzenie mechanizmu „stop the line” – jeśli build pada, dalsze mergowanie do głównego brancha jest blokowane do czasu naprawy. To dyscyplinuje zespół i zapobiega kumulacji długu technicznego.
Podsumowanie
CI/CD to nie tylko automatyzacja – to strategia, która wpływa na tempo rozwoju, morale zespołu i koszty operacyjne. Zbyt długie pipeline’y, brak cache’owania i ignorowanie nieudanych buildów to trzy główne błędy, które widzę w małych firmach. Poprawa tych obszarów nie wymaga dużych nakładów – często wystarczy przemyślana konfiguracja i dobra komunikacja w zespole.
Jeśli czujesz, że Twój pipeline nie działa tak, jak powinien, warto zrobić audyt. Często okazuje się, że godzina optymalizacji zwraca się dziesięciokrotnie w skróconym czasie wdrożeń i mniejszej liczbie błędów. A w małej firmie każda zaoszczędzona godzina to więcej czasu na rozwój produktu.


