Close

Narzędzia ciągłej integracji

Narzędzia, które automatyzują zmiany kodu w projektach tworzenia oprogramowania.

Portret Maxa Rehkopfa
Max Rehkopf

Autor współpracujący


Ciągła integracja (CI) jest najlepszą praktyką Agile i DevOps, która umożliwia wielu programistom szybką współpracę na wspólnej bazie kodu. Bez ciągłej integracji współpraca między programistami jest żmudnym, ręcznym procesem polegającym na koordynowaniu aktualizacji i scaleń kodu.

Filary ciągłej integracji


CI opiera się na najlepszych praktykach Agile i DevOps w zakresie tworzenia oprogramowania, w tym na zautomatyzowanych testach, kontroli wersji, automatyzacji kompilacji i zautomatyzowanych wdrożeniach. Każdy z tych filarów ciągłej integracji ma swój własny ekosystem narzędzi i filozofii. Dostawcy narzędzi do tworzenia oprogramowania oferują obecnie model „CI jako usługa”, w ramach którego filary te są połączone w jeden całościowy pakiet. Aby lepiej zrozumieć, jak działają te pakiety, przyjrzyjmy się poszczególnym filarom.

Zarządzanie kontrolą wersji

Zarządzanie kontrolą wersji to prawdopodobnie najważniejszy filar ciągłej integracji. Proces ten służy do przekazywania informacji o konfliktach w zakresie edycji pomiędzy wieloma programistami pracującymi w tej samej bazie kodu oraz do ich rozwiązywania. Dostępnych jest wiele narzędzi do zarządzania kontrolą wersji. Najpopularniejsze z nich to Git i Subversion. Produkty typu CI jako usługa koncentrują się wokół systemu kontroli wersji.

Automatyczne testowanie

W większości poważnych projektów tworzenia oprogramowania istnieje dodatkowa baza kodu, która nie jest jednoznacznie odpowiedzialna za produkt biznesowy i funkcje. Ta dodatkowa baza kodu jest zestawem testów. Funkcjonuje ona na zasadzie zestawu asercji, który zapewnia, że podstawowa baza kodu działa poprawnie i nie występują w niej błędy. Podczas tworzenia oprogramowania testy te są uruchamiane przez programistów, aby potwierdzić, że nowy kod nie spowodował regresji istniejących funkcji. Przypadki testowe można również uruchamiać za pomocą zewnętrznych narzędzi, co pozwala zautomatyzować proces walidacji. Usługi CI będą automatycznie uruchamiać przypadki testowe w projekcie przy zdarzeniach określonych przez użytkownika. Ogólnie rzecz biorąc, kiedy programista wypycha kod za pomocą systemu kontroli wersji, zdarzenie spowoduje, że cały zestaw testów zostanie uruchomiony automatycznie.

Poznaj rozwiązanie

Tworzenie i obsługa oprogramowania za pomocą Open DevOps

Logo Bitbucket
Omawiany produkt

Współpraca, testowanie i wdrażanie kodu

Automatyzacja kompilacji

„Kompilacje” to artefakty tworzone w celu zarejestrowania migawki aktualnej wersji wydania oprogramowania. Kompilacje są dystrybuowane do użytkowników końcowych poprzez różne sieci. Na ogół istnieje zestaw oskryptowanych kroków, które zostaną podjęte w ramach projektu, aby utworzyć artefakt kompilacji. Narzędzia CI pomagają usprawnić ten proces kompilacji za pomocą automatycznych wyzwalaczy z poziomu systemu kontroli wersji. Przykładowym wyzwalaczem może być następująca sytuacja: następuje scalenie nowego kodu z produkcyjną gałęzią bazy kodu, po czym kompilacja zostaje wysyłana na zdalny serwer, aby użytkownicy mogli ją pobrać.

Zautomatyzowane wdrożenia

Gdy kompilacje są gotowe do dystrybucji, przechodzą przez proces wdrażania. W zależności od projektu wdrożenie może mieć różne rezultaty. Na przykład projekty internetowe są wdrażane na publicznie dostępnych serwerach WWW. Podczas tego wdrażania artefakt, który został wygenerowany w fazie kompilacji, jest kopiowany na serwery WWW. Proces wdrażania różni się w zależności od tego, czy mamy do czynienia z aplikacją mobilną czy komputerową, i może obejmować przesłanie do „sklepu”, tak aby użytkownicy mogli pobrać aplikację.

Porównanie narzędzi do ciągłej integracji


1. Bitbucket Pipelines

