Bitwa pod Jenkins i GitLab CI/CD

W ostatniej dekadzie poczyniono znaczne postępy w rozwoju narzędzi do ciągłej integracji (Continuous Integration, CI) i ciągłego wdrażania (Continuous Delivery, CD). Rozwój technologii integrujących tworzenie i działanie oprogramowania (Development Operations, DevOps) doprowadził do gwałtownego wzrostu zapotrzebowania na narzędzia CI/CD. Istniejące rozwiązania są ciągle udoskonalane, starając się nadążać za duchem czasu, wydawane są ich nowe wersje, w świecie oprogramowania do zapewniania jakości (Quality Assurance, QA), ciągle pojawia się wiele nowych produktów. Przy tak bogatym wyborze wybór odpowiedniego narzędzia nie jest łatwym zadaniem.

Bitwa pod Jenkins i GitLab CI/CD

Wśród wszystkich istniejących narzędzi CI/CD są dwa projekty, na które zdecydowanie warto zwrócić uwagę kogoś, kto szuka czegoś z tego obszaru. Mowa o Jenkinsie i narzędziu GitLab CI/CD, które jest częścią platformy GitLab. Jenkins ma więcej niż 16000 gwiazdki na GitHubie. Nieco więcej uzyskało repozytorium GitLab na gitlab.com 2000 gwiazdy. Jeśli porównamy popularność repozytoriów, okaże się, że Jenkins zdobył 8 razy więcej gwiazdek niż platforma, w skład której wchodzi GitLab CI/CD. Ale wybierając narzędzie CI / CD, nie jest to jedyny wskaźnik, na który należy zwrócić uwagę. Istnieje wiele innych i to wyjaśnia, dlaczego w wielu porównaniach Jenkins i GitLab CI/CD są bardzo blisko siebie.

Weźmy na przykład dane z platformy G2, która gromadzi recenzje szerokiej gamy produktów i oceny wystawiane im przez użytkowników. Oto średnia ocen Jenkins, na podstawie 288 recenzji, ma 4,3 gwiazdki. och och GitLab jest 270 recenzji, średnia ocena tego narzędzia to 4,4 gwiazdki. Nie pomylimy się, jeśli powiemy, że Jenkins i GitLab CI/CD konkurują ze sobą na równych zasadach. Warto zauważyć, że projekt Jenkins pojawił się w 2011 roku i od tego czasu jest ulubionym narzędziem testerów. Ale jednocześnie uruchomiony w 2014 roku projekt GitLab CI/CD zajął bardzo wysoką pozycję dzięki zaawansowanym funkcjom oferowanym przez tę platformę.

Jeśli mówimy o popularności Jenkinsa w porównaniu z innymi podobnymi platformami, zauważamy, że po opublikowaniu artykułu porównującego platformy Travis CI i Jenkins zorganizowaliśmy ankietę. Uczestniczyło w nim 85 użytkowników. Respondentów poproszono o wybranie narzędzia CI/CD, które najbardziej im się podoba. 79% wybrało Jenkinsa, 5% wybrało Travis CI, a 16% wskazało, że woli inne narzędzia.

Bitwa pod Jenkins i GitLab CI/CD
Wyniki ankiety

Wśród innych narzędzi CI/CD najczęściej wymieniano GitLab CI/CD.

Jeśli poważnie myślisz o DevOps, to musisz starannie dobrać odpowiednie narzędzia, biorąc pod uwagę specyfikę projektu, jego budżet i inne wymagania. Aby pomóc Ci dokonać właściwego wyboru, dokonamy przeglądu Jenkinsa i GitLab CI/CD. Mamy nadzieję, że pomoże to dokonać właściwego wyboru.

Wprowadzenie do Jenkinsa

Bitwa pod Jenkins i GitLab CI/CD
Jenkins to dobrze znane, elastyczne narzędzie CI/CD przeznaczone do automatyzacji wielu zadań związanych z projektami oprogramowania. Jenkins jest w całości napisany w Javie i wydany na licencji MIT. Posiada potężny zestaw funkcji mających na celu automatyzację zadań związanych z budowaniem, testowaniem, wdrażaniem, integracją i wydawaniem oprogramowania. To narzędzie może być używane w różnych systemach operacyjnych. Należą do nich macOS, Windows i wiele dystrybucji Linuksa, takich jak OpenSUSE, Ubuntu i Red Hat. Istnieją pakiety instalacyjne dla Jenkinsa przeznaczone dla różnych systemów operacyjnych, to narzędzie można zainstalować na Dockerze i na dowolnym systemie, który ma JRE (Java Runtime Environment).

