V posledním desetiletí došlo k významnému pokroku ve vývoji nástrojů pro průběžnou integraci (Continuous Integration, CI) a průběžné dodávání (Continuous Delivery, CD). Rozvoj technologií integrace vývoje a provozu softwaru (Development Operations, DevOps) vedl k rychlému zvýšení poptávky po nástrojích CI/CD. Existující řešení se neustále zlepšují, snaží se držet krok s dobou, a na trhu kontrolních kvalit softwaru (Quality Assurance, QA) se neustále objevují nové produkty. Při tak bohatém výběru se stává výběr vhodného nástroje obtížným úkolem.
Mezi všemi existujícími nástroji CI/CD existují dva projekty, na které rozhodně stojí za to se zaměřit, pokud hledáte něco v této oblasti. Jedná se o Jenkins a nástroj GitLab CI/CD, který je součástí platformy GitLab. Jenkins má více než hvězd na GitHubu. Repozitář GitLab na gitlab.com získal něco málo přes hvězd. Pokud porovnáme popularitu repozitářů, ukáže se, že Jenkins získal 8krát více hvězd než platforma, do které GitLab CI/CD patří. Při výběru nástroje CI/CD to však není jediný ukazatel, na který bychom měli dávat pozor. Existuje řada dalších faktorů, což vysvětluje, proč se v mnoha srovnáních Jenkins a GitLab CI/CD ocitají velmi blízko u sebe.
Vezměme například statistiky z platformy G2, která shromažďuje recenze různých produktů a hodnocení uživatelů. Zde je průměrné hodnocení , které bylo vypočítáno na základě 288 recenzí, 4,3 hvězdy. A o tady máme 270 recenzí, průměrné hodnocení tohoto nástroje je 4,4 hvězdy. Nebudeme se mýlit, když řekneme, že Jenkins a GitLab CI/CD soutěží navzájem na rovných podmínkách. Zajímavé je, že projekt Jenkins vznikl v roce 2011 a od té doby se stal oblíbeným nástrojem testerů. Nicméně projekt GitLab CI/CD, spuštěný v roce 2014, si velmi brzo získal vysoké pozice díky pokročilým možnostem, které tato platforma nabízí.
Pokud mluvíme o popularitě Jenkins ve srovnání s jinými podobnými platformami, je třeba zmínit, že jsme zveřejnili článek, ve kterém byly porovnány platformy Travis CI a Jenkins, a uskutečnili jsme anketu. Účastnilo se jí 85 uživatelů. Respondenti byli vyzváni, aby si vybrali CI/CD nástroj, který se jim líbí nejvíce. 79 % zvolilo Jenkins, 5 % zvolilo Travis CI a 16 % uvedlo, že preferují jiné nástroje.

Výsledky ankety
Mezi jinými CI/CD nástroji byl nejčastěji zmiňován GitLab CI/CD.
Pokud se vážně zabýváte DevOps, je důležité pečlivě vybírat odpovídající nástroje, přičemž je nutné brát v úvahu specifika projektu, jeho rozpočet a další požadavky. Abychom vám pomohli učinit správný výběr, plánujeme provést analýzu Jenkins a GitLab CI/CD. Doufáme, že vám to pomůže při rozhodování.
Seznámení s Jenkins

