GitLab CI vs. Jenkins: różnice i podobieństwa [2023]

Proces tworzenia oprogramowania przypomina wędrówkę. Rozpoczyna się od etapu planowania, poprzez analizę, projektowanie, implementację, testowanie, aż do wdrożenia i późniejszego utrzymania. W tej podróży programiści korzystają z różnorodnych narzędzi.

GitLab CI oraz Jenkins to czołowe rozwiązania w dziedzinie ciągłej integracji i ciągłego dostarczania (CI/CD). CI/CD to zbiór zautomatyzowanych procesów, które usprawniają cykl życia oprogramowania.

Niniejszy artykuł, porównujący GitLab CI i Jenkins, ma na celu przybliżenie obu narzędzi, opisanie ich działania i zestawienie kluczowych cech.

Czym jest GitLab CI?

GitLab Continuous Integration and Delivery to narzędzie DevOps, które automatyzuje etapy tworzenia, testowania i wdrażania kodu w środowisku produkcyjnym.

GitLab CI składa się z dwóch głównych elementów: ciągłej integracji (CI) oraz ciągłego dostarczania/wdrażania (CD).

Ciągła integracja (CI) ma na celu zautomatyzowanie procesu kompilacji. Dodatkowo, CI zapewnia mechanizmy informacji zwrotnej podczas przeglądu kodu oraz automatyzuje testy bezpieczeństwa i jakości kodu. W efekcie, CI tworzy pakiet gotowy do wdrożenia w środowisku produkcyjnym.

Ciągłe wdrażanie (CD) w GitLab CI automatyzuje proces udostępniania infrastruktury, zarządza zmianami w infrastrukturze oraz wersjami oprogramowania. CD oferuje środowisko do stopniowego wdrażania zmian, umożliwiając weryfikację i monitorowanie wprowadzonych modyfikacji. Daje także możliwość wycofania zmian w razie potrzeby.

Połączenie obu tych funkcjonalności pozwala na zautomatyzowanie całego cyklu życia oprogramowania (SDLC), ograniczając do minimum potrzebę ręcznej interwencji.

Podsumowując, GitLab CI jest wykorzystywany do:

  • Przechowywania i zarządzania kodem źródłowym.
  • Automatyzacji potoku CI/CD.
  • Śledzenia problemów.
  • Zabezpieczania kodu.
  • Współpracy nad projektami.

Zalety korzystania z GitLab CI

  • Wyższa prędkość działania: GitLab CI eliminuje konieczność wykonywania ręcznych procesów, takich jak budowanie, testowanie i wdrażanie kodu.
  • Lepsza jakość kodu: Dzięki GitLab CI możliwe jest wykrywanie błędów i usterek w kodzie przed jego wdrożeniem do środowiska produkcyjnego.
  • Zwiększone bezpieczeństwo: GitLab CI oferuje funkcje zabezpieczeń, takie jak skanowanie luk w zabezpieczeniach, zarządzanie sekretami oraz skanowanie kodu, minimalizując ryzyko ataków hakerskich.
  • Elastyczność: GitLab CI można dostosować do wymagań konkretnego zespołu programistycznego. Narzędzie to współpracuje z popularnymi językami programowania i frameworkami.
  • Automatyzacja testów: Uruchamianie testów nie wymaga manualnej interwencji, ponieważ możliwe jest tworzenie skryptów do automatycznego pisania i wykonywania testów.

Czym jest Jenkins?

Jenkins to rozszerzalny serwer automatyzacji o otwartym kodzie źródłowym, który umożliwia użytkownikom zarządzanie i budowanie potoków ciągłej integracji i ciągłego dostarczania (CI/CD). Jest popularnym wyborem wśród specjalistów DevOps i inżynierów oprogramowania, pomagając w poprawie jakości, niezawodności i szybkości dostarczania oprogramowania.

