GitLab CI vs. Jenkins: Rozdíly a podobnosti [2023]

Vývoj softwaru je proces plný kroků. Začíná pečlivým plánováním, důkladnou analýzou požadavků, architektonickým návrhem, samotným vývojem, důsledným testováním, hladkým nasazením a následnou údržbou. Na této cestě se softwaroví vývojáři neobejdou bez rozmanité sady nástrojů.

V oblasti kontinuální integrace a kontinuálního doručování (CI/CD) se jména jako GitLab CI a Jenkins skví jako přední hráči. CI/CD představuje souhrn automatizovaných procesů, které zefektivňují vývoj softwaru.

Tento článek se zaměří na srovnání GitLab CI a Jenkins. Představí každý z těchto nástrojů, objasní, jak fungují, a porovná jejich klíčové charakteristiky.

Co je GitLab CI?

GitLab Continuous Integration and Delivery je nástroj DevOps, který usnadňuje automatizaci kroků nezbytných pro sestavení, otestování a nasazení vašeho kódu do produkčního prostředí.

GitLab CI se skládá ze dvou základních částí: kontinuální integrace (CI) a kontinuální doručování/nasazení (CD).

Kontinuální integrace se stará o automatizaci všech procesů sestavení. Poskytuje zpětnou vazbu prostřednictvím revizí kódu a automatizuje testy zabezpečení a kvality. Výsledkem je vytvoření balíčku připraveného k nasazení do produkčního prostředí.

Kontinuální doručování v GitLab CI automaticky zajišťuje infrastrukturu a spravuje ticketing, úpravy infrastruktury a verzování. Umožňuje postupné nasazování kódu, ověřování a monitorování všech provedených změn. V případě potřeby se lze vrátit ke starším verzím.

Spojením těchto dvou funkcí můžete automatizovat celý životní cyklus vývoje softwaru (SDLC) s minimálním nutným manuálním zásahem.

Stručně řečeno, GitLab CI slouží k:

  • Ukládání a správě kódu
  • Automatizaci CI/CD pipeline
  • Sledování problémů
  • Zabezpečení kódu
  • Spolupráci

Výhody používání GitLab CI

  • Zvýšená rychlost: GitLab CI eliminuje nutnost manuálních procesů, jako je sestavování, testování a nasazování kódu.
  • Vylepšená kvalita kódu: S GitLab CI můžete odhalit chyby a nedostatky v kódu dříve, než se dostanou do produkce.
  • Zabezpečení: GitLab CI nabízí řadu bezpečnostních funkcí, včetně skenování zranitelností, správy tajných informací a kontroly kódu, čímž snižuje riziko hackerských útoků.
  • Flexibilita: GitLab CI je přizpůsobitelný potřebám vašeho vývojového týmu. Lze jej použít s různými programovacími jazyky a frameworky.
  • Automatizované testování: Testy se nemusí spouštět ručně, protože lze napsat skripty pro automatické vytváření a spouštění testů.

Co je Jenkins?

Jenkins je rozšiřitelný automatizační server. Tento open-source nástroj umožňuje uživatelům spravovat a budovat pipeline kontinuální integrace a kontinuálního doručování (CI/CD). Jenkins je oblíbený mezi DevOps inženýry a softwarovými vývojáři, protože přispívá ke zlepšení kvality softwaru, spolehlivosti a rychlosti doručování.

Jenkins provádí řadu „úkolů“ nebo kroků v pipeline. Úloha se skládá z několika kroků, které jsou prováděny postupně. Krok v Jenkins může zahrnovat sestavení, testování, nasazení nebo jakýkoli jiný automatizovatelný úkol v rámci životního cyklu vývoje softwaru.

Použití Jenkins lze shrnout takto:

  • Kontinuální integrace
  • Kontinuální doručování
  • Automatizované testování
  • Monitorování a vytváření reportů
  • Skenování kódu
  • Plánování úloh

Výhody používání Jenkins

  • Škálovatelnost: Jenkins se hodí jak pro malé, tak i pro rozsáhlé aplikace.
  • Snadná konfigurace: Jenkins má jednoduchý proces konfigurace s dostatkem dostupných zdrojů.
  • Velká komunita: Jenkins existuje téměř dvě desetiletí a získal si širokou komunitu.
  • Různorodé pluginy: Funkčnost Jenkins lze rozšířit pomocí široké škály dostupných pluginů.
  • Umožňuje paralelní provádění úloh: S Jenkins můžete provádět několik úloh současně, což šetří čas.

