Czym jest ciągła integracja?
Zwiększ zwinność swojego zespołu dzięki szybszemu uzyskiwaniu informacji zwrotnych. Ponieważ postępy zależą od sprawności przeprowadzania testów.
Ciągła integracja (CI) to praktyka automatyzacji procesu integracji tworzonych przez różne osoby zmian kodu w ramach jednego projektu tworzenia oprogramowania. Jest to podstawowa najlepsza praktyka DevOps umożliwiająca programistom częste scalanie zmian kodu z centralnym repozytorium, w którym następnie uruchamiane są kompilacje i testy. Przed dokonaniem integracji poprawność nowego kodu jest sprawdzana za pomocą zautomatyzowanych narzędzi.
System kontroli wersji kodu źródłowego stanowi sedno procesu CI. Oferuje on również inne metody kontroli, takie jak m.in. zautomatyzowane testy jakości kodu czy narzędzia do przeglądu stylu składni.
Jak zacząć stosować metodę ciągłej integracji
Dowiedz się, jak w pięciu krokach wdrożyć ciągłą integrację i zautomatyzowane testowanie. Przeczytaj artykuł
Pięć porad dotyczących repozytoriów Git do ciągłej integracji
Pięć porad pozwalających jak najlepiej wykorzystać Git i narzędzie do ciągłej integracji. Przeczytaj artykuł
Narzędzia ciągłej integracji
Pięć porad pozwalających jak najlepiej wykorzystać Git i narzędzie do ciągłej integracji. Przeczytaj artykuł
Tworzenie oprogramowania oparte o gałąź główną
Dowiedz się więcej o tworzeniu oprogramowania opartym o gałąź główną — praktyce zarządzania kontrolą wersji, w ramach której programiści scalają małe, częste aktualizacje z gałęzią główną. Przeczytaj artykuł
Znaczenie ciągłej integracji
Aby zrozumieć znaczenie procesu CI, warto najpierw omówić niektóre problemy, które często pojawiają się z powodu jego braku. Bez CI programiści muszą ręcznie koordynować pracę i komunikować się, gdy dodają kod do produktu końcowego. Koordynacja ta wykracza poza zespoły programistów, obejmując również działy operacyjne i resztę organizacji. Zespoły produktowe muszą uzgodnić sekwencję wprowadzania funkcji i rozwiązań oraz ustalić, którzy członkowie zespołu będą za to odpowiedzialni.
Korzystanie ze środowiska innego niż CI wiąże się z problemami w zakresie efektywności komunikacji, które przekładają się na niepotrzebne koszty biurokratyczne prowadzenia projektów. Powoduje to wolniejsze wydania kodu z wyższym wskaźnikiem niepowodzeń, ponieważ programiści muszą podchodzić do integracji z wyczuciem i rozwagą. Ryzyko rośnie wykładniczo wraz z powiększaniem się zespołu inżynierów i bazy kodu.
Bez solidnego pipeline'u CI zespół inżynierów może stracić kontakt z resztą organizacji. Komunikacja między zespołem produktowym a zespołem inżynierów może być uciążliwa. Zespół inżynierów zaczyna pełnić rolę czarnej skrzynki, do której reszta zespołu wprowadza wymagania i funkcje oraz być może otrzymuje oczekiwane wyniki. Utrudni to inżynierom oszacowanie czasu dostawy, ponieważ czas potrzebny na zintegrowanie nowych zmian staje się nieznanym ryzykiem.
Co daje CI
CI pomaga zwiększyć liczebność i wydajność zespołów inżynierskich. Wprowadzenie CI do wspomnianego wyżej scenariusza pozwala programistom na niezależną, równoległą pracę nad funkcjami. Kiedy są gotowi połączyć te funkcje w ramach produktu końcowego, mogą to zrobić niezależnie i szybko. CI jest cenną i dobrze ugruntowaną praktyką stosowaną w nowoczesnych, sprawnie działających organizacjach zajmujących się tworzeniem oprogramowania.
Jak można stosować CI
Praktyka CI jest zazwyczaj stosowana wraz z procedurami tworzenia oprogramowania z wykorzystaniem metodyk Agile. Organizacja sporządza listę zadań, które składają się na harmonogram rozwoju produktu. Zadania te są następnie rozdzielane między członków zespołu tworzącego oprogramowanie. Proces CI umożliwia niezależne i równoległe wykonywanie tych zadań związanych z tworzeniem oprogramowania przez wyznaczonych programistów. Kiedy jedno z tych zadań zostanie ukończone, programista wprowadzi efekty pracy do systemu CI, integrując je z resztą projektu.
Ciągła integracja, ciągłe wdrażanie i ciągłe dostarczanie
Ciągła integracja, ciągłe wdrażanie i ciągłe dostarczanie to trzy fazy zautomatyzowanego pipeline'u wydawania oprogramowania, w tym pipeline'u DevOps. W ich ramach oprogramowanie przechodzi drogę od pomysłu do dostarczenia go użytkownikowi końcowemu. Faza integracji stanowi pierwszy etap pipeline'u. Ciągła integracja obejmuje proces, w ramach którego wielu programistów próbuje scalić swoje zmiany w kodzie z głównym repozytorium kodu projektu.
Ciągłe dostarczanie to kolejne rozszerzenie ciągłej integracji. Faza dostarczania polega na połączeniu artefaktu w całość w celu dostarczenia go do użytkowników końcowych. W jej trakcie uruchamiane są zautomatyzowane narzędzia kompilacyjne, które generują ten artefakt. Ta faza kompilacji jest utrzymywana w stanie „zielonym”, co oznacza, że artefakt powinien być gotowy do wdrożenia wśród użytkowników w dowolnym momencie.
Ciągłe wdrażanie jest ostatnią fazą pipeline'u. Podczas fazy wdrażania dochodzi do automatycznego uruchomienia i rozpowszechnienia artefaktu oprogramowania wśród użytkowników końcowych. W momencie rozpoczęcia wdrażania artefakt pomyślnie przeszedł fazy integracji i dostarczania. Teraz nadszedł czas, aby automatycznie wdrożyć lub rozpowszechnić artefakt. W tym celu zostaną wykorzystane skrypty lub narzędzia, które automatycznie przeniosą artefakt na serwery publiczne lub do innego mechanizmu dystrybucji, np. sklepu z aplikacjami.
Korzyści i wyzwania związane z ciągłą integracją
Ciągła integracja jest istotnym aspektem DevOps oraz ma kluczowe znaczenie dla wydajnych zespołów programistycznych. Jednak korzyści z CI nie ograniczają się do zespołu inżynierów — odczuwa je cała organizacja. CI zapewnia większą przejrzystość i lepszy wgląd w proces tworzenia i dostarczania oprogramowania. Korzyści te pozwalają reszcie organizacji lepiej planować i realizować strategie wejścia na rynek. Poniżej przedstawiono niektóre z ogólnych korzyści organizacyjnych płynących z CI.
Możliwość skalowania
CI umożliwia organizacjom skalowanie rozmiaru zespołu inżynierów, bazy kodu i infrastruktury. Minimalizując biurokrację związaną z integracją kodu i problemy z efektywnością komunikacji, CI pomaga budować przepływy pracy DevOps i Agile. Dzięki temu każdy członek zespołu może być odpowiedzialny za nową zmianę kodu aż do momentu wydania. CI umożliwia skalowanie poprzez usunięcie wszelkich zależności organizacyjnych pomiędzy rozwojem poszczególnych funkcji. Programiści mogą teraz pracować nad funkcjami w izolowanym środowisku i mieć pewność, że ich kod zostanie płynnie zintegrowany z resztą bazy kodu, co jest podstawowym procesem DevOps.
Sprawniejsza pętla informacji zwrotnych
Kolejną znaczącą zaletą CI jest możliwość szybszego uzyskiwania informacji zwrotnych na temat decyzji biznesowych. Zespoły produktowe mogą szybciej testować pomysły i iterować projekty produktów dzięki zoptymalizowanej platformie CI. Można szybko wprowadzać zmiany i mierzyć ich skuteczność. Można też szybko naprawiać błędy i inne problemy.
Skuteczniejsza komunikacja
CI poprawia ogólną komunikację między inżynierami, co umożliwia lepszą współpracę między pracownikami zajmującymi się rozwojem i operacjami w zespole DevOps. Wprowadzając przepływy pracy pull request powiązane z CI, programiści zyskują możliwość pasywnego dzielenia się wiedzą. Pull requesty pozwalają programistom obserwować i komentować kod tworzony przez innych członków zespołu. Programiści mogą teraz przeglądać gałęzie funkcji i współpracować nad nimi z innymi programistami w miarę postępu prac w ramach pipeline'u CI. CI może również pomóc zmniejszyć wydatki na zasoby QA. Wydajny pipeline CI obejmujący pokrycie zautomatyzowanymi testami o wysokiej pewności chroni przed regresjami i zapewnia, że nowe funkcje są zgodne ze specyfikacją. Zanim nowy kod zostanie scalony, musi przejść zestaw asercji testów CI, co zapobiegnie nowym regresjom.
Korzyści płynące z CI znacznie przewyższają wszelkie wyzwania związane z przyjęciem tego procesu. Należy jednak mieć świadomość wyzwań związanych z CI. Prawdziwe wyzwania związane z procesem CI pojawiają się w momencie jego wprowadzenia do projektu. W przypadku większości nowoczesnych projektów tworzenia oprogramowania proces CI jest wprowadzany już na wczesnych etapach, dzięki czemu wyzwania są mniejsze niż w przypadku jego późniejszego wprowadzenia.
Przyjęcie i instalacja
Wyzwania związane z ciągłą integracją dotyczą przede wszystkim przyjęcia przez zespół i początkowej instalacji technicznej. Jeśli zespół nie dysponuje obecnie rozwiązaniem CI, wybranie go i rozpoczęcie pracy może wymagać pewnego wysiłku. W związku z tym podczas instalacji pipeline'u CI należy wziąć pod uwagę istniejącą infrastrukturę techniczną.
Krzywa uczenia się technologii
Funkcjonalność CI jest wspierana przez szereg technologii, które mogą pomóc zespołowi zwiększyć tempo rozwoju. Technologie te to systemy kontroli wersji, infrastruktura hostingowa oraz technologie orkiestracji.
Najlepsze praktyki CI
Programowanie sterowane testami
Kiedy w ramach projektu ustanowiono już pipeline CI obejmujący automatyczne pokrycie testami, najlepszą praktyką jest ciągłe rozwijanie i ulepszanie pokrycia testami. Do każdego nowego elementu pojawiającego się w pipeline'ie CI należy dołączyć zestaw testów, które potwierdzą, że nowy kod działa zgodnie z oczekiwaniami.
Programowanie sterowane testami (Test Driven Development, TDD) to praktyka polegająca na pisaniu kodu testowego i przypadków testowych przed przystąpieniem do faktycznego kodowania funkcji. W ramach klasycznego procesu TDD można ściśle zaangażować zespół produktowy w tworzenie specyfikacji oczekiwanych zachowań biznesowych, które następnie mogą zostać przekształcone w przypadki testowe. W takiej sytuacji programiści i zespół produktowy spotykają się i omawiają specyfikację lub listę wymagań. Ta lista wymagań zostanie następnie przekształcona w listę kontrolną asercji kodu. Na kolejnym etapie programiści napiszą kod, który będzie pasował do tych asercji.
Pull requesty i przegląd kodu
Większość nowoczesnych zespołów programistycznych stosuje przepływ pracy obejmujący pull requesty i przegląd kodu. Pull requesty są kluczową praktyką z punktu widzenia efektywnego procesu CI. Pull request powstaje, gdy programista jest gotowy do scalenia nowego kodu z jego główną bazą. Powiadamia on innych programistów o nowym zestawie zmian, które są gotowe do integracji.
Pull requesty to doskonała okazja do uruchomienia pipeline'u CI i zestawu automatycznych kroków zatwierdzania. W czasie wysyłania pull requesta zwykle dodawany jest dodatkowy, ręczny krok zatwierdzania, podczas którego inżynier, którzy nie bierze udziału w projekcie, dokonuje przeglądu kodu funkcji. To pozwala na świeże spojrzenie na nowy kod i nową funkcjonalność. Inżynier ten zasugeruje poprawki i zatwierdzi lub odrzuci pull requesta.
Pull requesty i przegląd kodu to zaawansowane narzędzia wspierające pasywną komunikację i dzielenie się wiedzą w zespole inżynierów. Pomagają one uniknąć długu technicznego w postaci izolacji wiedzy, kiedy to konkretni inżynierowie są jedynymi interesariuszami zaangażowanymi w określone funkcje w bazie kodu.
Optymalizacja tempa pipeline'u
Biorąc pod uwagę, że pipeline CI będzie centralnym i często używanym procesem, ważne jest, aby zoptymalizować tempo jego wykonania. Każde niewielkie opóźnienie w przepływie CI będzie powiększać się wykładniczo wraz ze wzrostem częstotliwości wydań funkcji oraz wielkości zespołu i bazy kodu. Najlepszą praktyką jest mierzenie tempa pipeline'u CI i w razie potrzeby jego optymalizacja.
Szybszy pipeline CI umożliwia szybszą pętlę informacji zwrotnych o produkcie. Programiści mogą szybko wprowadzać zmiany i eksperymentować z nowymi pomysłami na funkcje, co pozwala poprawić doświadczenie użytkownika. Wszelkie błędy można szybko załatać i rozwiązać. Szybsze tempo pipeline'u CI gwarantuje zarówno przewagę nad konkurencją, jak i ogólną wyższą jakość doświadczenia klienta.
Ciągła integracja — pierwsze kroki
Podstawową zależnością CI jest system kontroli wersji (version control system, VCS). Jeśli docelowa baza kodu instalacji CI nie jest wyposażona w VCS, pierwszym krokiem jest zainstalowanie takiego systemu. Brak VCS w nowoczesnej bazie kodu jest bardzo mało prawdopodobny. Niektóre popularne systemy VCS to Git, Mercurial i Subversion.
Po wprowadzeniu systemu kontroli wersji kolejnym krokiem jest znalezienie platformy hostingu kontroli wersji. Większość nowoczesnych narzędzi do hostingu kontroli wersji obsługuje CI i oferuje wbudowane funkcje. Niektóre popularne platformy hostingu kontroli wersji to Bitbucket, GitHub i GitLab.
Po ustanowieniu kontroli wersji w projekcie należy dodać kroki zatwierdzania integracji. Najważniejszym krokiem zatwierdzania integracji, który należy wprowadzić, są zautomatyzowane testy. Dodanie ich do projektu może na początku wiązać się z kosztami. Trzeba zainstalować framework testowy, a następnie programiści muszą napisać kod testowy i przypadki testowe.
Niektóre pomysły na inne, mniej kosztowne mechanizmy zatwierdzania CI, które można wdrożyć, to sprawdzanie składni, formatowanie stylu kodu lub skanowanie luk w zależnościach. Kiedy uda się wprowadzić system kontroli wersji z kilkoma krokami zatwierdzania scalania, proces ciągłej integracji będzie ustanowiony.
CI nie jest procesem biznesowym ukierunkowanym wyłącznie na inżynierów. Reszta organizacji — zespoły marketingowe, sprzedażowe i produktowe — również skorzysta z pipeline'u CI. Zespoły produktowe będą musiały zastanowić się, jak równolegle realizować strumienie prac rozwojowych. Zespoły produktowe i zespoły inżynierów będą ściśle współpracować w celu określenia oczekiwań dotyczących funkcji biznesowych, które będą składać się na zestaw zautomatyzowanych testów.
Zespoły marketingowe i sprzedażowe będą mogły odwoływać się do pipeline'u CI w celu koordynacji działań i wydarzeń związanych z komunikacją skierowaną do klientów. CI zapewnia reszcie organizacji przejrzystość w zakresie postępu prac inżynieryjnych. To narzędzie służące do zapewniania przejrzystości i komunikacji można z łatwością zintegrować z projektami tworzenia oprogramowania wykorzystującymi metodykę Agile.
Podsumowując…
Jeśli Twoja organizacja stara się czerpać korzyści z podejścia DevOps lub po prostu dysponuje dużym zespołem programistów, proces CI jest ważny. Dzięki niemu inżynierowie będą mogli działać szybciej i skuteczniej.
Nowoczesne organizacje, którym zależy na wysokiej wydajności, korzystają z CI. Najlepsze firmy dysponują solidnymi pipeline'ami CI i nie wahają się dokonywać kolejnych inwestycji w efektywność. Korzyści płynące z CI nie ograniczają się do zespołu inżynierów i dotyczą całej organizacji.
Istnieje wiele narzędzi innych firm, które pomagają w zarządzaniu i instalacji CI. Niektóre popularne opcje to: Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCI, Jenkins, Bamboo czy Teamcity. W przypadku tych narzędzi dostępne są szczegółowe przewodniki konfiguracji i dokumenty ułatwiające rozpoczęcie pracy.
Wypróbuj najlepsze narzędzia CI dostępne w ofercie Atlassian:
Bitbucket Pipelines to doskonałe narzędzie przyspieszające realizację projektów dzięki nowoczesnym funkcjom CI.
Jira to jedno z najpopularniejszych na świecie narzędzi do zarządzania projektami DevOps i Agile. Umożliwia ścisłą integrację z innymi projektami Bitbucket, a w połączeniu z pipeline'em CI zapewnia bardzo przejrzysty wgląd w stan realizacji zadań w organizacji.
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.