Co to jest CI/CD? Ciągła integracja i ciągłe dostarczanie
⚡ Inteligentne podsumowanie
Ciągła integracja to metoda tworzenia oprogramowania, w której członkowie zespołu scalają swoją pracę w ramach wspólnego repozytorium co najmniej raz dziennie, a każde zatwierdzenie uruchamia automatyczną kompilację i testowanie w celu wczesnego wykrycia błędów integracji.
Co to jest ciągła integracja (CI)?
Ciągła integracja To metoda tworzenia oprogramowania, w której członkowie zespołu integrują swoją pracę co najmniej raz dziennie. Każda integracja jest weryfikowana przez zautomatyzowany proces kompilacji, który wykrywa błędy. Koncepcja ta została wprowadzona ponad dwie dekady temu, aby uniknąć „piekła integracyjnego”, które ma miejsce, gdy integracja jest odkładana na koniec projektu.
Po zatwierdzeniu kodu, oprogramowanie jest natychmiast kompilowane i testowane. W dużych projektach z wieloma programistami, commity odbywają się wiele razy dziennie. Z każdym commitem kod jest kompilowany i testowany; jeśli test zakończy się sukcesem, kompilacja jest sprawdzana pod kątem wdrożenia; a jeśli wdrożenie zakończy się sukcesem, kod jest przekazywany do produkcji. Ten cykl commitowania, kompilacji, testowania i wdrażania jest ciągły, stąd nazwa tej praktyki.
Co to jest ciągłe dostarczanie (CD)?
Ciągłe dostawy To metoda inżynierii oprogramowania, w której zespół tworzy oprogramowanie w krótkich cyklach i zapewnia jego niezawodne wydanie w dowolnym momencie. Celem jest tworzenie, testowanie i wydawanie oprogramowania z dużą szybkością i częstotliwością, redukując koszty, czas i ryzyko wprowadzania zmian poprzez częste aktualizacje produkcyjne.
Różnica między CI i CD
Ciągła integracja to podejście polegające na automatycznym testowaniu każdej zmiany w bazie kodu, podczas gdy ciągłe dostarczanie to podejście mające na celu szybkie i bezpieczne wdrażanie zmian, takich jak nowe funkcje, konfiguracja i poprawki błędów, do środowiska produkcyjnego.
Rozwój bez CI vs. Rozwój z CI
| Rozwój bez CI | Rozwój z CI |
|---|---|
| Mnóstwo błędów | Mniej błędów |
| Rzadkie zatwierdzenia | Regularne zatwierdzenia |
| Rzadkie i powolne wydania | Regularne wydania robocze |
| Trudna integracja | Łatwa i efektywna integracja |
| Testowanie odbywa się z opóźnieniem | Testowanie odbywa się wcześnie i często |
| Problemy są trudniejsze do rozwiązania | Problemy są znajdowane i naprawiane szybciej |
| Słaba widoczność projektu | Lepsza widoczność projektu |
Różnica między kompilacją a ciągłą integracją
Kompilacja polega jedynie na konwersji kodu na język maszynowy, natomiast CI wykonuje kilka szerszych działań:
- Integracja z bazą danych: Synchronizuje bazę danych i kod oraz automatyzuje tworzenie bazy danych i danych testowych.
- Code kontrola: Zapewnia zdrową bazę kodu, wczesną identyfikację problemów i stosowanie najlepszych praktyk.
- Automatyczne wdrażanie: Umożliwia udostępnienie produktu w dowolnym momencie i utrzymuje go w stanie umożliwiającym ciągłą demonstrację.
- Generowanie dokumentów: Dba o aktualność dokumentacji oraz opracowywanie raportów i metryk dotyczących kompilacji.
- Kompilacja: Konwertuje kod wysokiego poziomu na język maszynowy i zapewnia jego kompilację na każdej platformie docelowej.
W idealnym przypadku kompilacja jest uruchamiana z wiersza poleceń, a nie zależy od środowiska IDE, odbywa się w sposób ciągły na dedykowanym serwerze CI (a nie za pomocą zadania cron), jest uruchamiana przy każdym zameldowaniu i zapewnia natychmiastową informację zwrotną bez konieczności udziału programisty.
Czego potrzebujesz do przeprowadzenia procesu CI?
- System kontroli wersji (VCS): Niezawodna metoda centralizacji i zachowywania zmian wprowadzanych w projekcie na przestrzeni czasu.
- Maszyna wirtualna: Zapasowy serwer lub co najmniej jeden Maszyna wirtualna zbudować swój system.
- Rozwiązania hostowanych narzędzi CI: Aby uniknąć konieczności zarządzania serwerami, rozwiązania hostowane utrzymują cały proces i oferują łatwiejszą skalowalność.
- Narzędzia: Jeśli wybierzesz wariant hostowany samodzielnie, zainstaluj narzędzie CI, takie jak Jenkins, TeamCity, Bamboolub GitLab.
Jak działa ciągła integracja?
Starym przykładem jest Nokia, która kiedyś stosowała procedurę zwaną kompilacją nocną. Po wielokrotnym zatwierdzeniu zmian przez wielu programistów w ciągu dnia, oprogramowanie było kompilowane każdej nocy. Ponieważ kompilowano je tylko raz dziennie, izolowanie, identyfikowanie i naprawianie błędów w dużej bazie kodu było uciążliwe.
Later Zespół wdrożył koncepcję ciągłej integracji. Oprogramowanie było tworzone i testowane natychmiast po opublikowaniu kodu przez programistę, dzięki czemu każdy błąd był natychmiast wykrywany, a odpowiedzialny za niego programista mógł szybko go naprawić.
Cechy CI
- Umożliwia utrzymanie pojedynczego repozytorium źródłowego.
- Umożliwia przetestowanie klonu środowiska produkcyjnego, przechowywanego blisko produkcji.
- Zapewnia stałą dostępność aktualnej wersji.
- Umożliwia wszystkim zainteresowanym osobom zapoznanie się z całym procesem kompilacji, testowania i wdrażania.
Dlaczego warto używać CI?
- Pomaga tworzyć oprogramowanie lepszej jakości i przeprowadzać powtarzalne testy.
- Zwiększa wydajność pracy zespołów inżynieryjnych i umożliwia programistom równoległą pracę nad funkcjami.
- Zwiększa przejrzystość i komunikację w zespole.
- Zapewnia natychmiastową informację zwrotną w przypadku wystąpienia problemu i zmniejsza ryzyko poprzez szybsze i bardziej przewidywalne wdrożenie.
- Pozwala uniknąć nieporozumień w ostatniej chwili przed premierą.
Najlepsze praktyki korzystania z systemów CI
- Publikuj kod od początku i często, i nigdy nie publikuj błędnego kodu.
- Natychmiast naprawiaj błędy kompilacji i działaj na podstawie wskaźników.
- Buduj w każdym środowisku docelowym i twórz artefakty z każdej kompilacji.
- Zautomatyzuj kompilację, aby nie była zależna od środowiska IDE.
- Kompiluj i testuj wszystko, co ulega zmianie, łącznie ze schematem bazy danych.
- Zadbaj o szybkość kompilacji i skorzystaj z automatycznego wdrażania.
Wady CI
- Aby przyzwyczaić się do serwera CI, konieczny jest początkowy czas konfiguracji i szkolenie.
- Należy opracować odpowiednie procedury testowe, a dobrze zbudowany zestaw testów wymaga znacznych zasobów.
- Należy dokonać konwersji znanych procesów i zainstalować dodatkowe serwery i środowiska.
- Czas oczekiwania może wystąpić, gdy wielu programistów chce jednocześnie zintegrować swój kod.
Narzędzia do procesu CI
Jenkins
Jenkins jest narzędziem do ciągłej integracji typu open source napisanym w JavaUmożliwia testowanie w czasie rzeczywistym i raportowanie pojedynczych zmian w większej bazie kodu, a także pomaga programistom szybko znajdować i rozwiązywać błędy, automatyzując jednocześnie testowanie kompilacji.
Bamboo
Bamboo to serwer kompilacji ciągłej integracji, który wykonuje zautomatyzowane kompilacje, testy i wydania w jednym miejscu. Bezproblemowo współpracuje z Jira i Bitbucket i obsługuje wiele technologii, takich jak Docker, Git, SVN, Mercurial i AWS.
TeamCity
TeamCity to serwer ciągłej integracji z wieloma zaawansowanymi funkcjami. Utrzymuje on serwer CI w dobrym stanie i stabilności, nawet gdy nie są uruchomione żadne kompilacje, i zapewnia lepszą jakość kodu dla każdego projektu.

