Bitka između Jenkins i GitLab CI/CD

U posljednjem desetljeću postignuti su značajni uspjesi u razvoju alata za kontinuiranu integraciju (Continuous Integration, CI) i kontinuirano isporučivanje (Continuous Delivery, CD). Razvoj tehnologija integracije razvoja i operacija softvera (Development Operations, DevOps) doveo je do brzog rasta potražnje za CI/CD alatima. Postojeća rješenja se neprekidno poboljšavaju, nastojeći držati korak s vremenom, izlaze nove verzije, a u svijetu osiguranja kvalitete softvera (Quality Assurance, QA) neprestano se pojavljuje mnoštvo novih proizvoda. S obzirom na takav bogat izbor, odabir odgovarajućeg alata postaje izazovna zadaća.

Bitka između Jenkins i GitLab CI/CD

Među svim postojećim CI/CD alatima postoje dva projekta na koja definitivno vrijedi obratiti pažnju onima koji traže nešto iz ove sfere. Riječ je o Jenkinsu i alatu GitLab CI/CD, koji je dio platforme GitLab. Jenkins ima više 16000 zvjezdica na GitHubu. GitLabov repozitorij na gitlab.com dobio je nešto više od 2000 zvjezdica. Ako usporedimo popularnost repozitorija, otkrio bi da Jenkins ima osam puta više zvjezdica od platforme koja uključuje GitLab CI/CD. No, pri odabiru CI/CD alata to nije jedini pokazatelj na koji treba obratiti pažnju. Ima i mnoštvo drugih, što objašnjava da se u mnogim usporedbama Jenkins i GitLab CI/CD nalaze vrlo blizu jedni drugima.

Uzmimo, na primjer, podatke s platforme G2, koja akumulira recenzije o raznim proizvodima i ocjene koje im daju korisnici. Ovdje je prosječna ocjena Jenkins, dobivena na temelju 288 recenzija, 4,3 zvjezdice. A o GitLab ima 270 recenzija, a prosječna ocjena ovog alata iznosi 4,4 zvjezdice. Ne bismo pogriješili ako bismo izjavili da Jenkins i GitLab CI/CD konkuriraju jedni drugima pod jednakim uvjetima. Zanimljivo je napomenuti da je projekt Jenkins nastao 2011. godine i od tada je omiljeni alat testera. No, projekt GitLab CI/CD, pokrenut 2014. godine, zauzeo je svoje visoke pozicije zahvaljujući naprednim mogućnostima koje ova platforma nudi.

Kada govorimo o popularnosti Jenkinsa u usporedbi s drugim sličnim platformama, treba napomenuti da smo, objavivši članak u kojem smo uspoređivali platforme Travis CI i Jenkins, organizirali anketu. U anketi je sudjelovalo 85 korisnika. Ispitanicima je ponuđeno da odaberu CI/CD alat koji im se najviše sviđa. 79% je odabralo Jenkins, 5% je odabralo Travis CI, a 16% je navelo da preferiraju druge alate.

Bitka između Jenkins i GitLab CI/CD
Rezultati ankete

Među drugim CI/CD alatima, najčešće je spominjan GitLab CI/CD.

Ako se ozbiljno bavite DevOps-om, trebate pažljivo odabrati odgovarajuće alate, uzimajući u obzir osobitosti projekta, njegov proračun i druge zahtjeve. Kako bismo vam pomogli donijeti ispravnu odluku, planiramo provesti analizu Jenkinsa i GitLab CI/CD-a. To, nadamo se, pomoći će vam u odabiru.

Upoznavanje s Jenkinsom

Bitka između Jenkins i GitLab CI/CD
Jenkins — to je široko poznat, fleksibilan CI/CD alat namijenjen automatizaciji brojnih zadatka povezanih s softverskim projektima. Jenkins je potpuno napisan u Javi i objavljen je pod MIT licencom. Ima moćan skup mogućnosti, usmjerenih na automatizaciju zadataka povezanih sa sastavljanjem, testiranjem, implementacijom, integracijom i izdavanjem softvera. Ovaj alat može se koristiti na raznim operacijskim sustavima. Među njima su macOS, Windows i brojni Linux distribucije, kao što su OpenSUSE, Ubuntu i Red Hat. Postoje instalacijski paketi Jenkinsa namijenjeni raznim OS-ima, a ovaj alat se može instalirati u Docker i u svemu gdje postoji JRE (Java Runtime Environment).

