Wprowadzenie
CI/CD to dla wielu małych firm święty graal – obietnica szybszych wdrożeń, mniejszej liczby błędów i w pełni zautomatyzowanego procesu. W praktyce jednak często kończy się to frustracją i rachunkami, które rosną szybciej niż aplikacja. Spotkałem się z przypadkami, gdzie firma zatrudniająca 5 developerów płaciła za pipeline’y więcej niż za serwery produkcyjne. Dlaczego? Bo CI/CD, źle skonfigurowane, zaczyna działać przeciwko Tobie.
W tym artykule pokażę trzy najczęstsze błędy w strategii CI/CD, które – zamiast oszczędzać czas i pieniądze – windują koszty operacyjne. Opowiem o realnych sytuacjach z rynku i podpowiem, jak ich uniknąć.
Błąd 1: Niepotrzebne uruchamianie pipeline’ów przy każdej zmianie
Zaczniemy od podstaw: CI/CD ma reagować na zmiany w kodzie. Ale czy naprawdę każdy commit musi wywoływać pełny pipeline? W jednej z firm, z którymi współpracowałem, zespół skonfigurował GitHub Actions tak, że każdy push do dowolnego brancha uruchamiał pełną kompilację, testy, analizę statyczną, budowanie obrazów Docker i deploy na środowisko stagingowe. Efekt? Średnio 45 minut czekania na wynik dla każdej zmiany, a przy 30 commitach dziennie – ponad 22 godziny pracy pipeline’u dziennie. Rachunek za minuty obliczeniowe w chmurze poszybował w górę, a developerzy stracili produktywność, czekając na zielone światło.
Rozwiązanie: Wdróż strategię selektywnego uruchamiania. Dla prostych zmian (np. dokumentacja, zmiana README) pomiń kosztowne etapy. Użyj filtrów ścieżek (path filters) – w GitLab czy GitHub możesz zdefiniować, które pliki triggerują pipeline. Dla gałęzi developerskich wystarczy uruchomić tylko testy jednostkowe, a pełny build z deployem zarezerwuj dla main/master. Dzięki temu zaoszczędzisz nawet 70% czasu wykonywania pipeline’u i obniżysz koszty chmury o połowę.
Błąd 2: Przetrzymywanie niepotrzebnych artefaktów i logów
Każde uruchomienie pipeline’u generuje artefakty – skompilowane pliki, obrazy Docker, raporty z testów, logi. Wiele firm przechowuje je bez ograniczeń, bo „kiedyś mogą się przydać”. Problem w tym, że magazynowanie w chmurze kosztuje – nie tylko samo składowanie, ale też transfer danych przy pobieraniu. W jednym z projektów zauważyłem, że zespół przechowuje artefakty z każdego builda od początku istnienia repozytorium – przez 2 lata narosło 500 GB danych. Miesięczny koszt samego przechowywania wynosił około 50 USD, ale do tego dochodziły koszty transferu przy każdym pobraniu (np. przez developerów). Łącznie dawało to 200-300 USD miesięcznie za coś, czego nikt nie używał.
Rozwiązanie: Ustaw automatyczne czyszczenie starszych artefaktów po 30-90 dniach. Większość narzędzi CI/CD (Jenkins, GitLab, GitHub) pozwala na zdefiniowanie polityki przechowywania. Możesz też zostawić tylko artefakty z ostatniego udanego builda na branchu głównym. Logi przydają się głównie przez kilka dni po deployu – po tym czasie archiwizuj je do tańszego storage’u (np. AWS Glacier) lub kasuj. W praktyce redukuje to koszty storage’u o 80-90%.
Błąd 3: Zbyt długie testy i brak optymalizacji równoległości
W jednej z małych firm e-commerce pipeline składał się z 30-minutowych testów end-to-end, które były uruchamiane sekwencyjnie na jednym workerze. Co więcej, testy te nie były podzielone na niezależne grupy – każdy test czekał na poprzedni. Deploy na produkcję blokował się na 40 minut, a przy częstych poprawkach – developerzy tracili godziny dziennie. Firma płaciła za 2 workery Jenkinsa, ale wykorzystywała je w 20%.
Rozwiązanie: Podziel testy na kategorie (jednostkowe, integracyjne, end-to-end) i uruchamiaj je równolegle na wielu workerach. Użyj narzędzi takich jak jest –shard (dla Node.js) czy pytest-xdist (dla Pythona). Określ timeout dla testów – jeśli test nie skończy się w 5 minut, niech pipeline go przerwie. Dzięki temu czas całego pipeline’u skróci się nawet 3-4 krotnie, a Ty zapłacisz tylko za rzeczywiście wykorzystane minuty obliczeniowe. Dodatkowo warto użyć cache’owania zależności (npm, pip, gradle) – to też potrafi skrócić czas o 50%.
Podsumowanie
CI/CD to potężne narzędzie, ale tylko wtedy, gdy jest świadomie zarządzane. W małej firmie każda złotówka się liczy, dlatego nie warto płacić za niepotrzebne uruchomienia, wieczne przechowywanie artefaktów i źle zoptymalizowane testy. Wdrożenie powyższych poprawek zajmuje zwykle kilka godzin, a oszczędności mogą sięgnąć tysięcy złotych miesięcznie. Co więcej, zyskujecie czas – zarówno dla pipeline’u, jak i dla zespołu.
Pamiętaj: CI/CD ma Ci pomagać, a nie dokładać roboty i kosztów. Jeśli Twój pipeline przypomina maszynę, która je pieniądze zamiast przyspieszać development – czas na przegląd. A jeśli potrzebujesz wsparcia w optymalizacji, zawsze możesz skontaktować się z nami – pomożemy Ci wycisnąć z CI/CD maksimum wartości przy minimalnych kosztach.


