W ostatniej dekadzie osiągnięto znaczne postępy w obszarze rozwoju narzędzi ciągłej integracji (Continuous Integration, CI) oraz ciągłego wdrażania (Continuous Delivery, CD). Rozwój technologii integracji rozwój i eksploatacji oprogramowania (Development Operations, DevOps) doprowadził do szybkiego wzrostu zapotrzebowania na narzędzia CI/CD. Istniejące rozwiązania są stale udoskonalane, aby nadążać za czasami, a nowe wersje są wprowadzane, w świecie kontroli jakości oprogramowania (Quality Assurance, QA) nieustannie pojawia się wiele nowych produktów. Przy tak bogatym wyborze dobór odpowiednich narzędzi okazuje się skomplikowanym zadaniem.
Wśród wszystkich istniejących narzędzi CI/CD znajdują się dwa projekty, na które zdecydowanie warto zwrócić uwagę, jeśli poszukujesz czegoś w tej dziedzinie. Mowa o Jenkinsie oraz narzędziu GitLab CI/CD, które jest częścią platformy GitLab. Jenkins ma ponad gwiazdek na GitHubie. Repozytorium GitLab na gitlab.com zdobyło trochę więcej niż gwiazdek. Porównując popularność repozytoriów, okazuje się, że Jenkins zdobył 8 razy więcej gwiazdek niż platforma, której częścią jest GitLab CI/CD. Jednak przy wyborze narzędzia CI/CD nie jest to jedyny wskaźnik, na który warto zwrócić uwagę. Istnieje wiele innych, co tłumaczy, dlaczego w wielu porównaniach Jenkins i GitLab CI/CD są do siebie bardzo zbliżone.
Na przykład, dane z platformy G2, która zbiera opinie na temat różnych produktów oraz oceny przyznawane przez użytkowników, pokazują, że średnia ocena , oparta na 288 opiniach, wynosi 4,3 gwiazdki. A o tutaj jest 270 opinii, a średnia ocena tego narzędzia wynosi 4,4 gwiazdki. Nie pomylimy się, stwierdzając, że Jenkins i GitLab CI/CD konkurują ze sobą na równych warunkach. Interesujące jest to, że projekt Jenkins powstał w 2011 roku i od tego czasu jest ulubionym narzędziem testerów. Jednak projekt GitLab CI/CD, uruchomiony w 2014 roku, zdobył wysokie pozycje dzięki zaawansowanym możliwościom oferowanym przez tę platformę.
Jeśli chodzi o popularność Jenkinsa w porównaniu do innych podobnych platform, warto zauważyć, że po opublikowaniu artykułu, w którym porównano platformy Travis CI i Jenkins, zorganizowaliśmy ankietę. Wzięło w niej udział 85 użytkowników. Respondentom zaproponowano wybór narzędzia CI/CD, które najbardziej im odpowiada. 79% wybrało Jenkinsa, 5% wybrało Travis CI, a 16% wskazało, że preferuje inne narzędzia.

Wyniki ankiety
Wśród innych narzędzi CI/CD najczęściej wymieniano GitLab CI/CD.
Jeśli poważnie zajmujesz się DevOps, musisz starannie dobierać odpowiednie narzędzia, biorąc pod uwagę specyfikę projektu, jego budżet i inne wymagania. Aby pomóc Ci podjąć właściwą decyzję, zamierzamy przeprowadzić analizę Jenkinsa i GitLab CI/CD. Możemy mieć nadzieję, że pomoże Ci to dokonać właściwego wyboru.
Wprowadzenie do Jenkinsa