Deweloperzy Jenkins stworzyli kolejny projekt, Jenkins X, który jest przeznaczony do pracy w środowisku Kubernetes. Jenkins X integruje Helm, serwer Jenkins CI/CD, Kubernetes i inne narzędzia do tworzenia potoków CI/CD zgodnych z najlepszymi praktykami DevOps. Na przykład używany jest tutaj GitOps.

Do skarbnicy zalet Jenkinsa można dodać fakt, że jego skrypty są bardzo dobrze skonstruowane, zrozumiałe i łatwe w czytaniu. Zespół Jenkinsa stworzył około 1000 wtyczek, które mają na celu organizację interakcji Jenkinsa z szeroką gamą technologii. Skrypty mogą wykorzystywać systemy uwierzytelniania, co pozwala na przykład na łączenie się z różnymi zamkniętymi systemami.

Podczas działania potoku Jenkinsa możesz obserwować, co dzieje się na każdym etapie, czy pewne etapy pracy zostały zakończone pomyślnie, czy nie. Możesz jednak oglądać to wszystko bez użycia określonego interfejsu graficznego, ale korzystając z możliwości terminala.

Cechy Jenkinsa

Do dobrze znanych cech Jenkinsa należy łatwość konfiguracji, wysoki poziom automatyzacji różnych operacji oraz doskonała dokumentacja. Jeśli mówimy o rozwiązywaniu zadań DevOps, to tutaj Jenkins jest uważany za bardzo niezawodne narzędzie, za pomocą którego z reguły nie ma sensu uważnie monitorować całego procesu przetwarzania projektu. Inaczej jest w przypadku innych narzędzi CI/CD. Porozmawiajmy o niektórych z najważniejszych cech Jenkinsa.

▍1. Bezpłatne, otwarte oprogramowanie obsługujące wiele platform

Jenkins może działać na platformach macOS, Windows i Linux. Może również funkcjonować w środowisku Docker, co pozwala na zorganizowanie jednolitej i szybkiej realizacji zautomatyzowanych zadań. To narzędzie może również działać jako serwlet w kontenerach obsługujących Javę, takich jak Apache Tomcat i GlassFish. Jakościowa instalacja Jenkinsa udokumentowane.

▍2. Rozwinięty ekosystem wtyczek

Ekosystem wtyczek Jenkins wydaje się być znacznie bardziej dojrzały niż ekosystemy wtyczek innych narzędzi CI/CD. Obecnie istnieje ponad 1500 wtyczek dla Jenkinsa. Wtyczki te mają na celu rozwiązywanie szerokiego zakresu zadań, za ich pomocą można zautomatyzować różnorodne projekty. Bogactwo darmowych wtyczek do wyboru sprawia, że ​​jeśli korzystasz z Jenkinsa, nie musisz kupować drogich płatnych wtyczek. Jest taka możliwość integracja Jenkins z wieloma narzędziami DevOps.

▍3. Łatwa instalacja i konfiguracja

Jenkins jest dość łatwy w instalacji i konfiguracji. Jednocześnie proces aktualizacji systemu jest również bardzo wygodny. Tutaj ponownie warto wspomnieć o jakości dokumentacji, ponieważ można w niej znaleźć odpowiedzi na różne pytania związane z instalacją i konfiguracją Jenkinsa.

▍4. Przyjazna społeczność

Jak już wspomniano, Jenkins to projekt typu open source, którego ekosystem obejmuje ogromną liczbę wtyczek. Wokół Jenkinsa rozwinęła się duża społeczność użytkowników i programistów, którzy pomagają rozwijać projekt. Społeczność jest jednym z czynników napędzających rozwój Jenkinsa.

▍5. Dostępność REST API

Pracując z Jenkinsem możesz skorzystać z API REST, które rozszerza możliwości systemu. API do zdalnego dostępu do systemu prezentowane jest w trzech wersjach: XML, JSON z obsługą JSONP, Python. tutaj jest Strona dokumentacji zawierająca szczegółowe informacje na temat pracy z interfejsem API REST Jenkinsa.