Podsumowanie: Bitbucket Pipelines to narzędzie CI zintegrowane bezpośrednio z Bitbucket, chmurowym systemem kontroli wersji oferowanym przez firmę Atlassian. Bitbucket Pipelines pozwala w łatwy sposób włączyć CI, jeśli Twój projekt znajduje się już w Bitbucket. Usługa Bitbucket Pipelines jest zarządzana jako kod, dzięki czemu można łatwo zatwierdzać definicje pipeline'ów i uruchamiać kompilacje. Bitbucket Pipelines dodatkowo oferuje proces CD. Oznacza to, że projekty stworzone za pomocą Bitbucket Pipelines można wdrażać również w infrastrukturze produkcyjnej.

Cechy:

  • Łatwa konfiguracja
  • Ujednolicone środowisko Bitbucket
  • Chmura udostępniana przez zewnętrznego dostawcę

Strona internetowa: https://bitbucket.org/product/features/pipelines

2. Jenkins

Podsumowanie: Jenkins to narzędzie CI, które od wielu lat cieszy się uznaniem. Jest to narzędzie open source bazujące na aktualizacjach społeczności. Jenkins jest przeznaczony przede wszystkim do instalacji lokalnej. To świetna opcja, gdy Twoja organizacja potrzebuje lokalnego wsparcia w zakresie obsługi wrażliwych danych klientów, np. dotyczących zgodności z HIPAA.

Cechy:

  • Narzędzie lokalne
  • Open source
  • Rozbudowany ekosystem dodatków i wtyczek

Strona internetowa: https://jenkins.io/

3. AWS CodePipeline

Podsumowanie: Amazon Web Services jest jednym z najbardziej dominujących na rynku dostawców infrastruktury chmurowej. Oferuje narzędzia i usługi do wykonywania wszelkiego rodzaju zadań związanych z infrastrukturą i tworzeniem kodu. Narzędzie CI oferowane przez AWS to CodePipeline. Może ono bezpośrednio współdziałać z innymi istniejącymi narzędziami AWS, aby umożliwić bezproblemowe korzystanie z platformy AWS.

Cechy:

  • Rozwiązanie w pełni chmurowe
  • Zintegrowane z usługami Amazon Web
  • Obsługa niestandardowych wtyczek
  • Zaawansowana kontrola dostępu

Strona internetowa: https://aws.amazon.com/codepipeline/

4. CircleCI

Podsumowanie: CircleCI to narzędzie CI, które doskonale współpracuje z serwisem GitHub, jednym z najpopularniejszych chmurowych narzędzi do hostingu systemu kontroli wersji. CircleCI jest jednym z najbardziej elastycznych narzędzi CI, ponieważ obsługuje wiele systemów kontroli wersji, systemów kontenerowych i mechanizmów dostarczania. Narzędzie CircleCI może być hostowane lokalnie lub używane w chmurze.

Cechy:

  • Wyzwalacze powiadomień na podstawie zdarzeń CI
  • Wydajność zoptymalizowana pod kątem szybkich kompilacji
  • Łatwe debugowanie przez SSH i w kompilacjach lokalnych
  • Analizy pozwalające zmierzyć wydajność kompilacji

Strona internetowa: https://circleci.com/

5. Azure Pipelines

Podsumowanie: Azure to platforma infrastruktury chmurowej firmy Microsoft — odpowiednik Amazon Web Services. Podobnie jak wspomniany wcześniej produkt AWS CodePipeline, Azure oferuje narzędzie CI, które jest w pełni zintegrowane z pakietem narzędzi hostingowych Azure.

Cechy:

  • Integracja z platformą Azure
  • Obsługa platformy Windows
  • Obsługa kontenerów
  • Integracja z GitHub

Strona internetowa: https://azure.microsoft.com

6. GitLab

Podsumowanie: GitLab to nowe narzędzie CI, które obsługuje wszystkie funkcje DevOps. Zostało ono stworzone z zamiarem ogólnego usprawnienia korzystania z GitHub. GitLab oferuje nowoczesne środowisko użytkownika z obsługą kontenerów.

Cechy:

  • Hosting lokalny lub w chmurze
  • Ciągłe testowanie bezpieczeństwa
  • Łatwe do opanowania środowisko użytkownika

Strona internetowa: https://about.gitlab.com

7. Atlassian Bamboo

Podsumowanie: kolejne narzędzie CI od firmy Atlassian. Podczas gdy Bitbucket Pipelines jest rozwiązaniem dostępnym wyłącznie w chmurze, Bamboo oferuje możliwość samodzielnego hostowania.

Cechy:

  • Najlepsza integracja z pakietem produktów Atlassian
  • Rozbudowany katalog dodatków i wtyczek
  • Obsługa kontenerów za pomocą agentów Docker
  • Interfejs API wyzwalaczy dla funkcji IFTTT

Strona internetowa: https://www.atlassian.com/software/bamboo

Jakie narzędzie CI jest najlepsze dla Twojej firmy?


Wybierając narzędzie CI dla swojego zespołu, należy wziąć pod uwagę kilka ważnych czynników.

Obsługa systemu kontroli wersji

Głównym filarem systemu CI/CD jest obsługa i integracja bazowego systemu kontroli wersji (ang. Version Control System, VCS). Najpopularniejsze systemy VCS to Git, Subversion, Mercurial i Perforce. Chmurowe narzędzia CI mogą obsługiwać niektóre lub wszystkie te systemy VCS. Kluczowe jest wybranie narzędzia CI, które oferuje obsługę systemu VCS używanego w Twoim projekcie.

Lokalnie lub w chmurze

Niektóre z wyżej wymienionych narzędzi CI — np. Jenkins — można zainstalować lokalnie. Oznacza to, że Twój zespół jest odpowiedzialny za konfigurację systemu CI i zarządzanie nim w Waszej infrastrukturze. Może to być korzystne z punktu widzenia prywatności i bezpieczeństwa. Na przykład jeśli masz obawy dotyczące prywatności danych klientów i musisz spełnić standardy zgodności, rozwiązanie lokalne może być wymagane. Instancje lokalne mogą też mieć bardziej rozbudowane opcje dostosowywania i konfiguracji.

Rozwiązania lokalne mogą wymagać dodatkowej obsługi, a te czynności mogą być niezgodne z podstawowymi potrzebami biznesowymi. W przypadku opcji chmurowych narzędziem CI zarządza zewnętrzny dostawca. Firma oferująca hosting w chmurze zajmuje się natomiast nieprzerwanym działaniem i skalowaniem narzędzia CI oraz zapewnianiem związanego z nim wsparcia. Dzięki temu Twój zespół może skupić się na podstawowych potrzebach biznesowych. Może to być ogromna korzyść dla zespołów o ograniczonym budżecie lub mniejszych firm, które muszą intensywnie skupić się na celach związanych z dopasowaniem produktu do rynku.

Obsługa kontenerów

Konteneryzacja to nowoczesny trend w dziedzinie tworzenia oprogramowania. Umożliwia ona dystrybucję niezmiennej, powtarzalnej i izolowanej kopii aplikacji. Konteneryzacja jest obsługiwana przez narzędzia takie jak Docker czy Kubernetes. Nowoczesne narzędzia CI oferują wsparcie dla integracji kontenerów w procesie CI/CD. Kontenery rozwiązują problem typu „na moim komputerze to działa”. Zapewniają, że kod aplikacji jest zapakowany w zamrożoną migawkę zależności na poziomie systemu. Daje to gwarancję, że kiedy kod Twojego zespołu jest wykonywany w narzędziu CI, jest to replika lokalnego środowiska. Eliminuje to całą grupę problemów związanych ze zgodnością środowiska, które pojawiają się, jeśli nie używamy kontenerów.

Wtyczki i integracje innych firm

Narzędzia CI stają się jeszcze bardziej użyteczne, gdy są zintegrowane z resztą Twojego stosu technologicznego. Z narzędzi CI można gromadzić analizy dotyczące efektywności i wydajności zespołu inżynierów. Aplikacje do planowania sprintów można powiązać z narzędziami CI, tak aby status każdego sprintu był automatycznie aktualizowany po dostarczeniu kodu. Integracje te można wykorzystywać do wyznaczania wskaźników KPI oraz harmonogramów zespołu inżynierów.

Rozpoczynanie korzystania z CI


Nowoczesne narzędzie CI jest kluczowe z punktu widzenia zespołu inżynierów o wysokiej wydajności. Dzięki wykorzystaniu narzędzia CI zespoły inżynierów mogą zoptymalizować komunikację i szybkość dostarczania produktów. Na rynku dostępnych jest wiele popularnych narzędzi CI. Filary, które należy wziąć pod uwagę przy wyborze narzędzia CI, to obsługa systemu kontroli wersji, hosting lokalny i chmurowy, pipeline'y wdrożeń oraz integracje z aplikacjami zewnętrznymi.

Przeczytaj nasze przewodniki

Możesz sięgnąć do bardziej szczegółowych przewodników i samouczków, które pomogą Ci zacząć stosować te praktyki.

Max Rehkopf
Max Rehkopf

Jako samozwańczy „władca chaosu” wykorzystuję praktyki Agile i zasady Lean, aby wprowadzić w swoje życie codzienne nieco porządku. Dzielenie się własnymi wnioskami poprzez liczne artykuły, pogadanki i filmy, jakie przygotowuję dla Atlassian, sprawia mi wielką radość. 


Udostępnij ten artykuł

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.

Ilustracja DevOps

Społeczność DevOps

Ilustracja DevOps

Przeczytaj blog

Ilustracja przedstawiająca mapę

Zacznij korzystać za darmo

Zapisz się do newslettera DevOps

Thank you for signing up