Podobnosti GitLab CI a Jenkins

  • Oba nástroje podporují kontinuální integraci a kontinuální doručování.
  • Oba jsou open-source.
  • Oba mají velkou a aktivní komunitu uživatelů.
  • Oba podporují širokou škálu programovacích jazyků a frameworků.
  • Oba automatizují různé úlohy v rámci životního cyklu vývoje softwaru.
  • Oba disponují rozsáhlým ekosystémem pluginů a rozšíření.

GitLab CI vs. Jenkins: Srovnání funkcí

Funkce GitLab CI Jenkins
Open-source Ano Ano
Podpora jazyků Mnoho jazyků Mnoho jazyků
Cena Většina funkcí je dostupná v bezplatném tarifu. K dispozici jsou i placené tarify s pokročilejšími funkcemi. Zdarma, s možnostmi rozšíření pomocí pluginů.
Stáří platformy Relativně nová platforma, vznikla v roce 2014. Jenkins vznikl jako Hudson, v roce 2011 se oddělil a přejmenoval na Jenkins.
Snadnost použití Intuitivní, snadné použití. Pro začátečníky může být složitější.
Hosting Interní i externí Interní i externí
Předpoklady Node.JS, Git, Ruby, Go Java Runtime Environment

GitLab CI vs. Jenkins: Podrobné srovnání

Ačkoli sdílí podobnosti, GitLab a Jenkins se liší ve způsobu řízení CI/CD procesů. Zde jsou klíčové rozdíly:

Architektura

Jenkins využívá architekturu master-worker pro správu sestavení.

  • Jenkins master plánuje sestavení úloh a distribuuje je pracovníkům k provedení. Monitoruje stav pracovníků a shromažďuje výsledky na webovém řídicím panelu.
  • Jenkins worker je spustitelný soubor Java, který běží na vzdáleném počítači. Poslouchá požadavky od master serveru a provádí je. Můžete mít i více než 100 uzlů a přidávat/odebírat pracovníky podle potřeby.

GitLab CI je součástí GitLabu, webového rozhraní pro správu repozitářů, pull requestů a dalších funkcí. GitLab CI se skládá z následujících komponent:

  • Nástroj GitLab CI/CD umožňuje spravovat sestavení.
  • GitLab Runners provádějí všechny úlohy CI. Tento lehký proces lze spustit v cloudu nebo na lokálním počítači.
  • Konfigurace CI/CD pipeline jsou definovány v souboru `.gitlab-ci.yml`. Tento soubor specifikuje všechny úlohy, fáze a kroky v pipeline.

Pluginy

Jenkins má více než 1800 komunitních pluginů. Tyto pluginy pokrývají různé oblasti jako sestavování, nasazování a automatizaci projektů. Uživatelé si mohou přizpůsobit CI/CD pipeline a rozšířit funkčnost Jenkinse. Vývojáři si mohou vytvářet vlastní pluginy díky rozsáhlé dokumentaci a přidávat je do adresáře pluginů. Jenkins má rozsáhlou a aktivní komunitu, která se podílí na tvorbě pluginů.

GitLab CI umožňuje integraci s externími službami pro vylepšenou funkčnost. Jeho knihovna pluginů a rozšíření je menší než u Jenkinse, ale neustále se rozšiřuje. Jelikož je GitLab CI součástí GitLabu, je dodáván s mnoha vestavěnými funkcemi. Uživatelé si mohou přizpůsobit pracovní postupy pomocí souboru `.gitlab-ci.yml`, ve kterém definují všechny úlohy, fáze a kroky.

Pipeline

Jenkins umožňuje použití deklarativní i skriptované syntaxe pro pipeline. Lze použít kterýkoli z těchto přístupů přes webové rozhraní nebo pomocí souboru `Jenkinsfile`. Ukládání pipeline jako `Jenkinsfile` v repozitáři, společně se zdrojovým kódem, je výhodnější. Platforma má vestavěné webové GUI pro vizualizaci a sledování spouštění.

GitLab CI používá soubor `.gitlab-ci.yml` pro definování všech pipeline. Tento konfigurační soubor založený na YML je uložen v kořenovém adresáři projektu. Soubor `gitlab-ci.yml` je známý svou jednoduchou syntaxí s řadou příkazů a předdefinovaných klíčových slov pokrývajících nejběžnější úlohy CI/CD. GitLab CI se integruje s ostatními funkcemi GitLabu, jako je správa zdrojového kódu, sledování problémů, revize kódu, pull requesty atd.