▍6. Wsparcie dla równoległego wykonywania zadań

Jenkins obsługuje równoległość zadań DevOps. Można go łatwo zintegrować z odpowiednimi narzędziami i otrzymywać powiadomienia o wynikach zadań. Testowanie kodu można przyspieszyć, organizując równoległą kompilację projektu przy użyciu różnych maszyn wirtualnych.

▍7. Wsparcie pracy w środowiskach rozproszonych

Jenkins umożliwia organizowanie rozproszonych kompilacji przy użyciu wielu komputerów. Cecha ta ma zastosowanie w dużych projektach i wykorzystuje schemat pracy, zgodnie z którym istnieje jeden serwer nadrzędny Jenkins i kilka maszyn podrzędnych. Maszyny Slave mogą być również wykorzystywane w sytuacjach, w których konieczne jest zorganizowanie testowania projektu w różnych środowiskach. Te cechy odróżniają Jenkinsa od innych podobnych projektów.

Wprowadzenie do GitLaba

Bitwa pod Jenkins i GitLab CI/CD
GitLab CI / CD można nazwać jednym z najnowszych i najbardziej lubianych narzędzi DevOps. To bezpłatne narzędzie typu open source jest wbudowane w system kontroli wersji GitLab. Platforma GitLab posiada wersję społecznościową, obsługuje zarządzanie repozytoriami, narzędzia do śledzenia problemów, organizację przeglądania kodu, mechanizmy zorientowane na dokumentację. Firmy mogą instalować GitLab lokalnie, łącząc go z serwerami Active Directory i LDAP w celu bezpiecznej autoryzacji i uwierzytelniania użytkowników.

tutaj jest Samouczek wideo, który pomoże Ci dowiedzieć się, jak tworzyć potoki CI/CD przy użyciu funkcji GitLab CI/CD.

GitLab CI/CD został pierwotnie wydany jako samodzielny projekt, ale w 2015 roku ten zestaw narzędzi został zintegrowany z GitLab 8.0. Pojedynczy serwer GitLab CI/CD może obsłużyć ponad 25000 XNUMX użytkowników. W oparciu o takie serwery można tworzyć systemy o wysokiej dostępności.

GitLab CI/CD i główny projekt GitLab są napisane w Ruby i Go. Są one udostępniane na licencji MIT. GitLab CI/CD oprócz typowych funkcji narzędzi CI/CD obsługuje również dodatkowe funkcje związane np. z planowaniem pracy.

Integracja GitLab CI/CD z projektem jest bardzo łatwa. Podczas korzystania z 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 dopracować.

Zadania mogą przebiegać równolegle. Po ustaleniu sekwencji etapów i zadań potok CI/CD jest gotowy do działania. Możesz monitorować jego przebieg, monitorując status zadań. W rezultacie korzystanie z GitLab CI/CD jest bardzo wygodne, być może wygodniejsze niż inne podobne narzędzia.

Cechy GitLab CI/CD i GitLab

GitLab CI/CD to jedno z najpopularniejszych narzędzi DevOps. Projekt wyróżnia się wysokiej jakości dokumentacją, jego funkcje są łatwe i wygodne w użyciu. Jeśli nie znasz jeszcze GitLab CI/CD, poniższa lista funkcji tego narzędzia da ci ogólne wyobrażenie o tym, czego możesz się po nim spodziewać. Należy zaznaczyć, że wiele z tych funkcjonalności związanych jest z samą platformą GitLab, w którą zintegrowany jest GitLab CI/CD.

▍1. Popularność

GitLab CI/CD to stosunkowo nowe narzędzie, które znalazło szerokie zastosowanie. GitLab CI/CD powoli stał się niezwykle popularnym narzędziem CI/CD używanym do automatycznego testowania i wdrażania oprogramowania. Jest prosty w konfiguracji. Jest to również bezpłatne narzędzie CI/CD wbudowane w platformę GitLab.

▍2. Wsparcie dla GitLab Pages i Jekyll

