Co to jest CI/CD? Ciągła integracja i ciągłe dostarczanie

Co to jest ciągła integracja (CI)?

Ciągła integracja to metoda tworzenia oprogramowania, w której członkowie zespołu przynajmniej raz dziennie integrują swoją pracę. W tej metodzie każda integracja jest sprawdzana przez automatyczną kompilację w celu wykrycia błędów. Koncepcję tę wprowadzono po raz pierwszy ponad dwie dekady temu, aby uniknąć „piekła integracji”, które ma miejsce, gdy integrację odkłada się na koniec projektu.

W trybie ciągłej integracji po zatwierdzeniu kodu oprogramowanie jest budowane i testowane natychmiast. W dużym projekcie, w którym bierze udział wielu programistów, zatwierdzenia są dokonywane wiele razy dziennie. Przy każdym zatwierdzeniu kod jest budowany i testowany. Jeśli test zakończy się pomyślnie, kompilacja zostanie przetestowana pod kątem wdrożenia. Jeśli wdrożenie zakończy się sukcesem, kod jest przekazywany do produkcji. To zatwierdzanie, budowanie, testowanie i wdrażanie jest procesem ciągłym i stąd nazwa ciągła integracja/wdrożenie.

Co to jest ciągłe dostarczanie (CD)?

Ciągłe dostawy jest metodą inżynierii oprogramowania, w której zespół rozwija produkty oprogramowania w krótkim cyklu. Zapewnia, że ​​oprogramowanie może być łatwo wydane w dowolnym momencie. Głównym celem ciągłego dostarczania jest budowanie, testowanie i wydawanie oprogramowania z dobrą prędkością i częstotliwością. Pomaga obniżyć koszty, czas i ryzyko dostarczania zmian, umożliwiając częste aktualizacje w produkcji.

Jaka jest różnica między CI a CD?

CI kontra CD: Ciągła integracja (CI) to podejście polegające na automatycznym testowaniu każdej zmiany w kodzie, natomiast ciągłe dostarczanie (CD) to podejście polegające na uzyskiwaniu zmian w nowych funkcjach, konfiguracji i poprawkach błędów.

Rozwój bez CI vs. Rozwój z CI

Oto kluczowe różnice między programowaniem przy użyciu CI i bez CI:

Rozwój bez CI Rozwój z CI
Wiele błędów Mniej błędów
Rzadkie zatwierdzenia Regularne zatwierdzenia
Rzadkie i powolne wydania Regularne wydania robocze
Trudna integracja Łatwa i skuteczna integracja
Testowanie odbywa się z opóźnieniem Ciągłe testowanie integracyjne odbywa się wcześnie i często.
Podniesiony problem jest trudniejszy do naprawienia Szybciej i wydajniej znajduj i rozwiązuj problemy.
Słaba widoczność projektu Lepsza widoczność projektu

Różnica między kompilacją a ciągłą integracją

Działania w ramach Ciągłej Integracji
Działania w ramach Ciągłej Integracji

Podczas gdy kompilacja polega jedynie na skompilowaniu kodu, CI wykonuje następujące czynności

Integracja z bazą danych

  • Zapewnij synchronizację bazy danych i kodu
  • Zautomatyzowane tworzenie bazy danych i danych testowych.

Kontrola kodu

  • Zapewnia zdrową bazę kodu
  • Wcześnie identyfikuje problemy i stosuje najlepsze praktyki

Zautomatyzowane wdrażanie

  • Umożliwia wydanie produktu w dowolnym momencie
  • Stan, który można stale demonstrować i działa na każdej maszynie

Generowanie dokumentów

  • Upewnij się, że dokumentacja jest aktualna
  • Usuwa spalony wywoływacz
  • Tworzy raporty i metryki kompilacji

Kompilacja

Kompilacja to proces przeprowadzany przez komputer w celu przekształcenia kodu języka programowania wysokiego poziomu na język maszynowy zrozumiały dla komputera. Zapewnia kompilator kodu na każdej platformie docelowej.

Kiedy buduję?

  • Przy każdym zameldowaniu
  • Za każdym razem, gdy zmienia się zależność

Jakie etapy składają się na ciągłą integrację?