— to szeroko znane, elastyczne narzędzie CI/CD, przeznaczone do automatyzacji wielu zadań związanych z projektami programistycznymi. Jenkins jest w pełni napisany w Javie i wydany na licencji MIT. Posiada potężny zestaw możliwości, skierowanych na automatyzację zadań związanych z budowaniem, testowaniem, wdrażaniem, integracją i wydawaniem oprogramowania. To narzędzie można używać w różnych systemach operacyjnych, w tym macOS, Windows i wielu dystrybucjach Linuxa, takich jak OpenSUSE, Ubuntu i Red Hat. Istnieją pakiety instalacyjne Jenkinsa, przeznaczone dla różnych systemów operacyjnych, więc można zainstalować to narzędzie w Dockerze i na każdym systemie, w którym jest zainstalowane JRE (Java Runtime Environment).
Deweloperzy Jenkinsa stworzyli jeszcze jeden projekt, Jenkins X, przeznaczony do pracy w środowisku Kubernetes. W Jenkins X zintegrowane są Helm, serwer Jenkins CI/CD, Kubernetes i inne narzędzia, które służą do tworzenia zintegrowanych procesów CI/CD zgodnych z najlepszymi praktykami DevOps. Przykładowo, zastosowano tutaj GitOps.
Do zalet Jenkinsa można dodać również fakt, że jego skrypty są bardzo dobrze zorganizowane, zrozumiałe i łatwe do przeczytania. Zespół Jenkins stworzył około 1000 wtyczek, które skierowane są na organizację interakcji Jenkinsa z różnymi technologiami. W skryptach można korzystać z systemów autoryzacji, co na przykład umożliwia łączenie się z różnymi zamkniętymi systemami.
Podczas pracy z systemem Jenkins można obserwować, co dzieje się na każdym etapie jego działania, jak również, czy poszczególne etapy pracy zakończyły się sukcesem, czy też nie. Można to wszystko śledzić, nie korzystając przy tym z żadnego graficznego interfejsu, a wykorzystując możliwości terminala.
Cechy Jenkins
Wśród powszechnie znanych cech Jenkins można wyróżnić łatwość konfiguracji, wysoki poziom automatyzacji różnorodnych operacji oraz doskonałą dokumentację. Jeśli mówimy o rozwiązaniach DevOps, Jenkins uznawany jest za niezwykle niezawodne narzędzie, które zwykle nie wymaga intensywnego monitorowania całego procesu obróbki projektu. W przypadku innych narzędzi CI/CD sytuacja wygląda inaczej. Porozmawiajmy o niektórych kluczowych możliwościach Jenkins.
▍1. Bezpłatność, otwarty kod źródłowy, wsparcie wielu platform
Jenkins może działać na platformach macOS, Windows i Linux. Może również funkcjonować w środowisku Docker, co pozwala na jednorodne i szybkie wykonywanie zautomatyzowanych zadań. To narzędzie można także uruchomić jako serwlet w kontenerach wspierających Java, takich jak Apache Tomcat i GlassFish. Instalacja Jenkins jest dobrze .
▍2. Rozwinięty ekosystem wtyczek
Ekosystem wtyczek Jenkins wygląda znacznie bardziej rozwinięty w porównaniu do ekosystemów modułów w innych narzędziach CI/CD. Obecnie istnieje ponad 1500 wtyczek dla Jenkins. Wtyczki te mają na celu rozwiązanie szerokiego zakresu zadań, za ich pomocą można zautomatyzować różnorodne projekty. Bogactwo wyboru darmowych modułów wtycznych sprawia, że osoby korzystające z Jenkins nie czują pilnej potrzeby zakupu drogich płatnych wtyczek. Istnieje możliwość integracji Jenkins z wieloma narzędziami DevOps.
▍3. Łatwa instalacja i konfiguracja
Instalacja i konfiguracja Jenkins jest stosunkowo prosta. Proces aktualizacji systemu również jest bardzo wygodny. Warto ponownie wspomnieć o jakości dokumentacji, ponieważ można w niej znaleźć odpowiedzi na różnorodne pytania związane z instalacją i konfiguracją Jenkins.
▍4. Przyjazna społeczność
Jak już wspomniano, Jenkins to projekt open source, którego ekosystem obejmuje ogromną liczbę wtyczek. Wokół Jenkinsa zbudowano dużą społeczność użytkowników i programistów, którzy wspierają rozwój projektu. Społeczność to jeden z czynników, który przyczynia się do rozwoju Jenkinsa.
▍5. Obecność REST API
Podczas pracy z Jenkinsem można korzystać z REST API, co rozszerza możliwości systemu. API do zdalnego dostępu do systemu jest dostępne w trzech wariantach: XML, JSON z obsługą JSONP oraz Python. strona dokumentacji, która szczegółowo opisuje pracę z REST API Jenkinsa.
▍6. Wsparcie dla równoległego wykonywania zadań
Jenkins wspiera równoległe wykonywanie zadań DevOps. Można go łatwo zintegrować z odpowiednimi narzędziami i otrzymywać powiadomienia o wynikach wykonania zadań. Wykonywanie testów kodu można przyspieszyć poprzez zorganizowanie równoległej kompilacji projektu z użyciem różnych maszyn wirtualnych.
▍7. Wsparcie dla pracy w środowiskach rozproszonych
Jenkins umożliwia organizowanie rozproszonych kompilacji przy użyciu kilku komputerów. Ta możliwość ma zastosowanie w dużych projektach i oparta jest na schemacie, w którym istnieje jeden główny serwer Jenkinsa i kilka maszyn podrzędnych. Maszyny podrzędne mogą być również wykorzystywane w sytuacjach, gdy konieczne jest przeprowadzenie testów projektu w różnych środowiskach. Te możliwości korzystnie odróżniają Jenkinsa od innych podobnych projektów.
Poznanie GitLab

