CI/CD w DevOps – definicja ciągłej integracji i wdrażania oraz najlepsze narzędzia CI/CD

Paulina Cirocka 30 sierpnia 2022 6 min czytania
Contents

Tworzenie pipeline’u CI/CD to jedno z głównych zadań DevOps, mające na celu usprawnienie procesu tworzenia oprogramowania, jego automatyzację i przyspieszenie. Do tego celu DevOps może korzystać z różnych narzędzi. W tym artykule przedstawimy najlepsze narzędzia CI/CD, opisując ich główne funkcje, zalety i wady.

Co to jest CI/CD?

CI oznacza continuous integration (ciągła integracja), a CD – continuous deployment i delivery (ciągłe wdrażanie i dostarczanie). Jest to sposób wprowadzania automatyzacji na etapy tworzenia aplikacji. Ciągła integracja pomaga programistom częściej scalać zmiany kodu z główną gałęzią (tzw. „trunk”) — czasem nawet codziennie. Gdy zmiany programisty są scalone z aplikacją, są one automatycznie weryfikowane poprzez budowanie aplikacji i uruchamianie różnych poziomów testów automatycznych, zazwyczaj testów jednostkowych i integracyjnych, aby upewnić się, że zmiany nie zepsuły aplikacji. Oznacza to testowanie wszystkiego — od klas i funkcji po różne moduły tworzące całą aplikację. Jeśli testy automatyczne wykryją konflikt między nowym a istniejącym kodem, CI ułatwia szybkie i częste usuwanie błędów.
Ciągłe dostarczanie zwykle oznacza, że fragmenty kodu aplikacji (lub zmiany w kodzie) są automatycznie testowane pod kątem błędów i przesyłane do repozytorium w sposób zautomatyzowany, co można realizować za pomocą narzędzi opisanych w tym artykule. Ciągłe wdrażanie to kolejny proces, w którym program jest automatycznie dostarczany do środowisk produkcyjnych i testowych. Cały proces testowania i wdrażania jest projektowany i kontrolowany przez inżyniera DevOps, który tworzy tzw. pipeline’y CI/CD, o których wspomnieliśmy w tym artykule. Dzięki temu efektywność tworzenia oprogramowania i współpracy między działem rozwoju a operacjami jest znacznie wyższa. Również czas potrzebny na rozwój oprogramowania ulega skróceniu.

Jenkins

Początkowo nazywany Hudson, w 2011 roku zmienił nazwę na Jenkins i stał się jednym z najpopularniejszych narzędzi dla DevOps. Jenkins to oprogramowanie open source do tworzenia automatyzacji budowania, testowania i wdrażania oprogramowania. Działa na serwerach Java, ale pozwala tworzyć aplikacje w innych językach programowania. Główne zalety Jenkinsa to bogaty ekosystem wtyczek, duża globalna społeczność, łatwa instalacja, konfiguracja i dystrybucja. Jak to dokładnie działa?

Gdy programista dodaje zmiany do repozytorium, Jenkins przenosi je na serwer i wykonuje build. W przypadku niepowodzenia programista otrzymuje automatycznego maila o tym fakcie. W przypadku powodzenia build trafia do etapu wdrożenia.

Do głównych wad Jenkinsa można zaliczyć jego wtyczki – narzędzie wymaga dziesiątek pluginów, a im więcej ich jest, tym większe ryzyko błędów podczas aktualizacji. Co więcej, nie wszystkie wtyczki są kompatybilne z Declarative Pipelines.

Jenkins logo

Bitbucket

Stworzony przez Atlassian, Bitbucket to natywne narzędzie Git CI/CD współpracujące z Jira i Trello. Dzięki temu zespół programistów może tworzyć jedno środowisko, w którym pracują nad kodem, testują go i wdrażają. Dostępne są trzy wersje narzędzia. Bitbucket Cloud korzysta z rozwiązań chmurowych, by zwiększyć bezpieczeństwo, zapobiegać błędom i oczywiście tworzyć pipeline’y. Bitbucket Server jest hostowany lokalnie i współpracuje z Bamboo dedykowanym do CI/CD. Bitbucket Data Center to rozszerzenie Servera, które umożliwia hosting na wielu serwerach.