Proces CI
Proces CI
  • W idealnym przypadku kompilacja powinna pochodzić z wiersza poleceń i nie powinna zależeć od zintegrowanego środowiska programistycznego (IDE).
  • Kompilacja powinna odbywać się w sposób ciągły przy użyciu dedykowanego serwera Cl, a nie zadania cron.
  • Wbudowany CI powinien być uruchamiany przy każdym zameldowaniu, a nie tylko o północy
  • Kompilacja powinna zapewniać natychmiastową informację zwrotną i nie wymagać wysiłku programisty
  • Zidentyfikuj kluczowe wskaźniki i śledź je wizualnie. Co ważniejsze, podejmij natychmiastowe działania

Czego potrzebujesz do przeprowadzenia procesu CI?

Przeprowadź proces CI

Oto kluczowe elementy potrzebne do przeprowadzenia całego procesu CI:

  • System kontroli wersji (VCS): Oferuje niezawodną metodę centralizacji i zachowywania zmian wprowadzanych w projekcie na przestrzeni czasu.
  • Maszyna wirtualna: Powinieneś mieć zapasowy serwer lub przynajmniej jeden Maszyna wirtualna zbudować swój system.
  • Hostowane rozwiązania narzędziowe CI: Aby uniknąć serwerów lub maszyn wirtualnych, powinieneś wybrać hostowane rozwiązania w zakresie narzędzi CI. Narzędzie to pomaga w utrzymaniu całego procesu i oferuje łatwiejszą skalowalność.
  • Narzędzia: Jeśli wybierzesz wariant hostowany samodzielnie, będziesz musiał zainstalować jeden z wielu Narzędzia CI jak Jenkins, TeamCity, Bamboo, GitLab itp.

Jak działa ciągła integracja?

Na pewno znasz stary telefon Nokia. Nokia wdrażała procedurę zwaną kompilacją nocną. Po wielu zatwierdzeniach od różnych programistów w ciągu dnia, oprogramowanie budowane było każdej nocy. Ponieważ oprogramowanie było budowane tylko raz dziennie, izolowanie, identyfikacja i naprawianie błędów w dużej bazie kodu jest ogromnym wyzwaniem.

Laterprzyjęli podejście Ciągłej Integracji. Oprogramowanie zostało zbudowane i przetestowane zaraz po zatwierdzeniu kodu przez programistę. W przypadku wykrycia jakiegokolwiek błędu odpowiedni programista może szybko naprawić usterkę.

Przykład ciągłej integracji
Przykład ciągłej integracji

Cechy CI

Oto ważne cechy i zalety Ciągłej Integracji:

  • Umożliwia utrzymanie tylko jednego repozytorium źródłowego
  • Możesz przetestować klon produkcyjnego środowiska CI
  • Środowisko zbudowane powinno znajdować się blisko środowiska produkcyjnego.
  • Jedną z zalet ciągłej integracji jest stała dostępność aktualnej wersji
  • Cały proces kompilacji, testowania i wdrażania powinien być widoczny dla wszystkich posiadaczy stosu.

Dlaczego warto korzystać z CI?

Oto ważne powody, dla których warto korzystać z Ciągłej Integracji:

  • Pomaga w tworzeniu oprogramowania lepszej jakości
  • Proces CI pomaga zwiększyć wielkość zatrudnienia i wydajność zespołów inżynierskich.
  • CI umożliwia twórcom oprogramowania niezależną, równoległą pracę nad funkcjami.
  • Pomaga w przeprowadzaniu powtarzalnych testów
  • Zwiększ widoczność, umożliwiając lepszą komunikację
  • Pomaga opracować potencjalnie nadający się do wysyłki produkt do w pełni zautomatyzowanej kompilacji
  • Pomaga zmniejszyć ryzyko, sprawiając, że wdrażanie jest szybsze i bardziej przewidywalne
  • natychmiastowa informacja zwrotna po pojawieniu się problemu
  • Unikaj zamieszania w ostatniej chwili co do daty i czasu premiery

Najlepsze praktyki korzystania z systemów CI

