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