Najczęściej zgłaszaną wadą Bitbucketa jest brak możliwości integracji z produktami spoza Atlassiana oraz brak wsparcia dla bardziej zaawansowanych funkcji GIT.

Bitbucket logo

Github Actions

GitHub to darmowa platforma hostingowa założona w 2008 roku. Może działać jako zdalne i lokalne repozytorium, co oznacza, że podczas pracy programista nie musi mieć dostępu do internetu, bo wszystkie zmiany są zapisywane na dysku. W 2018 roku GitHub wprowadził API dedykowane CI/CD nazwane GitHub Actions. Działa zarówno na kontenerach, jak i maszynach wirtualnych z macOS, Windows i Linux. Wspiera też wiele języków programowania, takich jak Java, Python, PHP, .NET czy C++. Actions składa się z kodu, więc programiści mogą go traktować jak zwykły kod – edytować, wykorzystywać ponownie, dzielić się nim lub rozwidlać (forkować). To świetne rozwiązanie nie tylko do automatyzacji, ale także do orkiestracji workflow.

GitHub Actions logo

Gitlab

GitLab to kolejny darmowy, open source’owy serwer z modułem CI/CD. GitLab CI odpowiada za budowanie i testowanie oprogramowania, gdy programista dodaje nowy kod (ciągła integracja), a następnie GitLab CD wdraża zmiany kodu na środowisko produkcyjne (ciągłe dostarczanie). Co więcej, GitLab korzysta z Auto DevOps – zestawu funkcji i integracji wspierających dostarczanie i rozwój oprogramowania. Automatycznie wykrywa język kodu i korzysta z szablonów do tworzenia pipeline’ów CI/CD.

GitLab CI/CD jest łatwy do nauki, elastyczny i wysoko skalowalny. Można przyspieszyć wykonywanie zadań, konfigurując własnego runnera, a członkowie zespołu projektowego mogą codziennie integrować swoją pracę, co prowadzi do mniejszej liczby błędów.

GitLab logo

GoCD

GoCD działa podobnie do Jenkinsa i jest często wybierany jako dobra alternatywa. Automatyzuje cały proces budowania i testowania – od sprawdzenia kodu po wdrożenie. W przeciwieństwie do Jenkinsa, GoCD nie tworzy oddzielnego serwera na środowisku, ale może współpracować z Kubernetes i Docker, także przy wdrożeniach cloud native. Zapewnia też audyt. GoCD jest polecany dla mniejszych projektów, ponieważ jest narzędziem CI/CD o jednym przeznaczeniu.

Słabą stroną GoCD jest dokumentacja, którą użytkownicy opisują jako „wymagającą ulepszeń poprzez dodanie rzeczywistych przykładów i większej liczby scenariuszy konfiguracji”.

GoCD logo

Flux

Flux należy do rodziny projektów GitOps i jest zestawem rozwiązań zaprojektowanych specjalnie dla Kubernetes, udostępnionym również jako open source w ramach Cloud Native Computing Foundation. Flux działa trochę inaczej niż pozostałe narzędzia CI/CD opisane tutaj. Gdy programiści piszą manifesty Kubernetes i wypychają je do repozytorium, pod utrzymuje aktualną konfigurację, a Flux co 5 minut sprawdza, czy zaszły jakieś zmiany. Jeśli je wykryje, synchronizuje konfigurację z klastrem.

Flux logo
CICD CICDprocess continuousdelivery continuousdevelopment CICDpipeline devopstools
paulina.webp
Paulina Cirocka
Marketing Specialist

Doświadczona specjalistka ds. marketingu, specjalizuje się w tworzeniu treści. Pracuje dla firm IT od 2019 roku. W Devopsity odpowiada nie tylko za zarządzanie marketingiem, ale także za employer branding.

Spis treści

Przeczytaj również:

Poprzedni post Następny post