Integracja ciągła

menu icon

Integracja ciągła

W tym przewodniku dowiesz się więcej o integracji ciągłej — praktyce tworzenia i eksploatacji oprogramowania, w której każdy programista integruje swój nowy kod z główną gałęzią kodu przynajmniej raz dziennie.

Czym jest integracja ciągła?

Integracja ciągła jest procesem tworzenia oprogramowania, w którym programiści integrują nowy, napisany przez siebie kod częściej w trakcie cyklu tworzenia, dodając go do podstawy kodu co najmniej raz dziennie. Zautomatyzowane testy wykonuje się dla każdej iteracji kompilacji, aby wcześniej zidentyfikować problemy integracyjne, kiedy ich naprawa jest łatwiejsza, co również pomaga uniknąć problemów podczas ostatecznego scalania na potrzeby wydania. W ogólnym ujęciu integracja ciągła pomaga usprawnić proces budowania, co skutkuje wyższą jakością oprogramowania i bardziej przewidywalnymi harmonogramami dostaw.

Integracja ciągła a dostarczanie ciągłe a wdrażanie ciągłe

W przypadku integracji ciągłej każdy programista integruje swoją pracę z główną gałęzią kodu źródłowego co najmniej raz dziennie (a najlepiej kilka razy dziennie). Dostarczanie ciągłe, inna praktyka tworzenia i eksploatacji oprogramowania, skupia się natomiast na dostarczaniu użytkownikom wszelkich zatwierdzonych zmian w podstawie kodu — aktualizacji, poprawek błędów, a nawet nowych funkcji — tak szybko i bezpiecznie, jak to tylko możliwe. Wdrażanie ciągłe jeszcze bardziej usprawnia cały proces, wykorzystując zautomatyzowane testy do zatwierdzania zmian w podstawie kodu, co prowadzi do szybszych aktualizacji.

Dostarczanie ciągłe rozpoczyna się tam, gdzie kończy się integracja ciągła, automatyzując dostarczanie aplikacji do wybranych środowisk infrastruktury. Zapewnia automatyzację wprowadzania zmian w kodzie w różnych środowiskach, takich jak programistyczne, testowe i produkcyjne.

Korzyści

Poniżej przedstawiono kilka z najbardziej znaczących korzyści, jakie zapewnia integracja ciągła:

  • Stałe i widoczne postępy usprawniające dostarczanie informacji zwrotnych
  • Wczesne i usprawnione wykrywanie błędów oraz metryki, które pozwalają na szybsze eliminowanie błędów — czasami w ciągu kilku minut od wprowadzenia kodu
  • Usprawniona praca grupowa: każdy w zespole może zmieniać kod, integrować system i szybko określać konflikty z innymi częściami oprogramowania
  • Ulepszona integracja systemu zmniejszająca liczbę niespodziewanych incydentów pod koniec cyklu życia tworzenia oprogramowania
  • Mniej równoległych zmian do scalenia i testowania
  • Mniejsza liczba błędów podczas testowania systemu
  • Stale aktualizowane systemy, dla których przeprowadza się testy

Integracja ciągła, metodyki zwinne i DevOps

Zwinność

Zwinna metodyka programowania to praktyka tworzenia oprogramowania, która poprawia sposób, w jaki zespoły programistów się organizują, dostosowują do zmian wymagań i wydają oprogramowanie. Ponieważ integracja ciągła (odsyłacz prowadzi poza serwis IBM) i programowanie w modelu zwinnym (PDF, 153 kB) mają wiele wspólnych cech (np. automatyzacja testowania), warto jednocześnie mówić o integracji ciągłej i zwinnej metodyce programowania. Programowanie w modelu zwinnym organizuje proces tworzenia oprogramowania z użyciem mniejszych grup prac lub przebiegów. Te połączone praktyki, stosowane podczas tworzenia i eksploatacji oprogramowania, pomagają zapewnić wysoką jakość oprogramowania i elastyczność projektu.