Razvijači Jenkinsa kreirali su još jedan projekt, Jenkins X, koji je namijenjen radu u Kubernetes okruženju. U Jenkinsa X integrirani su Helm, Jenkins CI/CD server, Kubernetes i drugi alati koji su namijenjeni izradi CI/CD cjevovoda u skladu s najboljim praksama DevOps-a. Na primjer, ovdje se koristi GitOps.

U zbirku prednosti Jenkinsa možemo dodati i to da su njegovi skripti vrlo dobro strukturirani, jasni i lako čitljivi. Tim Jenkinsa stvorio je oko 1000 dodataka koji su usmjereni na organizaciju interakcije Jenkinsa s raznim tehnologijama. U skriptama se mogu koristiti sustavi autentifikacije, što, na primjer, omogućuje povezivanje s različitim zatvorenim sustavima.

Tijekom rada Jenkins konvejera može se pratiti što se događa na svakom njegovom koraku, kao i to jesu li određeni koraci bili uspješno završeni ili ne. Ovo praćenje moguće je obaviti bez korištenja grafičkog sučelja, koristeći mogućnosti terminala.

Značajke Jenkinsa

Među dobro poznatim značajkama Jenkinsa može se istaknuti jednostavnost podešavanja, visok stupanj automatizacije različitih operacija i izvrsna dokumentacija. Kada je riječ o rješavanju DevOps zadataka, Jenkins se smatra iznimno pouzdanim alatom, gdje obično nije potrebno pažljivo pratiti cijeli proces obrade projekta. U slučaju drugih CI/CD alata to nije tako. Razgovarajmo o nekim najvažnijim mogućnostima Jenkinsa.

▍1. Besplatan, otvoreni izvor, podrška za mnoge platforme

Jenkins može raditi na platformama macOS, Windows i Linux. Također može raditi u Docker okruženju, što omogućava ujednačeno i brzo izvršavanje automatiziranih zadataka. Ovaj alat može se također izvoditi kao servlet u kontejnerima koji podržavaju Javu, poput Apache Tomcat i GlassFish. Instalacija Jenkinsa je kvalitetno dokumentirana.

▍2. Razvijena ekosustav dodataka

Ekosustav dodataka Jenkinsa izgleda znatno razvijenije u usporedbi s ekosustavima dodataka drugih CI/CD alata. Trenutno postoji više od 1500 dodataka za Jenkins. Ovi dodaci usmjereni su na rješavanje širokog spektra zadataka, a uz njihovu pomoć moguće je automatizirati najrazličitije projekte. Bogatstvo izbora besplatnih dodataka znači da korisnik Jenkinsa nema hitnu potrebu za kupnjom skupih plaćenih dodataka. Postoji mogućnost integraciji Jenkinsa s brojnim DevOps alatima.

▍3. Jednostavna instalacija i konfiguracija

Jenkins je prilično jednostavan za instalaciju i konfiguraciju. Nadalje, proces ažuriranja sustava također je vrlo jednostavan. Opet, treba spomenuti kvalitetu dokumentacije, jer je u njoj moguće pronaći odgovore na razna pitanja vezana uz instalaciju i konfiguraciju Jenkinsa.

▍4. Prijateljska zajednica

Kao što je već rečeno, Jenkins je otvoreni izvorni projekt čija ekosustav uključuje ogromnu količinu dodataka. Oko Jenkinsa se stvorila velika zajednica korisnika i programera koja pomaže u razvoju projekta. Zajednica je jedan od faktora koji doprinosi razvoju Jenkinsa.

▍5. Dostupnost REST API-ja

