Razvoj softvera je proces koji podrazumeva niz koraka. Sve počinje planiranjem, nastavlja se analizom, dizajnom, razvojem, testiranjem, implementacijom, i na kraju održavanjem. Programeri softvera koriste različite alate na ovom putu.
GitLab CI i Jenkins su među najznačajnijim imenima u sferi kontinuirane integracije i isporuke (CI/CD). CI/CD predstavlja skup postupaka koji automatizuju razvoj softvera.
U ovom članku, koji se bavi poređenjem GitLab-a i Jenkins-a, definisaćemo svaki od ovih alata, objasnićemo njihov način funkcionisanja i uporediti ključne karakteristike.
Šta je GitLab CI?
GitLab Continuous Integration and Delivery je DevOps alat koji automatizuje korake neophodne za izradu, testiranje i primenu vašeg koda u proizvodnom okruženju.
GitLab CI se sastoji iz dva dela: Kontinuirane integracije (CI) i Kontinuirane isporuke/primene (CD).
Kontinuirana integracija ima zadatak da automatizuje sve procese izrade. Ova funkcionalnost takođe pruža povratne informacije putem pregleda koda i automatizuje bezbednosne i kvalitativne testove za vaš kod. Na kraju, CI kreira paket izdanja za primenu u vašem proizvodnom okruženju.
Segment Kontinuirane primene GitLab CI-ja automatski obezbeđuje infrastrukturu i upravlja izdavanjem tiketa, promenama infrastrukture i izdavanjem verzija. CD nudi okruženje za progresivnu implementaciju koda i omogućava verifikaciju i praćenje svih izvršenih izmena. Ova funkcija takođe omogućava korisnicima da ponište promene po potrebi.
Kombinacijom ove dve funkcije, možete automatizovati ceo životni ciklus razvoja softvera (SDLC) uz minimalnu potrebu za ručnom intervencijom.
Ukratko, GitLab CI se koristi za:
- Čuvanje i upravljanje kodom
- Automatizaciju CI/CD procesa
- Praćenje problema
- Obezbeđivanje koda
- Saradnju
Prednosti korišćenja GitLab CI
- Povećana brzina: Korišćenjem GitLab CI-ja, više ne morate prolaziti kroz ručne procese kao što su izrada, testiranje i implementacija koda.
- Poboljšan kvalitet koda: Sa GitLab CI-jem možete otkriti greške u kodu pre nego što one dospeju u proizvodnju.
- Bezbednost: GitLab CI poseduje razne bezbednosne funkcije kao što su skeniranje ranjivosti, upravljanje tajnim podacima i skeniranje koda, kako bi se smanjile pretnje od hakerskih napada.
- Fleksibilnost: GitLab CI se može prilagoditi potrebama vašeg razvojnog tima. Ovaj alat možete koristiti sa svim najvažnijim jezicima i okvirima.
- Automatsko testiranje: Testove nije potrebno pokretati ručno, već se mogu napisati skripte za njihovo automatsko pisanje i izvršavanje.
Šta je Jenkins?
Jenkins je proširivi server za automatizaciju. Ovaj alat otvorenog koda pomaže korisnicima da upravljaju i izgrade procese za kontinuiranu integraciju i kontinuiranu isporuku (CI/CD). Jenkins je popularan među DevOps inženjerima i softverskim inženjerima jer doprinosi poboljšanju kvaliteta, pouzdanosti i brzine isporuke softvera.
Jenkins vodi niz ‘poslova’ ili koraka u procesu. Jedan posao se sastoji od nekoliko koraka koji se izvršavaju u nizu. Korak u Jenkins-u može biti izrada, testiranje, primena ili bilo koji drugi zadatak koji se može automatizovati u životnom ciklusu razvoja softvera.
Korišćenje Jenkins-a se može sumirati na sledeći način:
- Kontinuirana integracija
- Kontinuirana isporuka
- Automatsko testiranje
- Praćenje i izveštavanje
- Skeniranje koda
- Raspored poslova
Prednosti korišćenja Jenkins-a
- Skalabilnost: Jenkins se može koristiti i sa malim i sa velikim aplikacijama.
- Jednostavna konfiguracija: Jenkins ima jednostavan proces konfigurisanja, podržan brojnim resursima.
- Velika zajednica: Jenkins postoji skoro dve decenije i privukao je brojne korisnike.
- Raznovrsni dodaci: Funkcionalnost Jenkins-a se može unaprediti korišćenjem širokog spektra dodataka.
- Omogućava paralelno izvršavanje zadataka: Sa Jenkins-om možete istovremeno obavljati različite zadatke, štedeći vreme.
Sličnosti GitLab CI i Jenkins-a
- Oba alata podržavaju kontinuiranu integraciju i kontinuiranu isporuku.
- Oba su alati otvorenog koda.
- Oba imaju veliku zajednicu i veliki broj korisnika.
- Oba podržavaju razne programske jezike i okvire.
- Oba automatizuju različite zadatke u životnom ciklusu razvoja softvera.
- Oba imaju veliki ekosistem dodataka i proširenja.
GitLab CI protiv Jenkins-a: Poređenje karakteristika
Karakteristika | GitLab CI | Jenkins |
Otvoreni kod | Da | Da |
Podrška za jezike | Brojni jezici | Brojni jezici |
Cena | Većina funkcija je dostupna u besplatnom planu. Postoje i plaćeni planovi sa više funkcija. | Besplatan alat, ali za naprednije funkcije mogu biti potrebni dodaci treće strane. |
Zrelost | Novija platforma; kreiran 2014. godine. | Jenkins je nastao kao Hudson, ali se razvio i preimenovan u Jenkins 2011. godine. |
Jednostavnost upotrebe | Lak za upotrebu. | Može biti komplikovan za početnike. |
Hosting | Interni i eksterni. | Interni i eksterni. |
Preduslovi | Node.JS, Git, Ruby, Go | Java Runtime Environment |
GitLab CI vs. Jenkins: Detaljno poređenje
Iako GitLab i Jenkins dele određene sličnosti, postoje jasne razlike koje utiču na način na koji upravljaju CI/CD procesom. Ovo su neke od glavnih razlika:
Arhitektura
Jenkins koristi master-worker arhitekturu za upravljanje procesom izrade.
- Jenkins master zakazuje poslove izrade i dodeljuje ih radnicima za njihovo izvršenje. On takođe prati stanje radnika i prikuplja i objedinjuje sve rezultate izrade na web kontrolnoj tabli.
- Jenkins worker je Java izvršna datoteka koja radi na udaljenom računaru. Poznat i kao agent za izradu, on sluša zahteve od master-a i izvršava ih. Možete imati preko 100 čvorova i dodavati ili uklanjati radnike po potrebi.
GitLab CI je deo GitLab-a, web interfejsa za upravljanje repozitorijumima, zahtevima za spajanje i mnogo više. GitLab CI ima različite komponente:
- GitLab CI/CD alat omogućava upravljanje procesom izrade.
- GitLab Runner izvršava sve CI poslove. Ovaj lagani proces se može pokrenuti u oblaku ili na vašem računaru.
- Konfiguracije CI/CD procesa definisane su u .gitlab-ci.yml fajlu. Ovaj fajl definiše sve poslove, faze i korake u procesu.
Dodaci
Jenkins ima preko 1800 dodataka, koje doprinosi zajednica. Ovi dodaci pokrivaju različite oblasti, kao što su izrada, implementacija i automatizacija projekata. Korisnici mogu prilagoditi svoje CI/CD procese i proširiti Jenkins-ovu funkcionalnost.
Programeri mogu kreirati prilagođene dodatke koristeći Jenkins-ovu opsežnu dokumentaciju. Oni takođe mogu kreirati i dodati dodatke u Jenkins-ov direktorijum. Jenkins ima veliku i aktivnu zajednicu koja pomaže u kreiranju dodataka.
GitLab CI omogućava povezivanje/integraciju sa spoljnim servisima radi poboljšane funkcionalnosti. Njegova biblioteka dodataka/proširenja je manja u poređenju sa Jenkins-om, ali raste. S obzirom da je GitLab CI deo GitLab-a, dolazi sa mnogo ugrađenih funkcija.
Korisnici mogu prilagoditi/konfigurisati svoje tokove posla koristeći .gitlab-ci.yml fajl. Možete odrediti sve poslove, faze i korake.
Procesi
Jenkins vam omogućava korišćenje deklarativne i skriptovane sintakse procesa. Možete koristiti bilo koji od ova dva pristupa putem web korisničkog interfejsa ili Jenkins fajla. Ovo drugo je poželjnije. Možete skladištiti njegove procese kao Jenkins fajlove u repozitorijumu koji čuva izvorni kod. Platforma dolazi sa ugrađenim web-baziranim grafičkim korisničkim interfejsom (GUI) gde možete pratiti i vizualizovati izvršavanja.
GitLab CI koristi .gitlab-ci.yml fajl, kojim se definišu svi procesi. Ovaj konfiguracioni fajl zasnovan na YAML-u se čuva u osnovnom direktorijumu projekta. .gitlab-ci.yml je poznat po svojoj jednostavnoj sintaksi sa nizom komandi i unapred definisanih ključnih reči, koje pokrivaju najčešće CI/CD zadatke. GitLab CI se integriše sa drugim GitLab funkcijama, omogućavajući upravljanje izvornim kodom, praćenje problema, pregled koda, zahteve za spajanje i mnogo više.
Kako instalirati Jenkins
Pre instaliranja Jenkins-a na računar, potreban vam je Java Runtime Environment (JRE). Preuzmite Javu sa zvanične web stranice, u zavisnosti od operativnog sistema. U ovom primeru, koristićemo Ubuntu za demonstraciju procesa instalacije.
Ako koristite drugi operativni sistem, pogledajte članak o instalaciji Jenkins-a i pratite navedene korake.
Za Ubuntu, pratite ove korake:
Korak 1: Proverite da li je JRE instaliran. Pokrenite ovu komandu:
java -version
Ako je instaliran, trebalo bi da vidite nešto slično ovome:
U ovom primeru je instalirana verzija „17.0.6“, ali kod vas može biti prikazana novija verzija.
Korak 2: Uvezite GPG ključ u svoj sistem pomoću sledeće komande:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null
Korak 3: Dodajte Jenkins-ov softverski repozitorijum pomoću sledeće komande:
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
Korak 4: Ažurirajte svoj sistem pomoću ove komande:
sudo apt update
Korak 5: Instalirajte Jenkins pomoću ove komande:
sudo apt install jenkins -y
Korak 6: Proverite da li je Jenkins instaliran pomoću ove komande:
sudo systemctl status jenkins
Ako je instaliran, videćete nešto slično ovome:
Pritisnite Ctrl+Z na tastaturi da biste izašli i prešli na sledeći korak.
Korak 7: Izmenite zaštitni zid za Jenkins na svom sistemu. Koristite ovu komandu:
sudo ufw allow 8080
Korak 8: Proverite status
sudo ufw status
Korak 9: Ako status glasi „Neaktivno“ u prethodnom koraku, omogućite ga pomoću ove komande:
sudo ufw enable
Korak 10: Otvorite Jenkins u pretraživaču tako što ćete upisati sledeće u adresnu traku:
http://localhost:8080
Korak 11: Dobijte „Administratorsku lozinku“ pokretanjem ove komande:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Korak 12: Otključajte Jenkins
Kopirajte lozinku prikazanu u terminalu, nalepite je u polje „Administratorska lozinka“ koje se otvorilo u desetom koraku, a zatim pritisnite „Nastavi“.
U novom prozoru će biti zatraženo da instalirate dodatke. Pošto vam u ovom trenutku nije potrebno mnogo dodataka, možete odabrati podrazumevane i preći na sledeći korak.
Korak 13: Kreirajte svoj nalog i „sačuvajte i nastavite“.
Korak 14: Podesite trenutnu konfiguraciju i počnite da koristite Jenkins.
Kako instalirati GitLab CI
GitLab CI je sastavni deo GitLab-a. Da biste dobili GitLab CI, prvo morate instalirati GitLab Runner, agenta koji pokreće sve poslove pre slanja u GitLab.
Za demonstraciju procesa koristićemo Ubuntu. Ako imate drugi operativni sistem, pogledajte zvaničnu dokumentaciju. Za Ubuntu, pratite ove korake:
Korak 1: Ažurirajte i konfigurišite svoj sistem:
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
Možete da konfigurišete rešenje za e-poštu za slanje ažuriranja, ili možete da preskočite ovaj korak.
Korak 2: Dodajte GitLab spremište paketa
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
Korak 3: Konfigurišite svoj GitLab nalog.
Postoje razne opcije za hosting GitLab-a. Pratite uputstva u zavisnosti od vašeg izbora.
Korak 4: Pregledajte ime hosta i prijavite se. Kliknite na sledeću komandu u terminalu da biste dobili lozinku:
/etc/gitlab/initial_root_password
Opciono: Podesite postavke komunikacije da biste primali ažuriranja proizvoda i vesti od GitLab-a.
Ograničenja Jenkins-a
- Jenkins može biti komplikovan za postavljanje za velike projekte.
- Ako nije pravilno konfigurisan, Jenkins može biti ranjiv na bezbednosne napade.
- Može biti teško skalirati velike projekte uz korišćenje Jenkins-a.
- Jenkins može trošiti mnogo resursa kada pokreće brojne istovremene izrade.
Ograničenja GitLab CI
- GitLab CI može biti kompleksan za velike projekte.
- Zavisi od GitLab-a.
- Skalabilnost je problem za velike projekte.
- Ekosistem dodataka nije veliki u poređenju sa Jenkins-om.
Mišljenje autora
I GitLab CI i Jenkins su sjajni alati u životnom ciklusu razvoja softvera. Ja bih se opredelio za Jenkins ako želim zreliju platformu i potpunu kontrolu nad prilagođavanjem. Sa druge strane, opredelio bih se za GitLab CI zbog njegovog korisničkog interfejsa i potrebe da iskoristim GitLab integraciju.
Sada verujemo da možete razlikovati GitLab CI i Jenkins. Iako su ova dva alata dizajnirana za obavljanje sličnih funkcija, razlikuju se po karakteristikama i načinu na koji postižu svoje ciljeve. Izbor između ova dva alata zavisiće od prirode projekta koji imate, vaših veština, ukusa i preferencija.
Sada možete pogledati ove Jenkins hosting platforme.