Integracja ciągła wymaga częstego integrowania pracy, często wiele razy w ciągu dnia. Integrację weryfikuje się poprzez zautomatyzowane budowanie, które wykrywa błędy integracji tak wcześnie, jak to możliwe. Budowanie powinno obejmować testy uruchomieniowe jako część weryfikacji. Rozszerzenie szybkiego testowania na testy w czasie wykonywania w zautomatyzowanym środowisku testowym prowadzi naturalnie do dostarczania ciągłego.

Programowanie w modelu zwinnym (odsyłacz prowadzi poza serwis IBM) jest również iteracyjne i dostosowuje się do zmian, przez co umożliwia stałe skalowanie i rozwijanie rozwiązań. W kontekście integracji ciągłej, zwinna metodyka tworzenia oprogramowania polega na dostarczaniu iteracji oprogramowania w oparciu o sposób priorytetyzacji wartości funkcji w trakcie integracji ciągłej.

Tworzenie i eksploatacja oprogramowania

W ramach strategii tworzenia i eksploatacji oprogramowania integracja ciągła znajduje się na początku procesu tworzenia oprogramowania. Kod jest aktualizowany co najmniej raz dziennie, aby lokalne kopie zbytnio nie odbiegały od głównej gałęzi budowanego kodu. Pomaga to uniknąć katastrofalnych konfliktów podczas scalania, które mogłyby „uszkodzić” kompilację i przysporzyć zespołom wielu dodatkowych godzin lub dni pracy.

Integracja ciągła jest wstępnym wymogiem dla testowania, wdrażania i wydawania w ramach dostarczania ciągłego. Cały zespół programistyczny będzie wiedział, czy stworzony kod jest błędny w ciągu kilku minut od wprowadzenia, ponieważ usługa integracji ciągłej automatycznie buduje i testuje zmiany w kodzie pod kątem błędów.

Narzędzia Open Source do integracji ciągłej

Poniżej przedstawiamy kilka najpopularniejszych narzędzi do integracji ciągłej:

  • Jenkins: Jenkins to szeroko stosowane narzędzie Open Source do integracji ciągłej, które umożliwia programistom automatyczne budowanie, integrowanie i testowanie kodu zaraz po jego zatwierdzeniu w repozytorium kodu źródłowego, ułatwiając wczesne wychwytywanie błędów i szybsze wdrażanie oprogramowania. W narzędziu Jenkins dostępna jest wtyczka Docker.
  • Buildbot: narzędzie Buildbot może zautomatyzować wszystkie aspekty cyklu tworzenia oprogramowania. Jako system planowania zadań, kolejkuje i wykonuje zadania, a także raportuje wyniki.
  • Go: to, co wyróżnia Go spośród innych narzędzi, to koncepcja potoków, która ułatwia modelowanie złożonych przepływów pracy.
  • IBM UrbanCode Build
  • Travis CI: jest to jedno z najstarszych i najbardziej zaufanych rozwiązań serwerowych, dostępne również w wersji lokalnej przeznaczonej dla przedsiębiorstw.
  • GitLab CI: jako integralna część projektu Open Source Rails, GitLab CI jest bezpłatną usługą serwerową, która zapewnia kompleksowe zarządzanie repozytorium Git z takimi funkcjami jak kontrola dostępu, śledzenie problemów, przeglądy kodu i wiele innych.

Prowadzenie ciągłej integracji za pomocą narzędzi Open Source oferuje wiele korzyści, w tym następujące:

  • Setki wtyczek mogących wesprzeć Twój projekt
  • Szerokie wsparcie dla języków typu Open Source, takich jak Python, Java i JavaScript
  • Brak kosztów, co daje studentom, startupom i programistom pracującym dorywczo potężne, budżetowe narzędzie
  • Możliwość dostosowania, pozwalająca programistom na wykorzystanie podstaw narzędzia CI i budowanie na jego bazie rozwiązania dostosowanego do własnych potrzeb
  • Możliwość modyfikowania i redystrybucji narzędzi

Narzędzia Open Source do integracji ciągłej, które warto rozważyć na potrzeby przepływu pracy związanego z tworzeniem oprogramowania, to Jenkins, Go, Buildbot i Travis CI. Informacje o nich znajdują się w następnej sekcji.

Przypadek użycia