Jekyll to statyczny generator witryn, którego można używać w systemie GitLab Pages do tworzenia witryn opartych na repozytoriach GitLab. System pobiera materiały źródłowe i na ich podstawie generuje gotową stronę statyczną. Możesz kontrolować wygląd i funkcje takich witryn, edytując plik _config.yml, używany przez Jekylla.

▍3. Możliwości planowania projektów

Dzięki możliwości planowania etapów projektów zwiększa się wygoda śledzenia problemów i ich grup. Pozwala to na zarządzanie organizacją pracy nad projektami, planowanie ich realizacji w określonym terminie.

▍4. Automatyczne skalowanie biegaczy CI

Dzięki automatycznemu skalowaniu runnerów odpowiedzialnych za wykonanie określonych zadań można sporo zaoszczędzić na kosztach wynajmu pojemności serwera. Jest to bardzo ważne, zwłaszcza jeśli chodzi o środowiska, w których projekty są testowane równolegle. Dodatkowo jest to istotne w przypadku dużych projektów składających się z kilku repozytoriów.

▍5. Narzędzia do śledzenia problemów

Potężne możliwości śledzenia problemów GitLab skłoniły wiele projektów open source do korzystania z platformy. GitLab CI/CD umożliwia równoległe testowanie różnych gałęzi kodu. Wyniki testów są wygodnie analizowane w interfejsie systemu. To odróżnia GitLab CI/CD od Jenkinsa.

▍6. Ograniczanie dostępu do repozytoriów

Platforma GitLab obsługuje ograniczanie dostępu do repozytoriów. Na przykład osobom współpracującym nad projektem w repozytorium można przypisać uprawnienia odpowiednie do ich ról. Dotyczy to zwłaszcza projektów korporacyjnych.

▍7. Aktywne wsparcie społeczności

Wokół GitLab rozwinęła się aktywna społeczność, która przyczynia się do rozwoju tej platformy i jej narzędzi, w szczególności GitLab CI/CD. Głęboka integracja między innymi GitLab CI/CD i GitLab ułatwia znalezienie odpowiedzi na pytania, które pojawiają się podczas pracy z GitLab CI/CD.

▍8. Wsparcie dla różnych systemów kontroli wersji

GitLab CI/CD to system, który może pracować z czymś więcej niż tylko kodem hostowanym w repozytoriach GitLab. Przykładowo kod może być przechowywany w repozytorium GitHub, a potok CI/CD może być zorganizowany na bazie GitLab z wykorzystaniem GitLab CI/CD.

Porównanie Jenkinsa i GitLab CI/CD

Jenkins i GitLab CI/CD to bardzo dobre narzędzia, które są w stanie sprawić, że potok CI/CD będzie działał płynnie. Ale jeśli je porównasz, okaże się, że chociaż pod wieloma względami są podobne, pod pewnymi względami różnią się od siebie.

Charakteryzacja
Jenkins
GitLab CI / CD

Otwarte źródło lub zamknięte źródło
otwarte źródło
otwarte źródło

Instalacja
Wymagany.
Niewymagane, ponieważ jest to wbudowana funkcja platformy GitLab.

Unikalne funkcje
Obsługa wtyczek.
Głęboka integracja z systemem kontroli wersji.

Wsparcie
Brakuje.
Do dyspozycji.

Instalacja i konfiguracja
Trudności nie powodują
Trudności nie powodują

Samodzielne wdrożenie systemu
Tylko w ten sposób można korzystać z systemu.
Utrzymany.

Tworzenie potoków CI/CD
Obsługiwane przy użyciu Jenkins Pipeline.
Utrzymany.

Monitorowanie wydajności aplikacji
Brakuje.
Do dyspozycji.

Ekosystem
Istnieje ponad 1000 wtyczek.
System jest rozwijany w ramach GitLab.

API
Obsługuje zaawansowany system API.
Oferuje interfejs API do głębszej integracji z projektami.

Obsługa JavaScriptu
Do dyspozycji.
Do dyspozycji.

Integracja z innymi narzędziami
Obsługiwana jest integracja z innymi narzędziami i platformami (Slack, GitHub).
Wiele narzędzi do integracji z systemami firm trzecich, w szczególności - z GitHub i Kubernetes.

Kontrola jakości kodu
Obsługiwane - przy użyciu wtyczki SonarQube i innych wtyczek.
Utrzymany.