Oto kilka ważnych najlepszych praktyk podczas wdrażania

  • Zatwierdź wcześniej i często nigdy nie popełniaj uszkodzonego kodu
  • Natychmiast napraw błędy kompilacji
  • Działaj w oparciu o metryki
  • Wbuduj każde środowisko docelowe Twórz artefakty z każdej kompilacji
  • Budowa oprogramowania musi być przeprowadzona w sposób umożliwiający jego zautomatyzowanie
  • Nie polegaj na IDE
  • Buduj i testuj wszystko, gdy się zmieni
  • Schemat bazy danych liczy się jako wszystko
  • Pomaga znaleźć kluczowe wskaźniki i śledzić je wizualnie
  • Zamelduj się często i wcześnie
  • Silniejsza kontrola kodu źródłowego
  • Ciągła integracja polega na uruchamianiu testów jednostkowych za każdym razem, gdy zatwierdzasz kod
  • Zautomatyzuj kompilację i przetestuj wszystkich
  • Szybkie tworzenie kompilacji dzięki automatycznemu wdrażaniu

Wady CI

Oto wady/wady procesu ciągłej integracji:

  • Aby zapoznać się z serwerem Cl, wymagany jest czas wstępnej konfiguracji i szkolenie
  • Niezbędne jest opracowanie odpowiednich procedur testowych
  • Dobrze rozwinięty zestaw testów wymagał wielu zasobów dla serwera Cl
  • Konwersja znanych procesów
  • Wymaga dodatkowych serwerów i środowisk
  • Czasy oczekiwania mogą wystąpić, gdy wielu programistów chce zintegrować swój kod w tym samym czasie

Narzędzia procesu CI

Oto kilka najważniejszych narzędzi CI/CD:

Jenkins

Jenkins

Jenkins to oprogramowanie do ciągłej integracji typu open source. Jest napisany za pomocą Java język programowania. Ułatwia testowanie w czasie rzeczywistym i raportowanie pojedynczych zmian w bardziej masowej bazie kodu. To oprogramowanie pomaga programistom szybko znajdować i rozwiązywać defekty w bazie kodu oraz automatyzować testowanie swoich kompilacji.

Bamboo

Bamboo

Bamboo to serwer ciągłej integracji kompilacji, który wykonuje – automatyczną kompilację, testowanie i wydania w jednym miejscu. Działa bezproblemowo z oprogramowaniem JIRA i Bitbucket. Bamboo obsługuje wiele języków i technologii, takich jak CodeDeply, Docker, Git, SVN, Mercurial, AWS i Amazon Łyżki S3.

TeamCity

TeamCity

TeamCity to serwer ciągłej integracji, który obsługuje wiele zaawansowanych funkcji. Utrzymuje serwer CI w dobrym stanie i stabilny nawet wtedy, gdy nie są uruchomione żadne kompilacje. Zapewnia lepszą jakość kodu dla każdego projektu

Podsumowanie

  • Definicja Ciągłej Integracji: Ciągła Integracja to metoda tworzenia oprogramowania, w której członkowie zespołu mogą integrować swoją pracę przynajmniej raz dziennie
  • CI/CD oznacza połączenie ciągłej integracji i ciągłego dostarczania lub ciągłego wdrażania.
  • Rozwój bez CI powoduje wiele błędów, podczas gdy Rozwój z CI oferuje mniej błędów
  • Ważne działania ciągłej integracji to 1) integracja z bazą danych, 2) kontrola kodu, 3) automatyczne wdrażanie, generowanie dokumentów i kompilacja.
  • Kompilacja powinna odbywać się w sposób ciągły przy użyciu dedykowanego serwera Cl, a nie zadania cron.
  • Ważnymi elementami CI są 1) System kontroli wersji 2) Maszyna wirtualna 3) Rozwiązania narzędziowe hosta CI 4) Narzędzia
  • System Continuous Integration pozwala na utrzymanie tylko jednego repozytorium źródłowego
  • Proces CI/CD pomaga w tworzeniu oprogramowania lepszej jakości
  • Najważniejsze dobre praktyki dot Azure Proces ciągłej integracji polega na wczesnym zatwierdzaniu i często nigdy nie popełnianiu uszkodzonego kodu
  • Główną wadą Potok CI/CD proces polega na tym, że dobrze rozwinięty zestaw testów wymagał wielu zasobów dla serwera Cl
  • Jenkinsa, Bambook i Team City to przydatne rozwiązania AWS Continuous Narzędzia integracyjne.