Tijekom rada s Jenkinsom možete koristiti REST API, što proširuje mogućnosti sustava. API za daljinski pristup sustavu dostupan je u tri verzije: XML, JSON s podrškom za JSONP, Python. Evo stranica dokumentacije koja otkriva detalje o radu s REST API-jem Jenkinsa.

▍6. Podrška za paralelno izvršavanje zadataka

Jenkins podržava paralelno izvršavanje DevOps zadataka. Lako se integrira s odgovarajućim alatima i omogućuje obavijesti o rezultatima izvršenja zadataka. Izvršenje testiranja koda može se ubrzati organizacijom paralelne izrade projekta koristeći različite virtualne strojeve.

▍7. Podrška za rad u distribuiranim okruženjima

Jenkins omogućava organizaciju distribuiranih izrada koristeći nekoliko računala. Ova mogućnost je primjenjiva u velikim projektima i koristi shemu rada prema kojoj postoji jedan glavni Jenkins poslužitelj i nekoliko podređenih mašina. Podređene mašine se mogu koristiti i u situacijama kada je potrebno organizirati testiranje projekta u različitim okruženjima. Ove mogućnosti povoljno razlikuju Jenkins od drugih sličnih projekata.

Upoznavanje s GitLab-om

Bitka između Jenkins i GitLab CI/CD
GitLab CI/CD može se nazvati jednim od najnovijih i najomiljenijih alata među DevOps inženjerima. Ovaj besplatan otvoreni alat je ugrađen u sustav kontrole verzija GitLab. GitLab platforma ima community verziju koja podržava upravljanje repozitorijima, alate za praćenje problema, organizaciju pregledavanja koda i mehanizme koji su usmjereni na izradu dokumentacije. Društva mogu instalirati GitLab lokalno, povezujući ovaj sustav s Active Directory i LDAP poslužiteljima radi organizacije sigurnog autoriziranja i autentifikacije korisnika.

Evo vodič u videu koji će vam pomoći da saznate kako stvarati CI/CD cijevi koristeći mogućnosti GitLab CI/CD.

GitLab CI/CD prvotno je bio objavljen kao samostalni projekt, ali je 2015. godine ovaj skup alata integriran u GitLab 8.0. Odvojeni GitLab CI/CD poslužitelj može podržavati više od 25.000 korisnika. Na temelju takvih poslužitelja moguće je kreirati sustave s visokom dostupnošću.

GitLab CI/CD i glavni projekt GitLab napisani su u Rubyju i Go-u. Objavljeni su pod MIT licencom. GitLab CI/CD, pored običnih mogućnosti CI/CD alata, podržava i dodatne funkcionalnosti, poput planiranja poslova.

Integracija GitLab CI/CD-a u projekt izuzetno je jednostavna. Kada koristite GitLab CI/CD, proces obrade koda projekta dijeli se na faze, od kojih svaka može sadržavati nekoliko zadataka koji se izvode u određenom redoslijedu. Zadatke je moguće detaljno prilagoditi.

Zadaci se mogu izvoditi paralelno. Nakon što se postavi redoslijed faza i zadataka, CI/CD proces je spreman za rad. Tijekom njegovog izvođenja možete pratiti stanje zadataka. Kao rezultat, korištenje GitLab CI/CD-a vrlo je praktično, vjerojatno i praktičnije od drugih sličnih alata.

Značajke GitLab CI/CD-a i GitLab-a

GitLab CI/CD jedan je od najpopularnijih DevOps alata. Projekt se izdvaja kvalitetnom dokumentacijom, a njegove mogućnosti su jednostavne i praktične za korištenje. Ako još niste upoznati s GitLab CI/CD-om, sljedeći popis mogućnosti ovog alata pružit će vam opći pregled onoga što možete očekivati. Valja napomenuti da se mnoge od tih mogućnosti odnose na samu platformu GitLab, u koju je GitLab CI/CD integriran.

▍1. Popularnost

GitLab CI/CD je relativno nov alat koji je stekao široku primjenu. GitLab CI/CD postao je izuzetno popularan CI/CD alat za automatizirano testiranje i implementaciju softvera. Lako ga je postaviti. Također, to je besplatan CI/CD alat ugrađen u GitLab platformu.