Poniższy hipotetyczny przypadek użycia ilustruje, jak dwóch programistów może wykorzystać integrację ciągłą do usprawnienia procesu tworzenia i eksploatacji oprogramowania.

Obaj programiści muszą komunikować się ze sobą na temat tego, nad którymi funkcjami pracują i w jaki sposób. Ten mały zespół potrzebuje regularnych aktualizacji i musi być w stanie zintegrować i przetestować swój kod jako całość. Planowanie wprowadzania i testowania kodu zajmuje dużo czasu. Potrzebny jest automatyczny system do integracji ciągłej.

Negocjowanie, kiedy te kombinacje i testy będą miały miejsce, zabrałoby programistom mnóstwo czasu.

W tym celu musieliby dojść do porozumienia w następujących kwestiach:

  1. Kiedy rozpocząć testowanie integracji kodu
  2. Jak przetestować, czy integracja zakończyła się pomyślnie
  3. Jak przekazywać wyniki do zespołu

Platformy integracji ciągłej zawierają domyślne odpowiedzi na te pytania, a większość z nich pozwala na konfigurację i wprowadzenie ustawień.

Zazwyczaj platformy integracji ciągłej, takie jak Jenkins, rozpoczynają testy integracyjne w momencie wprowadzenia. Po wprowadzeniu nowego kodu system integracji ciągłej uruchamia zestaw testów, które mogą zawierać testy jednostkowe i testy regresyjne, a następnie określa, czy kod został pomyślnie zintegrowany.

W przypadku języka kompilowanego, domyślnym testem będzie sprawdzenie, czy kod skompilował się pomyślnie. Jeśli tak się nie stało, nowy kod uszkodził kompilację. W przypadku takich języków jak Python i JavaScript należy utworzyć własny test integracji.

Tak czy inaczej, większość systemów integracji ciągłej rejestruje próby integracji, wskaźnik powodzenia i inne metryki.

Serwery

Serwer integracji ciągłej jest narzędziem programistycznym, które centralizuje wszystkie operacje integracji ciągłej i zapewnia niezawodną, stabilną platformę dla projektów programistycznych. Serwery integracji ciągłej można skonfigurować i dopasować do różnych projektów tworzonych dla różnych platform. Serwer integracji ciągłej w prosty sposób modeluje i wizualizuje złożone przepływy pracy (umożliwiając dostarczanie ciągłe) oraz zapewnia intuicyjny interfejs do budowania potoków dostarczania ciągłego. Serwer integracji ciągłej oferuje możliwość wykonania następujących czynności:

  • Automatyczne uruchamianie kompilacji, testów i wydań w jednym miejscu
  • Wdrażanie dowolnej wersji w dowolnym momencie
  • Utrzymanie porządku konfiguracji
  • Obsługa wtyczek w celu zwiększenia funkcjonalności
  • Monitorowanie repozytorium projektu
  • Pobieranie zmian i wykonywanie zadań zdefiniowanych pod kątem pomyślnego zatwierdzania
  • Wysyłanie opinii do odpowiednich członków projektu ze szczegółami kompilacji

Znaczenie testowania

Testowanie ciągłe rozpoczyna się w momencie tworzenia kompilacji do integracji ciągłej i pakietu (zwanego również jednostką instalowalną lub jednostką spakowaną). Kończy się, gdy spakowana jednostka przechodzi do produkcji. Każdy krok na całej trasie wymaga pakietu testów.

Jeśli istnieje tylko jeden etap testowania, przynajmniej 30 procent integracji ciągłej obejmuje testowanie. W rzeczywistości działania związane z integracją ciągłą składają się od 50 do 70 procent z testowania. W przeszłości testy trzeba było przeprowadzać ręcznie. Obecnie można używać testów automatycznych, które są kluczem do udanej integracji ciągłej.

