Wdrożenie CI/CD od zera w 19 dni roboczych
Dla lokalnego software house'u zbudowaliśmy rurociągi, które same budują, testują i wysyłają aplikację na serwer testowy po każdym commicie.
W CodeKrakow wydawanie nowych wersji aplikacji trwało zdecydowanie za długo i zawsze wiązało się z ogromnym stresem zespołu. Zespół 12 programistów tracił cenne godziny na ręczne kopiowanie plików na serwer. Skróciliśmy ten proces i wyeliminowaliśmy błędy ludzkie w dokładnie 19 dni roboczych.
Wyzwanie
Zanim pojawiliśmy się w biurze CodeKrakow, każdy proces wdrożenia kodu był drogą przez mękę. Deweloperzy wrzucali poprawki przez FTP albo uruchamiali niesprawdzone skrypty Bash bezpośrednio na produkcji. Średni czas potrzebny na wypuszczenie nowej wersji wynosił 214 minut.
W samym październiku 2024 roku zespół musiał aż 5 razy wycofywać zmiany w trybie awaryjnym, bo system 'wybuchał' zaraz po starcie. Klienci firmy często nie mogli zalogować się do panelu przez pierwszą godzinę po nocnej aktualizacji, co generowało straty wizerunkowe i finansowe dla software house'u.
Podejście
Nasz 3-osobowy zespół zaczął od gruntownego audytu repozytorium na GitHubie. Szczerze: testy manualne to dziś strata czasu, więc od razu skupiliśmy się na tym, jak zautomatyzować sprawdzanie jakości kodu przed każdym połączeniem gałęzi (pull request).
Ustaliliśmy, że głównym problemem jest brak spójności między komputerami programistów a serwerem docelowym. Postawiliśmy na konteneryzację aplikacji za pomocą Dockera i wybór GitHub Actions jako głównego silnika automatyzacji. Nie robiliśmy zbędnych prezentacji — po prostu od drugiego dnia zaczęliśmy pisać kod rurociągów (pipelines).
Rozwiązanie
Zbudowaliśmy stabilny rurociąg w GitHub Actions, który podzieliliśmy na 4 konkretne etapy. Najpierw system uruchamia statyczną analizę kodu (linting), która wyłapuje błędy składniowe w 1.5 minuty. Następnie startuje ponad 140 testów jednostkowych PHPUnit — jeśli choć jeden nie przejdzie, proces zostaje natychmiast przerwany.
Kolejnym krokiem jest budowanie obrazu Docker i automatyczna wysyłka na serwer testowy (staging). Dopiero po zatwierdzeniu przez testera, kod trafia na produkcję jednym kliknięciem. Dodaliśmy też integrację ze Slackiem: teraz każda osoba w zespole dostaje powiadomienie, gdy build się uda albo gdy ktoś 'popsuł' kod, co pozwala na reakcję w mniej niż 6 minut.
Rezultaty
Dzięki automatyzacji CodeKrakow odzyskało spokój ducha i setki godzin pracy deweloperów w skali roku. Kod musi zarabiać, a nie sypać błędami, dlatego teraz każde wdrożenie jest przewidywalne.
Harmonogram
-
5 stycznia 2025Audyt obecnego przepływu pracy i analiza 14 krytycznych błędów z ostatniego kwartału.
-
12 stycznia 2025Konfiguracja pierwszego rurociągu testowego i konteneryzacja bazy danych.
-
20 stycznia 2025Pełne wdrożenie produkcyjne i szkolenie dla 12-osobowego zespołu deweloperów.
-
24 stycznia 2025Finalne testy obciążeniowe i przekazanie pełnej dokumentacji technicznej.
"Byliśmy sceptyczni, bo poprzedni konsultanci obiecywali nam cuda przez miesiące. TyeVals weszli, zrobili swoje w niecałe 3 tygodnie i teraz deploy w środę o 14:00 to u nas norma."