Jak nainstalovat Jenkins

Před instalací Jenkins na váš počítač potřebujete Java Runtime Environment (JRE). Stáhněte si Javu z oficiálních stránek podle vašeho operačního systému. Pro demonstraci budu používat Ubuntu.

Pokud používáte jiný operační systém, přečtěte si článek o instalaci Jenkins a postupujte podle kroků.

Pro Ubuntu postupujte následovně:

Krok 1: Zkontrolujte instalaci JRE příkazem:

java -version

Pokud je Java nainstalována, měli byste vidět výstup podobný následujícímu:

Verze se může lišit.

Krok 2: Importujte GPG klíč pomocí příkazu:

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

Krok 3: Přidejte repozitář Jenkins pomocí příkazu:

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: Aktualizujte systém příkazem:

sudo apt update

Krok 5: Nainstalujte Jenkins příkazem:

sudo apt install jenkins -y

Krok 6: Zkontrolujte, zda je Jenkins nainstalován příkazem:

sudo systemctl status jenkins

Pokud je instalace v pořádku, uvidíte výstup podobný následujícímu:

Stisknutím `ctrl+z` se vrátíte k dalšímu kroku.

Krok 7: Upravte firewall pro Jenkins použitím příkazu:

sudo ufw allow 8080

Krok 8: Zkontrolujte stav pomocí příkazu:

sudo ufw status

Krok 9: Pokud je stav „inactive“, povolte ho pomocí příkazu:

sudo ufw enable

Krok 10: Otevřete Jenkins ve webovém prohlížeči zadáním:

http://localhost:8080

Krok 11: Získejte heslo administrátora příkazem:

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

Krok 12: Odemkněte Jenkins. Zkopírujte heslo z terminálu, vložte ho do dialogového okna a pokračujte.

V dalším okně budete vyzváni k instalaci pluginů. Prozatím můžete vybrat výchozí a pokračovat.

Krok 13: Vytvořte si účet a uložte nastavení.

Krok 14: Nastavte okamžitou konfiguraci a začněte používat Jenkins.

Jak nainstalovat GitLab CI

GitLab CI je součástí GitLabu. Pro získání GitLab CI musíte nejprve nainstalovat GitLab Runner, agenta pro spouštění úloh. Pro demonstraci použiji Ubuntu. Pokud máte jiný operační systém, podívejte se do oficiální dokumentace.

Pro Ubuntu postupujte následovně:

Krok 1: Aktualizujte a nakonfigurujte systém.

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

Můžete konfigurovat e-mail pro zasílání aktualizací nebo tento krok přeskočit.

Krok 2: Přidejte repozitář balíčků GitLab:

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

Krok 3: Nakonfigurujte GitLab účet. Postupujte podle pokynů podle vašeho způsobu hostování GitLab.

Krok 4: Vyhledejte název hostitele a přihlaste se. Heslo získáte příkazem:

/etc/gitlab/initial_root_password 

Volitelné: Nastavte si předvolby pro zasílání aktualizací a novinek z GitLabu.

Omezení Jenkins

  • Konfigurace Jenkins pro rozsáhlé projekty může být komplikovaná.
  • Jenkins, pokud není správně nastaven, může být náchylný k bezpečnostním rizikům.
  • Škálování rozsáhlých projektů s Jenkins může být obtížné.
  • Jenkins může spotřebovat velké množství zdrojů při spouštění mnoha souběžných sestavení.

Omezení Gitlab CI

  • GitLab CI může být pro velké projekty komplexní.
  • Je závislý na platformě GitLab.
  • Škálovatelnost může být pro rozsáhlé projekty problém.
  • Ekosystém pluginů je menší ve srovnání s Jenkins.

Názor autora

GitLab CI i Jenkins jsou vynikající nástroje pro vývoj softwaru. Pro pokročilejší platformu s úplnou kontrolou nad přizpůsobením bych volil Jenkins. Pro uživatelsky přívětivé rozhraní a integraci v rámci GitLab bych si vybral GitLab CI.

Věřím, že nyní znáte rozdíly mezi GitLab CI a Jenkins. Oba nástroje mají podobný účel, ale liší se funkcemi a jejich dosažením. Volba mezi nimi záleží na povaze projektu, vašich dovednostech, preferencích a požadavcích.

Nyní se můžete podívat na platformy pro hosting Jenkins.