– je široce známý, flexibilní CI/CD nástroj určený k automatizaci mnoha úkolů spojených s softwarovými projekty. Jenkins je napsán výhradně v Javě a je vydáván pod licencí MIT. Disponuje silnou sadou funkcí zaměřených na automatizaci úloh spojených se sestavováním, testováním, nasazením, integrací a vydáním softwaru. Tento nástroj může být používán v různých operačních systémech, mezi které patří macOS, Windows a mnoho distribucí Linuxu, například OpenSUSE, Ubuntu a Red Hat. Existují instalační balíčky Jenkins určené pro různé OS, tento nástroj lze nainstalovat i do Dockeru a na jakýkoliv systém, kde je JRE (Java Runtime Environment).
Vývojáři Jenkins vytvořili také další projekt, Jenkins X, který je určen k práci v prostředí Kubernetes. V Jenkins X jsou integrovány Helm, server Jenkins CI/CD, Kubernetes a další nástroje určené k vytváření CI/CD pipeline, které odpovídají nejlepším praktikám DevOps. Například se zde využívá GitOps.
Mezi výhody Jenkins lze také připsat skutečnost, že jeho skripty jsou velmi dobře strukturované, srozumitelné a snadno čitelné. Tým Jenkins vytvořil přibližně 1000 pluginů, které usnadňují interakci Jenkins s různými technologiemi. Ve skriptech lze využívat autentifikační systémy, což například umožňuje připojování k různým uzavřeným systémům.
Během práce s Jenkinsovým kanálem můžete sledovat, co se děje v každém jeho kroku, a zda jednotlivé fáze práce byly úspěšně dokončeny, či nikoli. Toho lze dosáhnout nejen pomocí grafického rozhraní, ale také využitím možností terminálu.
Vlastnosti Jenkinsu
Mezi široce známými vlastnostmi Jenkinsu lze zmínit jednoduchost nastavení, vysokou úroveň automatizace různých operací a skvělou dokumentaci. Pokud jde o řešení DevOps úkolů, Jenkins se považuje za velmi spolehlivý nástroj, který obvykle nevyžaduje pečlivé sledování celého procesu zpracování projektu. U jiných CI/CD nástrojů tomu tak není. Pojďme si promluvit o některých nejdůležitějších funkcích Jenkinsu.
▍1. Zdarma, open source, podpora mnoha platforem
Jenkins může fungovat na platformách macOS, Windows a Linux. Může také pracovat v prostředí Docker, což umožňuje rychlé a jednotné provádění automatizovaných úkolů. Tento nástroj navíc může být spuštěn jako servlet v kontejnerech podporujících Javu, jako jsou Apache Tomcat a GlassFish. Instalace Jenkinsu je kvalitně .
▍2. Rozvinutý ekosystém pluginů
Ekosystém pluginů Jenkinsu vypadá mnohem rozvinutěji ve srovnání s ekosystémy připojitelných modulů jiných CI/CD nástrojů. V současnosti existuje více než 1500 pluginů pro Jenkins. Tyto pluginy jsou zaměřeny na řešení širokého spektra úkolů a umožňují automatizaci různých projektů. Bohatství výběru bezplatných připojitelných modulů znamená, že uživatel Jenkinsu nemá naléhavou potřebu kupovat drahé placené pluginy. Existuje možnost Jenkins s mnoha DevOps nástroji.
▍3. Snadná instalace a nastavení
Jenkins je poměrně jednoduchý na instalaci a nastavení. Proces aktualizace systému je také velmi pohodlný. Zde opět stojí za zmínku kvalita dokumentace, ve které lze nalézt odpovědi na různé otázky týkající se instalace a nastavení Jenkinsu.
▍4. Přátelská komunita
Jak již bylo řečeno, Jenkins je open-source projekt, jehož ekosystém zahrnuje obrovské množství pluginů. Kolem Jenkins vzniklo velké společenství uživatelů a vývojářů, kteří přispívají k rozvoji projektu. Společenství je jedním z faktorů, které přispívají k rozvoji Jenkins.
▍5. Přítomnost REST API
Během práce s Jenkins můžete využívat REST API, což rozšiřuje možnosti systému. API pro vzdálený přístup k systému je dostupné ve třech variantách: XML, JSON s podporou JSONP, Python. stránka dokumentace, která zveřejňuje podrobnosti o práci s REST API Jenkins.
▍6. Podpora paralelního provádění úloh
Jenkins podporuje paralelizaci DevOps úloh. Lze jej snadno integrovat s příslušnými nástroji a získávat oznámení o výsledcích provádění úloh. Provádění testování kódu lze urychlit organizací paralelní sestavy projektu pomocí různých virtuálních strojů.
▍7. Podpora práce v distribuovaných prostředích
Jenkins umožňuje organizovat distribuované sestavy s využitím několika počítačů. Tato možnost se uplatňuje ve velkých projektech a používá schéma práce, podle něhož existuje jeden hlavní server Jenkins a několik podřízených strojů. Podřízené stroje mohou být využity i v situacích, kdy je třeba organizovat testování projektu v různých prostředích. Tyto možnosti výhodně odlišují Jenkins od jiných podobných projektů.
Seznámení s GitLab

