CI
Jak działa
Programiści regularnie commitują niewielkie zmiany do wspólnego repozytorium, najpierw aktualizując swoją kopię o zmiany innych. Serwer CI wykrywa nowy commit (lub działa według harmonogramu), pobiera kod, uruchamia zautomatyzowany build oraz zestaw testów (jednostkowych, integracyjnych i innych) i raportuje wynik powodzenie/niepowodzenie. Zepsuty build traktowany jest priorytetowo — zespół naprawia go, zanim doda kolejne zmiany, dzięki czemu gałąź główna pozostaje w stanie zdatnym do dalszej pracy i wdrożenia.
Rozwiązany problem
Rozwiązuje problem tzw. piekła integracji: gdy programiści długo pracują na osobnych gałęziach i scalają kod dopiero na końcu, kumulują się konflikty, trudne do zdiagnozowania błędy i regresje. Rzadka integracja czyni koszt scalenia nieprzewidywalnym i rosnącym wraz z czasem rozjazdu gałęzi.
Komponenty
System kontroli wersji (np. Git) z gałęzią integracyjną, do której trafiają zmiany wszystkich programistów.
Proces kompilacji/pakowania uruchamiany automatycznie przy każdej integracji.
Samotestujący build, który sygnalizuje regresje natychmiast po integracji.
Automatyzacja orkiestrująca cały cykl integracji (np. Jenkins, GitLab CI, GitHub Actions).
Raportowanie statusu integracji, aby błędy były naprawiane szybko.
Implementacja
Długi czas budowania i testowania wydłuża pętlę informacji zwrotnej i zniechęca do częstej integracji.
Testy dające losowe wyniki podważają zaufanie do CI i prowadzą do ignorowania czerwonych buildów.
Pozostawianie czerwonego builda bez naprawy niweczy podstawową zasadę CI — zawsze działającą gałąź główną.
Ewolucja
W książce Object Oriented Design: With Applications; nie zalecał jeszcze integracji wiele razy dziennie.
Kent Beck w Extreme Programming Explained ustanawia CI jedną z praktyk XP i zaleca integrację częściej niż raz dziennie.
Wydanie jednego z pierwszych open-source'owych serwerów CI, co umożliwiło automatyzację integracji.
Zaktualizowana wersja eseju „Continuous Integration”, który ugruntował definicję i praktyki CI.
Pierwsze wydanie Jenkinsa (02.02.2011) po odłączeniu od Hudsona; stał się czołowym open-source'owym narzędziem CI/CD.
Hiperparametry (konfigurowalne osie)
Czy build uruchamia się przy każdym commicie, czy według harmonogramu (np. raz dziennie).
Jak często programiści scalają zmiany do gałęzi głównej; XP zaleca częściej niż raz dziennie.
Zestaw testów uruchamianych przy integracji (jednostkowe, integracyjne, e2e) i balans szybkość/pokrycie.