Jenkins realizuje serię „zadań” lub kroków w ramach potoku. Każde zadanie składa się z sekwencji kroków. Krok w Jenkinsie może obejmować kompilację, testowanie, wdrożenie lub inne zadania, które można zautomatyzować w ramach cyklu życia oprogramowania.

Zastosowania Jenkinsa można streścić w następujących punktach:

  • Ciągła integracja.
  • Ciągłe dostarczanie.
  • Automatyczne testowanie.
  • Monitorowanie i raportowanie.
  • Skanowanie kodu.
  • Planowanie zadań.

Zalety korzystania z Jenkinsa

  • Skalowalność: Jenkins może być wykorzystywany zarówno w małych, jak i dużych projektach.
  • Prosta konfiguracja: Proces konfiguracji Jenkinsa jest intuicyjny, wspomagany dostępnymi zasobami.
  • Duża społeczność: Jenkins, obecny na rynku od prawie dwóch dekad, zgromadził szeroką społeczność użytkowników.
  • Bogaty wybór wtyczek: Funkcjonalność Jenkinsa można rozbudować za pomocą wielu dostępnych wtyczek.
  • Możliwość równoległego wykonywania zadań: Jenkins umożliwia wykonywanie wielu zadań jednocześnie, co przyspiesza procesy.

Podobieństwa między GitLab CI i Jenkins

  • Oba narzędzia obsługują ciągłą integrację i ciągłe dostarczanie.
  • Oba są projektami open source.
  • Oba posiadają duże społeczności użytkowników.
  • Oba współpracują z różnymi językami i frameworkami.
  • Oba automatyzują zadania w cyklu życia oprogramowania.
  • Oba oferują bogaty ekosystem wtyczek i rozszerzeń.

GitLab CI vs. Jenkins: Porównanie cech

Funkcja | GitLab CI | Jenkins
—|—|—
Open-source | Tak | Tak
Obsługa języków | Wiele języków | Wiele języków
Cena | Większość funkcji dostępna w darmowym planie. Dostępne są także plany płatne z dodatkowymi funkcjami. | Darmowy, open source.
Dojrzałość | Nowsza platforma; stworzona w 2014 roku. | Jenkins powstał jako Hudson, ale w 2011 roku został przemianowany na Jenkins.
Łatwość obsługi | Łatwy w użytkowaniu | Może być skomplikowany dla początkujących.
Hosting | Wewnętrzny i zewnętrzny | Wewnętrzny i zewnętrzny
Wymagania wstępne | Node.JS, Git, Ruby, Go | Java
Środowisko wykonawcze | |

GitLab CI vs. Jenkins: Szczegółowe porównanie

Pomimo istniejących podobieństw, GitLab i Jenkins różnią się w kilku kluczowych aspektach, co wpływa na sposób zarządzania procesem CI/CD. Poniżej przedstawiono najważniejsze różnice:

Architektura

Jenkins wykorzystuje architekturę typu master-worker do zarządzania procesem budowania oprogramowania.

  • Jenkins master planuje zadania budowania i przydziela je pracownikom do wykonania. Dodatkowo monitoruje stan procesów, zbiera wyniki kompilacji i prezentuje je na interaktywnym pulpicie nawigacyjnym.
  • Jenkins worker to wykonywalny plik Java uruchamiany na zdalnej maszynie. Pracownik, nazywany również agentem kompilacji, nasłuchuje poleceń z mastera i je wykonuje. Możliwe jest użycie nawet kilkuset węzłów oraz dodawanie i usuwanie workerów w zależności od potrzeb.

GitLab CI jest zintegrowany z GitLab, internetowym interfejsem do zarządzania repozytoriami, żądaniami scalania i innymi. GitLab CI składa się z następujących komponentów:

  • Narzędzie GitLab CI/CD umożliwia zarządzanie budowaniem oprogramowania.
  • GitLab Runners wykonują zadania CI. Ten lekki proces może działać w chmurze lub lokalnie.
  • Konfiguracja potoków CI/CD jest definiowana w pliku .gitlab-ci.yml. Plik ten opisuje zadania, etapy i kroki w potoku.