W ramach automatyzacji testów na potrzeby integracji ciągłej, projektowanie oparte na testach iteracyjnie buduje kod i testuje jeden przypadek użycia na raz, aby zapewnić pokrycie testami, poprawić jakość kodu i stworzyć podstawy dla ciągłego dostarczania. Zautomatyzowane testy informują, gdy nowy kod nie przeszedł jednego lub większej liczby testów opracowanych dla wszystkich obszarów funkcjonalnych aplikacji. Sprawdzona procedura wymaga, aby programiści uruchamiali wszystkie testy lub podzbiór testów w swoich lokalnych środowiskach, dzięki czemu wprowadzają kod źródłowy do systemu kontroli wersji tylko wtedy, gdy nowe zmiany w kodzie przejdą testy. Doświadczenie pokazuje, że efektywne testy regresyjne mogą pomóc uniknąć niepożądanych niespodzianek w późniejszym czasie.

Potok integracji ciągłej

Potok integracji ciągłej automatyzuje etapy potoku projektu, takie jak kompilowanie, testy i wdrożenia, w powtarzalny sposób, przy minimalnej interwencji człowieka. Zautomatyzowany potok integracji ciągłej jest niezbędny, aby usprawnić programowanie, testowanie i wdrażanie aplikacji dzięki szybkości oraz mechanizmom i punktom kontrolnym.

Sprawdzone procedury

Proces integracji ciągłej jest newralgicznym komponentem tworzenia i eksploatacji oprogramowania, który pomaga zjednoczyć zespoły programistów i zespoły operacyjne w ramach repozytorium współużytkowanego na potrzeby kodowania, testowania, wdrażania i obsługi oprogramowania. Poniżej przedstawiono kilka sprawdzonych procedur integracji ciągłej, które mogą pomóc w osiągnięciu sukcesu:

  • Utrzymanie pojedynczego repozytorium kodu źródłowego: użyj zarządzania kontrolą kodu źródłowego, aby śledzić i kontrolować wszystkie pliki niezbędne do zbudowania produktu. Ta skonsolidowana podstawa kodu ułatwia dystrybucję i zapewnia widoczność.
  • Automatyzacja budowania: obejmuje kompilowanie, konsolidowanie i inne procesy, które generują artefakty budowania. Samodzielne testowanie także powinno być zautomatyzowane.
  • Codzienne zatwierdzenia kodu głównego: zmotywuj programistów, aby zatwierdzali swoje zmiany w głównym strumieniu programistycznym co najmniej raz dziennie. Każdy programista musi sprawdzić, czy jego kopia robocza jest spójna z głównym strumieniem programistycznym.
  • Testowanie w sklonowanym środowisku produkcyjnym: maksymalnie upodobnij środowisko testowe do ostatecznego środowiska produkcyjnego.
  • Automatyzacja wdrożenia: zaimplementuj wiele środowisk (programistyczne, integracyjne, produkcyjne) w celu uruchamiania kompilacji i testów.

Integracja ciągła i IBM Cloud®

Rozwiązanie IBM polega na zdefiniowaniu i zautomatyzowaniu projektów oraz skonfigurowaniu zabezpieczeń przy użyciu szablonów. Gdy w bibliotece wprowadzana jest zmiana, aplikacje zależne są przebudowywane i łączone, konsolidowane lub wiązane wstecznie. Zapoznanie się z zależnościami między aplikacjami ułatwi modernizację aplikacji.

W miarę jak organizacje przyspieszają transformację cyfrową, potrzeba automatyzacji rozszerza się na operacje biznesowe i IT. Przejście w kierunku większej automatyzacji powinno rozpocząć się od małych, udanych projektów, które następnie można skalować i optymalizować pod kątem innych procesów i w innych częściach organizacji.

Współpracując z IBM, uzyskasz dostęp do funkcji automatyzacji opartych na sztucznej inteligencji, w tym do gotowych przepływów pracy, które pomogą przyspieszyć innowacje, czyniąc każdy proces bardziej inteligentnym.

Wykonaj kolejny krok:

— Rozpocznij zarządzanie kompilacjami oprogramowania, skalowaniem i konfiguracją, za pomocą narzędzia IBM® UrbanCode® Build.

— Przeczytaj o pięciu niezbędnych elementach sukcesu automatyzacji (odsyłacz prowadzi poza serwis IBM) w tym raporcie HFS Research.

Załóż konto IBM Cloud już dzisiaj.