Różnice między Jenkinsem a GitLab CI/CD

Po opisaniu i porównaniu Jenkinsa i GitLab CI/CD, skupmy się na różnicach między tymi narzędziami DevOps. Znajomość tych różnic pomoże ci zrozumieć, kto woli jedno z tych narzędzi od drugiego.

  • GitLab CI/CD może w pełni kontrolować repozytoria Git. Mówimy o zarządzaniu gałęziami repozytorium i kilku innych funkcjach. Ale Jenkins, choć potrafi współpracować z repozytoriami, nie daje nad nimi takiego samego poziomu kontroli jak GitLab CI/CD.
  • Jenkins to darmowy projekt typu open source. Ten, kto go wybiera, wdraża go samodzielnie. A GitLab CI / CD jest zawarty w platformie GitLab, jest to rozwiązanie „pod klucz”.
  • GitLab CI/CD obsługuje zaawansowane narzędzia do zarządzania zadaniami, które działają na poziomie projektu. Ta strona Jenkinsa jest mniej rozwinięta.

Jenkins i GitLab CI/CD: mocne i słabe strony

Teraz masz już pojęcie o Jenkinsie i GitLab CI/CD. Teraz, aby jeszcze lepiej zapoznać się z tymi narzędziami, przyjrzyjmy się ich mocnym i słabym stronom. Zakładamy, że już zdecydowałeś, jakiego narzędzia potrzebujesz. Mamy nadzieję, że ta sekcja pozwoli ci się sprawdzić.

▍Mocne strony Jenkinsa

  • Duża liczba wtyczek.
  • Pełna kontrola nad montażem narzędzi.
  • Proste debugowanie biegaczy.
  • Łatwa konfiguracja węzła.
  • Łatwe wdrażanie kodu.
  • Bardzo dobry system zarządzania poświadczeniami.
  • Elastyczność i wszechstronność.
  • Wsparcie dla różnych języków programowania.
  • System jest zrozumiały na poziomie intuicyjnym.

▍Słabości Jenkinsa

  • Korzystanie z wtyczek może być trudne.
  • W przypadku używania Jenkinsa w małych projektach czas potrzebny na jego samodzielną konfigurację może być nieracjonalnie długi.
  • Brak ogólnych informacji analitycznych na temat łańcuchów CI/CD.

▍Mocne strony GitLab CI/CD

  • Dobra integracja z Dockerem.
  • Proste skalowanie biegaczy.
  • Równoległe wykonywanie zadań wchodzących w skład etapów potoku CI/CD.
  • Używanie skierowanego modelu grafu acyklicznego podczas konfigurowania relacji zadań.
  • Wysoki poziom skalowalności dzięki możliwości równoległego wykonywania biegaczy.
  • Łatwość dodawania zadań.
  • Proste rozwiązanie konfliktu.
  • Niezawodny system bezpieczeństwa.

▍Słabości GitLab CI/CD

  • Dla każdego zadania musisz opisać i przesłać/pobrać artefakty.
  • Nie możesz przetestować wyników łączenia oddziałów, zanim nie zostaną one faktycznie połączone.
  • Opisując etapy potoku CI/CD nie ma jeszcze możliwości wyodrębnienia w nich poszczególnych etapów.

Wyniki

Zarówno Jenkins, jak i GitLab CI/CD mają mocne i słabe strony. Odpowiedź na pytanie, co wybrać, zależy od potrzeb i specyfiki konkretnego projektu. Każde z omawianych dzisiaj narzędzi CI/CD ma pewne cechy, chociaż narzędzia te zostały stworzone w celu rozwiązania tego samego problemu. Jednocześnie Jenkins jest samodzielnym narzędziem, a GitLab CI/CD częścią platformy przeznaczonej do współpracy nad kodem.

Wybierając system CI/CD, oprócz jego możliwości, warto wziąć pod uwagę koszty, jakie mogą być z nim związane, oraz z czym dokładnie pracują inżynierowie DevOps wspierający projekt.

Z jakich narzędzi CI/CD korzystasz?

Bitwa pod Jenkins i GitLab CI/CD

Bitwa pod Jenkins i GitLab CI/CD

Źródło: www.habr.com

Dodaj komentarz