Wtyczki

Jenkins posiada ponad 1800 wtyczek tworzonych przez społeczność. Wtyczki te obejmują różne obszary, takie jak budowanie, wdrażanie i automatyzacja projektów. Użytkownicy mogą dostosować swoje potoki CI/CD oraz rozszerzyć funkcjonalność Jenkinsa.

Programiści mogą tworzyć niestandardowe wtyczki, korzystając z obszernej dokumentacji Jenkinsa. Mogą również dodawać wtyczki do katalogu Jenkinsa. Jenkins posiada dużą i aktywną społeczność, która wspiera rozwój wtyczek.

GitLab CI umożliwia integrację z zewnętrznymi usługami w celu rozszerzenia funkcjonalności. Biblioteka wtyczek/rozszerzeń jest mniejsza w porównaniu do Jenkinsa, ale stale się powiększa. GitLab CI, jako część GitLab, posiada wiele wbudowanych funkcji.

Użytkownicy mogą dostosowywać przepływ pracy za pomocą pliku .gitlab-ci.yml. W pliku tym można zdefiniować wszystkie zadania, etapy i kroki potoku.

Potoki

Jenkins umożliwia korzystanie zarówno z deklaratywnej, jak i skryptowej składni potoków. Oba podejścia mogą być używane z interfejsem internetowym lub plikiem Jenkinsfile. Plik Jenkinsfile jest najczęściej preferowaną metodą. Definicje potoków mogą być przechowywane w plikach Jenkinsfile w repozytorium z kodem źródłowym. Platforma posiada wbudowany interfejs GUI do monitorowania i wizualizacji wykonania potoków.

W GitLab CI potoki definiowane są w pliku .gitlab-ci.yml. Ten plik konfiguracyjny oparty na YML jest przechowywany w głównym katalogu projektu. Plik gitlab-ci.yml cechuje się prostą składnią i zawiera zbiór poleceń oraz predefiniowanych słów kluczowych, które obejmują najczęściej wykorzystywane zadania CI/CD. GitLab CI integruje się z innymi funkcjami GitLab, umożliwiając zarządzanie kodem źródłowym, śledzenie problemów, przeglądy kodu, żądania scalania i inne.

Jak zainstalować Jenkinsa

Przed instalacją Jenkinsa na komputerze wymagane jest środowisko Java Runtime Environment (JRE). W zależności od systemu operacyjnego, pobierz Javę ze strony producenta. W przykładzie zostanie użyty system Ubuntu.

Jeśli używasz innego systemu operacyjnego, skorzystaj z artykułu na temat instalacji Jenkinsa, aby poznać kroki właściwe dla Twojego systemu.

W przypadku Ubuntu wykonaj następujące kroki:

Krok 1: Sprawdź, czy środowisko JRE jest zainstalowane. Wprowadź polecenie:

java -version

W przypadku poprawnej instalacji wyświetlona zostanie informacja podobna do tej:

W przykładzie zainstalowana jest wersja „17.0.6”, ale może być wyższa.

Krok 2: Zaimportuj klucz GPG do systemu za pomocą tego polecenia:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null

Krok 3: Dodaj repozytorium oprogramowania Jenkinsa za pomocą tego polecenia:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

Krok 4: Zaktualizuj system za pomocą tego polecenia:

sudo apt update

Krok 5: Zainstaluj Jenkinsa za pomocą tego polecenia:

sudo apt install jenkins -y

Krok 6: Sprawdź, czy Jenkins jest zainstalowany, wpisując to polecenie:

sudo systemctl status jenkins

W przypadku poprawnej instalacji wyświetlona zostanie informacja podobna do tej:

Naciśnij ctrl + z na klawiaturze, aby wyjść i przejść do następnego kroku.

Krok 7: Skonfiguruj zaporę ogniową i Jenkins w systemie, wpisując to polecenie:

sudo ufw allow 8080

Krok 8: Sprawdź status:

sudo ufw status

Krok 9: Jeśli status w poprzednim kroku to „Nieaktywny”, włącz zaporę za pomocą tego polecenia:

sudo ufw enable

Krok 10: Otwórz Jenkinsa w przeglądarce internetowej, wpisując:

http://localhost:8080

Krok 11: Aby uzyskać hasło administratora, wprowadź to polecenie:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Krok 12: Odblokuj Jenkinsa.

Skopiuj hasło z terminala i wklej je w oknie „Hasło administratora”, które otworzyłeś w kroku dziesiątym. Następnie naciśnij przycisk „Kontynuuj”.

W nowym oknie pojawi się monit o zainstalowanie wtyczek. Jeśli na tym etapie nie potrzebujesz dodatkowych wtyczek, wybierz domyślne i przejdź dalej.

Krok 13: Utwórz konto użytkownika i kliknij „Zapisz i kontynuuj”.

Krok 14: Skonfiguruj początkową konfigurację i zacznij korzystać z Jenkinsa.

Jak zainstalować GitLab CI

GitLab CI jest integralną częścią GitLab. Aby korzystać z GitLab CI, należy zainstalować GitLab Runner, który jest agentem odpowiedzialnym za wykonywanie zadań przed ich przesłaniem do GitLab.

W przykładzie zostanie użyty system Ubuntu. W przypadku innego systemu operacyjnego sprawdź oficjalną dokumentację. W przypadku Ubuntu wykonaj następujące kroki:

Krok 1: Zaktualizuj i skonfiguruj system:

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

Możesz skonfigurować obsługę poczty e-mail do otrzymywania powiadomień lub pominąć ten krok.

Krok 2: Dodaj repozytorium pakietów GitLab:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

Krok 3: Skonfiguruj konto GitLab.

Istnieje kilka opcji hostingu GitLab. Postępuj zgodnie z instrukcjami, w zależności od wybranej opcji.

Krok 4: Sprawdź nazwę hosta i zaloguj się. Aby uzyskać hasło, wprowadź to polecenie w terminalu:

/etc/gitlab/initial_root_password 

Opcjonalnie: Ustaw preferencje dotyczące komunikacji, aby otrzymywać informacje o produktach i wiadomości od GitLab.

Ograniczenia Jenkinsa

  • Konfiguracja Jenkinsa w przypadku dużych projektów może być złożona.
  • W przypadku nieprawidłowej konfiguracji Jenkins może być narażony na ataki bezpieczeństwa.
  • Skalowanie dużych projektów w Jenkinsie może być trudne.
  • Jenkins może wymagać dużej ilości zasobów podczas wykonywania wielu jednoczesnych kompilacji.

Ograniczenia GitLab CI

  • Konfiguracja GitLab CI w przypadku dużych projektów może być skomplikowana.
  • Zależność od GitLab.
  • Skalowalność może być problemem w przypadku dużych projektów.
  • Ekosystem wtyczek jest mniejszy w porównaniu z Jenkinsem.

Opinia autora

Zarówno GitLab CI, jak i Jenkins to doskonałe narzędzia w cyklu życia oprogramowania. Jeśli zależy mi na bardziej dojrzałej platformie i pełnej kontroli nad dostosowywaniem, wybieram Jenkinsa. Z drugiej strony, GitLab CI jest moim wyborem, gdy preferuję intuicyjny interfejs użytkownika oraz korzystam z integracji z GitLab.

Mamy nadzieję, że ten artykuł pomógł Ci zrozumieć różnice między GitLab CI a Jenkinsem. Choć oba narzędzia pełnią podobne funkcje, różnią się pod względem cech i sposobu realizacji zadań. Wybór między nimi zależy od charakteru projektu, umiejętności, preferencji oraz indywidualnych potrzeb.

Zachęcamy do zapoznania się z platformami hostingowymi dla Jenkinsa.


newsblog.pl