může být považován za jeden z nejnovějších a nejoblíbenějších nástrojů mezi DevOps inženýry. Tento bezplatný open-source nástroj je integrován do systému správy verzí GitLab. Platforma GitLab má komunitní verzi, která podporuje správu repozitářů, nástroje pro sledování problémů, organizaci code review a mechanismy zaměřené na vytváření dokumentace. Firmy mohou instalovat GitLab lokálně, propojující tento systém s Active Directory a LDAP servery pro zajištění bezpečné autorizace a autentizace uživatelů.
videonávod, který vám pomůže zjistit, jak vytvářet CI/CD kanály pomocí funkcí GitLab CI/CD.
Původně byl GitLab CI/CD vydán jako samostatný projekt, ale v roce 2015 byl tento nástroj integrován do GitLab 8.0. Samostatný server GitLab CI/CD může podporovat práci více než 25 000 uživatelů. Na základě takových serverů lze vytvářet systémy s vysokou dostupností.
GitLab CI/CD a hlavní projekt GitLab jsou napsané v Ruby a Go. Jsou vydány pod licencí MIT. GitLab CI/CD, kromě běžných možností CI/CD nástrojů, také podporuje další funkce, které se například týkají plánování úloh.
Integrace GitLab CI/CD do projektu je velmi jednoduchá. Při použití GitLab CI/CD je proces zpracování kódu projektu rozdělen na fáze, přičemž každá z nich může obsahovat několik úloh, které se vykonávají v určitém pořadí. Úlohy lze jemně doladit.
Úlohy mohou být prováděny paralelně. Po nastavení sekvence fází a úloh je CI/CD pipeline připravena k provozu. Můžete sledovat její průběh a sledovat stav úloh. Výsledkem je, že používání GitLab CI/CD je velmi pohodlné, možná pohodlnější než u jiných podobných nástrojů.
Vlastnosti GitLab CI/CD a GitLab
GitLab CI/CD je jedním z nejpopulárnějších DevOps nástrojů. Projekt se vyznačuje kvalitní dokumentací, jeho možnosti jsou snadno a pohodlně použitelné. Pokud ještě nejste obeznámeni s GitLab CI/CD, následující seznam funkcí tohoto nástroje vám poskytne obecný přehled o tom, co od něj můžete očekávat. Je třeba poznamenat, že mnohé z těchto funkcí se vztahují k samotné platformě GitLab, do které je GitLab CI/CD integrován.
▍1. Popularita
GitLab CI/CD je relativně nový nástroj, který našel široké uplatnění. GitLab CI/CD se postupně stal extrémně populárním CI/CD nástrojem, který se používá pro automatizované testování a nasazení softwaru. Je snadné ho nastavit. Navíc je to bezplatný CI/CD nástroj integrovaný do platformy GitLab.
▍2. Podpora GitLab Pages a Jekyll
Jekyll je generátor statických stránek, který lze použít v rámci systému GitLab Pages pro vytváření webových stránek založených na repozitářích GitLab. Systém bere zdrojový materiál a na jeho základě generuje hotovou statickou webovou stránku. Vzhled a funkce takových stránek lze řídit úpravou souboru _config.yml, používaný Jekyll.
▍3. Možnosti plánování projektů
Díky možnosti plánování fází projektů se zvyšuje pohodlí při sledování problémů a jejich seskupování. To umožňuje efektivně řídit organizaci prací na projektech a plánovat jejich provedení na konkrétní datum.
▍4. Automatické škálování CI runnerů
Díky automatickému škálování runnerů, odpovědných za provádění konkrétních úkolů, lze značně ušetřit na nákladech na pronájem serverových zdrojů. To je zvlášť důležité, zejména pokud jde o prostředí, kde se testování projektů provádí paralelně. Kromě toho je to důležité pro větší projekty složené z několika repozitářů.
▍5. Nástroje pro sledování problémů
Silné možnosti sledování problémů GitLab vedly k tomu, že tuto platformu používá mnoho open-source projektů. GitLab CI/CD umožňuje provádět paralelní testování různých větví kódu. Výsledky testování se pohodlně analyzují v uživatelském rozhraní systému. To výrazně odlišuje GitLab CI/CD od Jenkins.
▍6. Omezování přístupu k repozitářům
Platforma GitLab podporuje omezování přístupu k repozitářům. Například těm, kteří spolupracují na projektu v nějakém repozitáři, lze přidělit práva odpovídající jejich rolím. To je zvlášť důležité pro firemní projekty.
▍7. Aktivní podpora komunity
Kolem GitLab se vytvořila aktivní komunita, která přispívá k rozvoji této platformy a jejích nástrojů, zejména - GitLab CI/CD. Hluboká integrace GitLab CI/CD a GitLab usnadňuje nalezení odpovědí na otázky, které se během práce s GitLab CI/CD objevují.
▍8. Podpora práce s různými systémy pro správu verzí
GitLab CI/CD je systém, který dokáže pracovat nejen s kódem umístěným v repozitářích GitLab. Například, kód může být uchováván v GitHub repozitáři, zatímco CI/CD pipeline může být organizována na bázi GitLab s využitím GitLab CI/CD.
Srovnání Jenkins a GitLab CI/CD
Jenkins a GitLab CI/CD jsou velmi dobré nástroje, přičemž každý z nich dokáže zaručit normální fungování CI/CD pipeline. Ale když je srovnáme, ukáže se, že i když jsou si mnohém podobné, v něčem se liší.
Vlastnosti
Jenkins
GitLab CI/CD
Otevřený nebo uzavřený kód
Otevřený kód
Otevřený kód
Instalace
Je vyžadován.
Není nutné, protože je to zabudovaná funkce platformy GitLab.
Jedinečné vlastnosti
Podpora pluginů.
Hluboká integrace do systému správy verzí.
Podpora
Není k dispozici.
Je k dispozici.
Instalace a konfigurace
Nepředstavuje žádné obtíže
Nepředstavuje žádné obtíže
Samostatné nasazení systému
To je jediná možnost použití systému.
Podporováno.
Vytváření CI/CD pipeline
Podporováno, používá se Jenkins Pipeline.
Podporováno.
Monitorování výkonu aplikací
Není k dispozici.
Je k dispozici.
Ekosystém
Existuje více než 1000 pluginů.
Systém se vyvíjí v rámci GitLab.
API
Podporuje rozvinutý systém API.
Nabízí API pro hlubší integraci do projektů.
Podpora JavaScriptu
Je k dispozici.
Je k dispozici.
Integrace s jinými nástroji
Podporována integrace s jinými nástroji a platformami (Slack, GitHub).
Mnoho prostředků pro integraci se třetími systémy, konkrétně s GitHub a Kubernetes.
Kontrola kvality kódu
Podporováno — pomocí pluginu SonarQube a dalších pluginů.
Podporováno.
Rozdíly mezi Jenkins a GitLab CI/CD
Popišme a porovnejme Jenkins a GitLab CI/CD, zaměřme se na rozdíly těchto DevOps nástrojů. Znalost těchto rozdílů nám umožní pochopit, kdo dává přednost jednomu z těchto nástrojů před druhým.
- GitLab CI/CD může plně řídit Git repozitáře. To zahrnuje správu větví repozitářů a některé další funkce. Jenkins, i když umí pracovat s repozitáři, nenabízí stejnou úroveň kontroly nad nimi jako GitLab CI/CD.
- Jenkins je bezplatný open-source projekt. Ten, kdo si ho vybere, ho nasazuje sám. GitLab CI/CD je součástí platformy GitLab, což je hotové řešení.
- GitLab CI/CD podporuje rozvinuté nástroje pro správu úloh, fungující na úrovni projektů. Tato stránka Jenkins je slabší.
Jenkins a GitLab CI/CD: silné a slabé stránky
Nyní máte určité povědomí o Jenkins a GitLab CI/CD. Abychom vám pomohli lépe se seznámit s těmito nástroji, podívejme se na jejich silné a slabé stránky. Doufáme, že jste již učinili rozhodnutí, který konkrétní nástroj potřebujete. Rádi bychom, aby vám tato sekce poskytla zpětnou vazbu.
▍Silné stránky Jenkins
- Velké množství pluginů.
- Úplná kontrola nad instalací nástroje.
- Jednoduché ladění runnerů.
- Jednoduché nastavení uzlů.
- Jednoduché nasazení kódu.
- Velmi dobrý systém správy přihlašovacích informací.
- Flexibilita a univerzálnost.
- Podpora různých programovacích jazyků.
- Systém je intuitivně srozumitelný.
▍Slabé stránky Jenkins
- Při používání pluginů mohou nastat obtíže.
- Při používání Jenkins v malých projektech mohou být časové nároky na vlastní nastavení nepřiměřeně vysoké.
- Nedostatek obecných analytických informací o CI/CD pipelinech.
▍Silné stránky GitLab CI/CD
- Dobrá integrace s Dockerem.
- Jednoduché škálování runnerů.
- Paralelní vykonávání úloh v rámci CI/CD pipeline.
- Použití modelu orientovaného acyklického grafu při nastavování vztahů úloh.
- Vysoká úroveň škálovatelnosti díky možnosti paralelního vykonávání runnerů.
- Snadnost přidávání úloh.
- Jednoduché řešení konfliktů.
- Spolehlivý bezpečnostní systém.
▍Slabé stránky GitLab CI/CD
- Pro každou úlohu je nutné popisovat a nahrávat/vyvážet artefakty.
- Nelze otestovat výsledky sloučení větví před jejich skutečným sloučením.
- Při popisu fází CI/CD pipeline není možné zatím vyčlenit jednotlivé etapy.
Závěry
Jak Jenkins, tak GitLab CI/CD mají své silné a slabé stránky. Odpověď na otázku, co vybrat, závisí na potřebách a specifikách konkrétního projektu. Každý z dnes zkoumaných CI/CD nástrojů má své specifické vlastnosti, i když tyto nástroje byly vyvinuty k řešení stejného úkolu. Jenkins je autonomní nástroj, zatímco GitLab CI/CD je součástí platformy určené pro spolupráci na kódu.
Při výběru CI/CD systému je třeba kromě jeho možností zohlednit také náklady, které s ním mohou souviset, a to, s čím jsou DevOps inženýři zvyklí pracovat.
Jaké CI/CD nástroje používáte?
Zdroj: habr.com