▍2. Podrška za GitLab Pages i Jekyll

Jekyll je generator statičkih web stranica koji se može koristiti u okviru sustava GitLab Pages za izradu web stranica temeljenih na GitLab repozitorijima. Sustav uzima izvorne materijale i na temelju njih generira gotovu statičku web stranicu. Izgled i funkcionalnosti takvih stranica mogu se upravljati uređivanjem datoteke _config.yml, korišten za Jekyll.

▍3. Mogućnosti planiranja projekata

Zahvaljujući mogućnosti planiranja faza projekata, povećava se udobnost praćenja problema i njihovih grupa. Ovo omogućava upravljanje organizacijom radova na projektima, planirajući njihovu realizaciju na određeni datum.

▍4. Automatsko skaliranje CI-trkača

Zahvaljujući automatskom skaliranju trkača, odgovornih za izvršavanje određenih zadataka, može se značajno uštedjeti na troškovima iznajmljivanja serverskih resursa. Ovo je posebno važno, pogotovo kada se radi o okruženjima u kojima se paralelno izvodi testiranje projekata. Također, to je važno za velike projekte koji se sastoje od više repozitorija.

▍5. Alati za praćenje problema

Moćne mogućnosti GitLab-a za praćenje problema dovele su do toga da ovu platformu koriste mnogi open-source projekti. GitLab CI/CD omogućava paralelno testiranje raznih grana koda. Rezultate ispitivanja moguće je lako analizirati u sučelju sustava. Ovo GitLab CI/CD izdvaja od Jenkins-a.

▍6. Ograničenje pristupa repozitorijima

GitLab platforma podržava ograničenje pristupa repozitorijima. Na primjer, onima koji zajednički rade na projektu u određenom repozitoriju mogu se dodijeliti prava koja odgovaraju njihovim ulogama. Ovo je posebno relevantno za korporativne projekte.

▍7. Aktivna podrška zajednice

Oko GitLab-a se stvorila aktivna zajednica koja doprinosi razvoju ove platforme i njenih alata, posebno — GitLab CI/CD. Duboka integracija GitLab CI/CD s GitLab-om, između ostalog, olakšava pronalaženje odgovora na pitanja koja se javljaju prilikom rada s GitLab CI/CD.

▍8. Podrška za rad s raznim sustavima kontrole verzija

GitLab CI/CD je sustav koji može raditi ne samo s kodom smještenim u GitLab repozitorijima. Na primjer, kod se može čuvati u GitHub repozitoriju, a CI/CD pipeline može se organizirati na temelju GitLab-a koristeći GitLab CI/CD.

Usporedba Jenkins i GitLab CI/CD

Jenkins i GitLab CI/CD su vrlo dobri alati, svaki od njih može osigurati normalan rad CI/CD pipelinea. No, ako ih usporedimo, ispostavit će se da su, iako u mnogo čemu slični, u nekim stvarima različiti.

Značajka
Jenkins
GitLab CI/CD

Otvoreni ili zatvoreni kod
Otvoreni kod
Otvoreni kod

Instalacija
Potrebno.
Nije potrebno, jer je to ugrađena funkcija platforme GitLab.

Jedinstvene karakteristike
Podrška za dodatke.
Duboka integracija u sistem za upravljanje verzijama.

Podrška
Nema.
Postoji.

Instalacija i podešavanje
Ne izaziva poteškoće
Ne izaziva poteškoće

Samostalno postavljanje sistema
Ovo je jedina opcija za korišćenje sistema.
Podržava se.

Kreiranje CI/CD cevi
Podržava se, koristi Jenkins Pipeline.
Podržava se.

Praćenje performansi aplikacija
Nema.
Postoji.

Ekosistem
Postoji više od 1000 dodataka.
Sistem se razvija unutar GitLab-a.

API
Podržava razvijen sistem API-ja.
Nudi API za dublju integraciju u projekte.

Podrška za JavaScript
Postoji.
Postoji.