można nazwać jednym z najnowszych i najbardziej lubianych narzędzi przez inżynierów DevOps. To darmowe narzędzie open source jest wbudowane w system kontroli wersji GitLab. Platforma GitLab ma wersję community, która obsługuje zarządzanie repozytoriami, narzędzia do śledzenia problemów, organizację przeglądów kodu oraz mechanizmy zorientowane na tworzenie dokumentacji. Firmy mogą lokalnie instalować GitLab, łącząc ten system z Active Directory i serwerami LDAP w celu zorganizowania bezpiecznej autoryzacji i uwierzytelniania użytkowników.
wideo przewodnik, który pomoże Ci dowiedzieć się, jak tworzyć potoki CI/CD, korzystając z możliwości GitLab CI/CD.
Początkowo GitLab CI/CD był wydany jako samodzielny projekt, ale w 2015 roku zestaw narzędzi został zintegrowany z GitLab 8.0. Oddzielny serwer GitLab CI/CD może obsługiwać ponad 25000 użytkowników. Na podstawie takich serwerów można tworzyć systemy charakteryzujące się wysoką dostępnością.
GitLab CI/CD oraz główny projekt GitLab są napisane w Ruby i Go. Są wydane na licencji MIT. GitLab CI/CD, oprócz standardowych możliwości narzędzi CI/CD, wspiera również dodatkowe funkcje związane z planowaniem zadań.
Integracja GitLab CI/CD z projektem jest bardzo prosta. Przy użyciu GitLab CI/CD proces przetwarzania kodu projektu dzieli się na etapy, z których każdy może składać się z kilku zadań wykonywanych w określonej kolejności. Zadania można dostosować w szczegółach.
Zadania mogą być wykonywane równolegle. Po skonfigurowaniu kolejności etapów i zadań, pipeline CI/CD jest gotowy do pracy. Można monitorować jego postępy, śledząc stan zadań. Dzięki temu korzystanie z GitLab CI/CD jest bardzo wygodne, być może wygodniejsze niż z innych podobnych narzędzi.
Cechy GitLab CI/CD i GitLab
GitLab CI/CD to jedno z najpopularniejszych narzędzi DevOps. Projekt wyróżnia się wysoką jakością dokumentacji, a jego funkcje są łatwe i wygodne w użyciu. Jeśli jeszcze nie znasz GitLab CI/CD, poniższa lista możliwości tego narzędzia daje ogólny przegląd tego, czego można od niego oczekiwać. Warto zauważyć, że wiele z tych możliwości ma związek z samą platformą GitLab, w której został zintegrowany GitLab CI/CD.
▍1. Popularność
GitLab CI/CD to stosunkowo nowe narzędzie, które znalazło szerokie zastosowanie. GitLab CI/CD stopniowo stał się niezwykle popularnym narzędziem CI/CD, używanym do automatyzacji testów i wdrażania oprogramowania. Jest łatwe w konfiguracji. Co więcej, to darmowe narzędzie CI/CD jest wbudowane w platformę GitLab.
▍2. Wsparcie dla GitLab Pages i Jekyll
Jekyll to generator statycznych stron, który można używać w systemie GitLab Pages do tworzenia stron opartych na repozytoriach GitLab. System pobiera materiały źródłowe i generuje na ich podstawie gotową statyczną stronę. Wygląd i funkcje takich stron można zarządzać, edytując plik _config.yml, używany przez Jekyll.
▍3. Możliwości planowania projektów
Dzięki możliwości planowania etapów projektów zwiększa się komfort śledzenia problemów i ich grupowania. Umożliwia to zarządzanie organizacją pracy nad projektami, planowanie ich realizacji na konkretne daty.
▍4. Automatyczne skalowanie runnerów CI
Dzięki automatycznemu skalowaniu runnerów, odpowiedzialnych za realizację konkretnych zadań, można znacznie zaoszczędzić na kosztach wynajmu mocy serwerowych. Jest to bardzo ważne, szczególnie w przypadku środowisk, w których testowanie projektów odbywa się równolegle. Co więcej, jest to istotne dla dużych projektów składających się z kilku repozytoriów.
▍5. Narzędzia do śledzenia problemów
Zaawansowane możliwości GitLab w zakresie śledzenia problemów sprawiły, że tę platformę wykorzystuje wiele projektów open source. GitLab CI/CD umożliwia równoległe testowanie różnych gałęzi kodu. Wyniki testów można wygodnie analizować w interfejsie systemu. To korzystnie wyróżnia GitLab CI/CD na tle Jenkins.
▍6. Ograniczenie dostępu do repozytoriów
Platforma GitLab wspiera ograniczenie dostępu do repozytoriów. Na przykład, tym, którzy współpracują nad projektem w danym repozytorium, można przypisać uprawnienia odpowiednie do ich ról. Jest to szczególnie istotne w projektach korporacyjnych.
▍7. Aktywne wsparcie społeczności
Wokół GitLab stworzyła się aktywna społeczność, która przyczynia się do rozwoju tej platformy oraz jej narzędzi, w tym GitLab CI/CD. Głęboka integracja GitLab CI/CD z GitLab upraszcza również znajdowanie odpowiedzi na pytania pojawiające się podczas pracy z GitLab CI/CD.
▍8. Wsparcie dla pracy z różnymi systemami kontroli wersji
GitLab CI/CD to system, który potrafi współpracować nie tylko z kodem przechowywanym w repozytoriach GitLab. Na przykład kod można przechowywać w repozytorium GitHub, a pipeline CI/CD można zorganizować na bazie GitLab z użyciem GitLab CI/CD.
Porównanie Jenkins i GitLab CI/CD
Jenkins i GitLab CI/CD to bardzo dobre narzędzia, z których każde może zapewnić prawidłowe działanie pipeline’u CI/CD. Jednak w porównaniu okaże się, że mimo podobieństw, różnią się one pewnymi aspektami.
Charakterystyka
Jenkins
GitLab CI/CD
Kod otwarty czy zamknięty
. Możemy rozwijać
. Możemy rozwijać
Instalacja
Wymagane.
Nie jest wymagane, ponieważ to jest wbudowana funkcja platformy GitLab.
Unikalne cechy
Wsparcie dla wtyczek.
Głęboka integracja z systemem zarządzania wersjami.
Wsparcie
Brak.
Jest dostępne.
Instalacja i konfiguracja
Nie sprawiają trudności
Nie sprawiają trudności
Samodzielne wdrożenie systemu
To jest jedyna opcja użycia systemu.
Jest wspierane.
Tworzenie potoków CI/CD
Wspierane, używa Jenkins Pipeline.
Jest wspierane.
Monitorowanie wydajności aplikacji
Brak.
Jest dostępne.
Ekosystem
Istnieje ponad 1000 wtyczek.
System rozwija się w ramach GitLab.
API
Wspiera rozwinięty system API.
Oferuje API dla głębszej integracji w projekty.
Wsparcie dla JavaScript
Jest dostępne.
Jest dostępne.
Integracja z innymi narzędziami
Wsparcie dla integracji z innymi narzędziami i platformami (Slack, GitHub).
Wiele narzędzi do integracji z zewnętrznymi systemami, w szczególności z GitHub i Kubernetes.
Kontrola jakości kodu
Wsparcie — za pomocą wtyczki SonarQube i innych wtyczek.
Jest wspierane.
Różnice między Jenkins a GitLab CI/CD
Opisując i porównując Jenkins i GitLab CI/CD, skoncentrujmy się teraz na różnicach między tymi narzędziami DevOps. Wiedza na temat tych różnic pomoże zrozumieć preferencje użytkowników jednego narzędzia nad drugim.
- GitLab CI/CD może w pełni zarządzać repozytoriami Git. Mowa o zarządzaniu gałęziami repozytoriów i niektórych innych możliwościach. Z kolei Jenkins, choć potrafi pracować z repozytoriami, nie oferuje takiego samego poziomu kontroli nad nimi jak GitLab CI/CD.
- Jenkins to darmowy projekt open source. Osoba, która go wybiera, wdraża go samodzielnie. A GitLab CI/CD jest częścią platformy GitLab, to gotowe rozwiązanie.
- GitLab CI/CD wspiera rozwinięte narzędzia zarządzania zadaniami, które działają na poziomie projektów. Ta strona Jenkins jest mniej rozwinięta.
Jenkins i GitLab CI/CD: mocne i słabe strony
Teraz masz już pewne wyobrażenie o Jenkins i GitLab CI/CD. Aby jeszcze lepiej poznać te narzędzia, rozważmy ich mocne i słabe strony. Mamy nadzieję, że już podjąłeś decyzję o tym, które narzędzie jest Ci potrzebne. Mamy nadzieję, że ta sekcja pozwoli Ci sprawdzić się.
▍Mocne strony Jenkins
- Duża liczba wtyczek.
- Pełna kontrola nad instalacją narzędzia.
- Łatwe debugowanie runnerów.
- Łatwa konfiguracja węzłów.
- Proste wdrożenie kodu.
- Bardzo dobry system zarządzania danymi.
- Elastyczność i uniwersalność.
- Wsparcie dla różnych języków programowania.
- System jest intuicyjny w obsłudze.
▍Słabe strony Jenkins
- Możliwe są trudności podczas korzystania z wtyczek.
- W przypadku małych projektów czas potrzebny na samodzielną konfigurację Jenkins może być nieproporcjonalnie duży.
- Brak ogólnych informacji analitycznych dotyczących łańcuchów CI/CD.
▍Mocne strony GitLab CI/CD
- Dobra integracja z Docker.
- Proste skalowanie runnerów.
- Równoległe wykonywanie zadań w ramach etapów pipeline'u CI/CD.
- Użycie modelu skierowanego acyklicznego grafu do konfigurowania relacji między zadaniami.
- Wysoki poziom skalowalności dzięki możliwości równoległego wykonywania runnerów.
- Łatwość dodawania zadań.
- Proste rozwiązywanie konfliktów.
- Solidny system bezpieczeństwa.
▍Słabe strony GitLab CI/CD
- Dla każdego zadania należy opisać i załadować/wyeksportować artefakty.
- Nie można przetestować wyników scalania gałęzi przed ich faktycznym scaleniem.
- Podczas opisywania etapów pipeline'u CI/CD nie można jeszcze wyróżniać poszczególnych faz.
Podsumowanie
Zarówno Jenkins, jak i GitLab CI/CD mają mocne i słabe strony. Odpowiedź na pytanie, co wybrać, zależy od potrzeb i szczególnych cech danego projektu. Każde z omawianych dzisiaj narzędzi CI/CD ma swoje unikalne cechy, chociaż zostały stworzone w tym samym celu. Jenkins jest narzędziem autonomicznym, podczas gdy GitLab CI/CD jest częścią platformy do współpracy nad kodem.
Wybierając system CI/CD, warto oprócz możliwości uwzględnić także związane z nim koszty oraz to, z czym pracują DevOps inżynierowie wspierający projekt.
Jakich narzędzi CI/CD używasz?
Źródło: habr.com
