Narzędzia ciągłej integracji
Narzędzia, które automatyzują zmiany kodu w projektach tworzenia oprogramowania.
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
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.
Udostępnij ten artykuł
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.