Integracija s drugim alatima
Podržava integraciju s drugim alatima i platformama (Slack, GitHub).
Mnoge alate za integraciju s sporednim sistemima, posebno s GitHub-om i Kubernetesom.

Kontrola kvaliteta koda
Podržava se — uz dodatak SonarQube i druge dodatke.
Podržava se.

Razlike između Jenkins i GitLab CI/CD

Nakon što smo opisali i uporedili Jenkins i GitLab CI/CD, fokusirajmo se na razlike između ovih DevOps alata. Poznavanje ovih razlika pomoći će onima koji preferiraju jedan alat nad drugim.

  • GitLab CI/CD može potpuno kontrolisati Git repozitorije. Ovo se odnosi na upravljanje granama repozitorija i neke druge mogućnosti. Jenkins, iako može raditi s repozitorijima, ne daje istu razinu kontrole kao GitLab CI/CD.
  • Jenkins je besplatan open-source projekat. Onaj ko ga odabire, postavlja ga samostalno. Dok je GitLab CI/CD uključen u platformu GitLab, to je gotovo rešenje.
  • GitLab CI/CD podržava razvijene alate za upravljanje zadacima koji funkcionišu na nivou projekata. Ova strana Jenkins-a je slabije razvijena.

Jenkins i GitLab CI/CD: prednosti i mane

Sada imate neku predstavu o Jenkins-u i GitLab CI/CD. Sada, da biste se još bolje upoznali s ovim alatima, razmotrimo njihove prednosti i mane. Verujemo da ste već doneli odluku o tome koji alat vam je potreban. Nadamo se da će vam ovaj deo pomoći da se testirate.

▍Prednosti Jenkins-a

  • Velik broj dodataka.
  • Potpuna kontrola nad instalacijom alata.
  • Jednostavno otklanjanje grešaka u izvršiteljima.
  • Jednostavno podešavanje čvorova.
  • Jednostavno postavljanje koda.
  • Izvrsan sustav za upravljanje podacima.
  • Fleksibilnost i svestranost.
  • Podrška za različite programske jezike.
  • Sustav je intuitivno razumljiv.

▍Slabosti Jenkinsa

  • Mogući su problemi prilikom korištenja dodataka.
  • U malim projektima, vrijeme potrebno za svoju vlastitu konfiguraciju Jenkinsa može biti neopravdano veliko.
  • Nema općih analitičkih podataka za CI/CD tokove.

▍Snage GitLab CI/CD-a

  • Dobra integracija s Dockerom.
  • Jednostavno skaliranje runnera.
  • Paralelno izvođenje zadataka unutar CI/CD cjevovoda.
  • Korištenje modela usmjerenog acikličkog grafa za postavljanje međuzavisnosti zadataka.
  • Visoka razina skalabilnosti zahvaljujući paralelnom izvođenju runnera.
  • Jednostavno dodavanje zadataka.
  • Jednostavno rješavanje sukoba.
  • Pouzdan sustav sigurnosti.

▍Slabosti GitLab CI/CD-a

  • Za svaki zadatak potrebno je opisati i učitati/izvesti artefakte.
  • Nije moguće testirati rezultate spajanja grana prije stvarnog spajanja.
  • U opisivanju faza CI/CD cjevovoda trenutno nije moguće istaknuti posebne korake.

Zaključci

I Jenkins i GitLab CI/CD imaju svoje snage i slabosti. Odabir između njih ovisi o potrebama i karakteristikama specifičnog projekta. Svaki od danas razmatranih CI/CD alata ima svoje posebnosti, iako su kreirani za rješavanje istog zadatka. Jenkins je autonoman alat, dok je GitLab CI/CD dio platforme namijenjene suradnji na kodu.

Prilikom odabira CI/CD sustava, osim njegovih funkcionalnosti, treba uzeti u obzir i troškove koji su s njim povezani, kao i alate s kojima su DevOps inženjeri navikli raditi.

Koje CI/CD alate koristite?

Bitka između Jenkins i GitLab CI/CD

Bitka između Jenkins i GitLab CI/CD

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster