Bătălia dintre Jenkins și GitLab CI/CD

În ultimul deceniu, s-au înregistrat progrese semnificative în dezvoltarea instrumentelor de integrare continuă (Continuous Integration, CI) și livrare continuă (Continuous Delivery, CD). Evoluția tehnologiilor de integrare a dezvoltării și operațiunilor software (Development Operations, DevOps) a dus la o creștere rapidă a cererii pentru instrumente CI/CD. Soluțiile existente se îmbunătățesc constant, dorind să țină pasul cu vremurile, iar versiuni noi sunt lansate frecvent; în domeniul controlului calității software (Quality Assurance, QA) apare constant o multitudine de produse noi. Având atâtea opțiuni disponibile, alegerea instrumentației potrivite devine o sarcină dificilă.

Bătălia dintre Jenkins și GitLab CI/CD

Printre toate instrumentele CI/CD existente, există două proiecte asupra cărora merită să ne concentrăm, dacă căutăm ceva din această sferă. Este vorba despre Jenkins și instrumentul GitLab CI/CD, care face parte din platforma GitLab. Jenkins are mai mult 16000 de stele pe GitHub. Repositoul GitLab de pe gitlab.com a acumulat puțin peste 2000 de stele. Dacă comparăm popularitatea repositoarelor, vom observa că Jenkins are de 8 ori mai multe stele decât platforma din care face parte GitLab CI/CD. Cu toate acestea, în alegerea unui instrument CI/CD, aceasta nu este, cu siguranță, singura metrică la care ar trebui să ne uităm. Există multe altele, și aceasta explică de ce în multe comparații Jenkins și GitLab CI/CD se află foarte aproape unul de altul.

Să luăm, de exemplu, datele de pe platforma G2, care acumulează recenzii și evaluări pentru o varietate de produse din partea utilizatorilor. Aici, ratingul mediu Jenkins, obținut pe baza a 288 de recenzii, este de 4,3 stele. Iar despre GitLab acesta există 270 de recenzii, iar ratingul mediu al acestui instrument este de 4,4 stele. Nu greșim atunci când afirmăm că Jenkins și GitLab CI/CD concurează pe o piață echilibrată. Este interesant de menționat că proiectul Jenkins a fost lansat în 2011 și, de atunci, este instrumentul preferat al testerilor. Totuși, proiectul GitLab CI/CD, lansat în 2014, a reușit să-și ocupe pozițiile, foarte înalte, datorită capabilităților avansate oferite de această platformă.

Când vine vorba de popularitatea Jenkins în comparație cu alte platforme similare, trebuie menționat că, după publicarea unui articol în care am comparat platformele Travis CI și Jenkins, am realizat un sondaj. La acesta au participat 85 de utilizatori. Răspunseseților li s-a propus să aleagă instrumentul CI/CD care le place cel mai mult. 79% au ales Jenkins, 5% au ales Travis CI, iar 16% au indicat că preferă alte instrumente.

Bătălia dintre Jenkins și GitLab CI/CD
Rezultatele sondajului

Între alte instrumente CI/CD, a fost menționat cel mai frecvent GitLab CI/CD.

Dacă te ocupa serios de DevOps, trebuie să alegi cu atenție instrumentele corespunzătoare, ținând cont de specificul proiectului, bugetul acestuia și alte cerințe. Pentru a te ajuta să faci alegerea corectă, ne propunem să realizăm o analiză a Jenkins și GitLab CI/CD. Sperăm că acest lucru te va ajuta să iei o decizie informată.

Introducere în Jenkins

Bătălia dintre Jenkins și GitLab CI/CD
Jenkins — este un instrument CI/CD bine cunoscut și flexibil, destinat automatizării multor sarcini legate de proiectele software. Jenkins este complet scris în Java și este lansat sub licența MIT. Are un set puternic de funcționalități destinate automatizării sarcinilor legate de compilare, testare, desfășurare, integrare și lansare a software-ului. Acest instrument poate fi utilizat pe diverse sisteme de operare, printre care macOS, Windows și numeroase distribuții Linux, cum ar fi OpenSUSE, Ubuntu și Red Hat. Există pachete de instalare Jenkins destinate diverselor sisteme de operare; acest instrument poate fi instalat în Docker și în orice sistem care dispune de JRE (Java Runtime Environment).

Dezvoltatorii Jenkins au creat un alt proiect, Jenkins X, care este destinat să funcționeze în medii Kubernetes. Jenkins X integrează Helm, serverul Jenkins CI/CD, Kubernetes și alte instrumente destinate creării de pipeline-uri CI/CD conform celor mai bune practici DevOps. De exemplu, aici se folosește GitOps.

Printre avantajele Jenkins se mai adaugă și faptul că scripturile sale sunt foarte bine structurate, clare și ușor de citit. Echipa Jenkins a creat aproximativ 1000 de pluginuri care facilitează interacțiunea Jenkins cu cele mai variate tehnologii. În scripturi se pot folosi sisteme de autentificare, ceea ce, de exemplu, permite conectarea la diverse sisteme închise.

În timpul funcționării convenitorului Jenkins, se poate observa ce se întâmplă la fiecare pas, dacă anumite etape ale muncii au fost finalizate cu succes sau nu. Este posibil să observi toate acestea, deși nu folosești o interfață grafică, ci te bazezi pe funcționalitățile terminalului.

Caracteristicile Jenkins

Printre caracteristicile bine cunoscute ale Jenkins, se remarcă ușurința în configurare, nivelul ridicat de automatizare al diferitelor operațiuni și documentația excelentă. Când vine vorba de rezolvarea problemelor DevOps, Jenkins este considerat un instrument de încredere, utilizându-l, în general, nu are sens să urmărești cu atenție întregul proces de prelucrare a proiectului. În cazul altor instrumente CI/CD, nu este aceeași situație. Hai să discutăm despre câteva dintre cele mai importante funcționalități ale Jenkins.

▍1. Gratuitate, cod deschis, suport pentru multiple platforme

Jenkins poate funcționa pe platformele macOS, Windows și Linux. De asemenea, poate funcționa în medii Docker, ceea ce permite organizarea unor execuții uniforme și rapide ale sarcinilor automatizate. Acest instrument poate, de asemenea, să fie rulat ca un servet în containere care suportă Java, cum ar fi Apache Tomcat și GlassFish. Instalarea Jenkins este bine documentată.

▍2. Ecosistem dezvoltat de pluginuri

Ecosistemul de pluginuri Jenkins este mult mai dezvoltat în comparație cu ecosistemele modulelor care pot fi conectate ale altor instrumente CI/CD. În prezent, există peste 1500 de pluginuri pentru Jenkins. Aceste pluginuri sunt destinate rezolvării unei game largi de sarcini, permițând automatizarea unor proiecte foarte variate. Abundența alegerilor de module gratuite adaugă faptul că cei care utilizează Jenkins nu au o necesitate acută de a cumpăra pluginuri costisitoare. Există posibilitatea integrării Jenkins cu numeroase instrumente DevOps.

▍3. Instalare și configurare simplă

Jenkins este destul de simplu de instalat și configurat. De asemenea, procesul de actualizare a sistemului este foarte convenabil. Din nou, merită menționată calitatea documentației, deoarece în aceasta se pot găsi răspunsuri la numeroase întrebări legate de instalarea și configurarea Jenkins.

▍4. Comunitate prietenoasă

Așa cum s-a menționat, Jenkins este un proiect open-source, al cărui ecosistem include un număr vast de plugin-uri. În jurul Jenkins s-a format o mare comunitate de utilizatori și dezvoltatori, care contribuie la dezvoltarea proiectului. Comunitatea este unul dintre factorii care favorizează evoluția Jenkins.

▍5. Disponibilitatea REST API-ului

În timpul lucrului cu Jenkins, se poate utiliza REST API, ceea ce extinde funcționalitățile sistemului. API-ul pentru accesul la distanță la sistem este disponibil în trei variante: XML, JSON cu suport pentru JSONP, Python. Iată pagina de documentație care detaliază modul de utilizare al REST API-ului Jenkins.

▍6. Suport pentru execuția paralelă a sarcinilor

Jenkins suportă paralelizarea sarcinilor DevOps. Poate fi integrat ușor cu instrumentele corespunzătoare și primește notificări cu privire la rezultatele execuției sarcinilor. Execuția testelor de cod poate fi accelerată prin organizarea unei construcții paralele a proiectului utilizând diferite mașini virtuale.

▍7. Suport pentru operarea în medii distribuite

Jenkins permite organizarea construcțiilor distribuite folosind mai multe computere. Această capacitate este aplicabilă în proiecte mari și utilizează un sistem în care există un server Jenkins principal și mai multe mașini subordonate. Mașinile subordonate pot fi folosite și în situații în care este necesară organizarea testării proiectului în diferite medii. Aceste capabilități diferențiază favorabil Jenkins de alte proiecte similare.

Introducere în GitLab

Bătălia dintre Jenkins și GitLab CI/CD
GitLab CI/CD poate fi considerat unul dintre cele mai noi și celebre instrumente pentru inginerii DevOps. Acest instrument gratuit și open-source este integrat în sistemul de control al versiunilor GitLab. Platforma GitLab are o versiune comunitară care suportă gestionarea repositoarelor, instrumente pentru urmărirea problemelor, organizarea reviziilor de cod și mecanisme orientate spre crearea documentației. Companiile pot instala GitLab local, conectând acest sistem la Active Directory și la servere LDAP pentru a organiza autentificarea și autorizarea sigură a utilizatorilor.

Iată un ghid video care te va ajuta să înveți cum să creezi pipeline-uri CI/CD folosind funcționalitățile GitLab CI/CD.

La început, GitLab CI/CD a fost lansat ca un proiect independent, dar în 2015, acest set de instrumente a fost integrat în GitLab 8.0. Un server GitLab CI/CD separat poate susține mai mult de 25000 de utilizatori. Pe baza acestor servere pot fi create sisteme cu o disponibilitate ridicată.

GitLab CI/CD și proiectul principal GitLab sunt scrise în Ruby și Go. Ele sunt lansate sub licența MIT. GitLab CI/CD, pe lângă funcționalitățile obișnuite ale instrumentelor CI/CD, susține și caracteristici suplimentare, legate, de exemplu, de programarea sarcinilor.

Integrând GitLab CI/CD în proiect este foarte simplu. Când folosești GitLab CI/CD, procesul de prelucrarea a codului proiectului este împărțit în etape, fiecare dintre ele putând consta în mai multe sarcini, executate în ordinea specificată. Sarcinile pot fi ajustate fin.

Sarcinile pot fi executate în paralel. După ce se configurează secvența etapelor și sarcinilor, pipeline-ul CI/CD este gata de lucru. Poți observa desfășurarea acestuia urmărind starea sarcinilor. Ca rezultat, utilizarea GitLab CI/CD este foarte convenabilă, poate chiar mai convenabilă decât alte instrumente similare.

Caracteristicile GitLab CI/CD și GitLab

GitLab CI/CD este unul dintre cele mai populare instrumente DevOps. Proiectul se remarcă prin documentația sa de calitate, iar posibilitățile sale sunt ușor de utilizat. Dacă nu ești familiarizat cu GitLab CI/CD, următoarea listă de funcționalități ale acestui instrument îți va oferi o imagine generală despre ce să te aștepți. Trebuie menționat că multe dintre aceste funcționalități se referă la platforma GitLab în sine, în care GitLab CI/CD este integrat.

▍1. Popularitate

GitLab CI/CD este un instrument relativ nou, care a găsit o aplicare largă. GitLab CI/CD a devenit treptat un instrument CI/CD extrem de popular, folosit pentru testarea automatizată și desfășurarea software-ului. Este ușor de configurat. De asemenea, este un instrument CI/CD gratuit, integrat în platforma GitLab.

▍2. Suport pentru GitLab Pages și Jekyll

Jekyll este un generator de site-uri statice care poate fi folosit în cadrul sistemului GitLab Pages pentru a crea site-uri bazate pe repozitorii GitLab. Sistemul ia materialele sursă și generează un site static gata. Aspectul și funcționalitatea acestor site-uri pot fi gestionate prin editarea fișierului _config.yml, utilizat de Jekyll.

▍3. Funcționalități de planificare a proiectelor

Datorită capacităților de planificare a etapelor proiectelor, se îmbunătățește urmărirea problemelor și gruparea acestora. Aceasta permite gestionarea organizării muncii în proiecte, planificându-le realizarea pentru o anumită dată.

▍4. Scalare automată a CI-runners

D thanks to automatic scaling of runners responsibil for executing specific tasks, you can significantly save on the cost of server resources rental. This is particularly important, especially when it comes to environments where project testing is performed in parallel. Additionally, this is crucial for large projects consisting of multiple repositories.

▍5. Instrumente pentru urmărirea problemelor

Capacitățile puternice ale GitLab în urmărirea problemelor au dus la faptul că această platformă este utilizată de multe proiecte open-source. GitLab CI/CD permite testarea paralelă a diferitelor ramuri de cod. Rezultatele testelor sunt ușor de analizat în interfața sistemului. Acest lucru diferențiază favorabil GitLab CI/CD de Jenkins.

▍6. Restricționarea accesului la repository-uri

Platforma GitLab suportă restricționarea accesului la repository-uri. De exemplu, celor care colaborează la un proiect într-un anumit repository li se pot atribui drepturi corespunzătoare rolurilor lor. Acest lucru este deosebit de relevant pentru proiectele corporative.

▍7. Suport activ al comunității

În jurul GitLab s-a format o comunitate activă care contribuie la dezvoltarea acestei platforme și a instrumentelor sale, în special — GitLab CI/CD. Integrarea profundă între GitLab CI/CD și GitLab, printre altele, simplifică găsirea răspunsurilor la întrebările care apar în timpul lucrului cu GitLab CI/CD.

▍8. Suport pentru lucrul cu diferite sisteme de control al versiunilor

GitLab CI/CD este un sistem capabil să lucreze nu doar cu codul stocat în repository-urile GitLab. De exemplu, codul poate fi păstrat într-un repository GitHub, iar pipeline-ul CI/CD poate fi organizat pe baza GitLab utilizând GitLab CI/CD.

Compararea Jenkins și GitLab CI/CD

Jenkins și GitLab CI/CD sunt instrumente foarte bune, fiecare fiind capabil să asigure o funcționare normală a pipeline-ului CI/CD. Dar, dacă le compari, vei descoperi că, deși au multe asemănări, se deosebesc în unele aspecte.

Caracteristică
Jenkins
GitLab CI/CD

Cod deschis sau închis
Cod deschis
Cod deschis

Instalare
Necesar.
Nu este necesar, deoarece aceasta este o caracteristică încorporată a platformei GitLab.

Caracteristici unice
Suport pentru pluginuri.
Integrare profundă în sistemul de control al versiunilor.

Asistență
Lipsă.
Este disponibil.

Instalare și configurare
Nu prezintă dificultăți
Nu prezintă dificultăți

Dezvoltare autonomă a sistemului
Aceasta este singura opțiune de utilizare a sistemului.
Este susținut.

Crearea canalelor CI/CD
Este susținut, folosește Jenkins Pipeline.
Este susținut.

Monitorizarea performanței aplicațiilor
Lipsă.
Este disponibil.

Ecosistem
Există peste 1000 de pluginuri.
Sistemul se dezvoltă în cadrul GitLab.

API
Suportă un sistem API dezvoltat.
Oferă API pentru integrarea mai profundă în proiecte.

Suport pentru JavaScript
Este disponibil.
Este disponibil.

Integrarea cu alte instrumente
Este susținută integrarea cu alte instrumente și platforme (Slack, GitHub).
Multe instrumente pentru integrarea cu sisteme externe, în special cu GitHub și Kubernetes.

Controlul calității codului
Este susținut - cu ajutorul pluginului SonarQube și altor pluginuri.
Este susținut.

Diferențele dintre Jenkins și GitLab CI/CD

După ce am descris și comparat Jenkins și GitLab CI/CD, să ne concentrăm pe diferențele acestor instrumente DevOps. Cunoașterea acestor diferențe va ajuta pe cei care preferă unul dintre aceste instrumente în detrimentul celuilalt.

  • GitLab CI/CD poate controla complet repositoarele Git. Este vorba despre gestionarea ramurilor repositoarelor și despre anumite alte funcționalități. Pe de altă parte, deși Jenkins poate lucra cu repositoare, nu oferă același nivel de control asupra acestora ca GitLab CI/CD.
  • Jenkins este un proiect open-source gratuit. Cei care îl aleg, îl desfășoară singuri. În schimb, GitLab CI/CD este inclus în cadrul platformei GitLab, fiind o soluție gata făcută.
  • GitLab CI/CD suportă instrumente avansate de gestionare a sarcinilor, care funcționează la nivel de proiecte. Această latură a lui Jenkins este mai puțin dezvoltată.

Jenkins și GitLab CI/CD: puncte forte și slabe

Acum aveți o oarecare înțelegere a Jenkins și GitLab CI/CD. Acum, pentru a vă familiariza și mai bine cu aceste instrumente, să analizăm punctele lor forte și slabe. Sperăm că ați decis deja care instrument vă este necesar. Ne dorim ca această secțiune să vă ajute să verificați opțiunile.

▍Punctele forte ale Jenkins

  • Număr mare de pluginuri.
  • Control complet asupra instalării instrumentului.
  • Depanare simplă a runner-elor.
  • Configurare ușoară a nodurilor.
  • Implementare simplă a codului.
  • Un sistem foarte bun de gestionare a identificatorilor.
  • Flexibilitate și versatilitate.
  • Suport pentru diverse limbaje de programare.
  • Sistemul este intuitiv și ușor de înțeles.

▍Punctele slabe ale Jenkins

  • Utilizarea plugin-urilor poate genera dificultăți.
  • În utilizarea Jenkins în proiecte mici, timpul necesar pentru configurarea sa poate fi nejustificat de mare.
  • Lipsa de informații analitice generale privind lanțurile CI/CD.

▍Punctele forte ale GitLab CI/CD

  • Integrare bună cu Docker.
  • Scalarea ușoară a runner-elor.
  • Executarea paralelă a sarcinilor din cadrul etapelor pipeline-ului CI/CD.
  • Folosirea modelului de graf orientat aciclic pentru configurarea relațiilor dintre sarcini.
  • Nivel ridicat de scalabilitate datorită posibilității de executare paralelă a runner-elor.
  • Adăugarea de sarcini este simplă.
  • Rezolvarea simplă a conflictelor.
  • Sistem de securitate fiabil.

▍Punctele slabe ale GitLab CI/CD

  • Pentru fiecare sarcină trebuie să descrii și să încarci/extragi artefacte.
  • Nu poți testa rezultatul fuziunii ramurilor înainte de a le fuziona efectiv.
  • În descrierea etapelor pipeline-ului CI/CD, nu se pot evidenția momentan etape individuale.

Concluzii

Atât Jenkins, cât și GitLab CI/CD au puncte forte și slabe. Răspunsul la întrebarea ce să alegi depinde de nevoile și specificitățile proiectului respectiv. Fiecare dintre instrumentele CI/CD analizate astăzi are trăsături distincte, deși aceste instrumente sunt create pentru a rezolva aceeași problemă. În timp ce Jenkins este un instrument autonom, GitLab CI/CD face parte dintr-o platformă destinată colaborării la cod.

Atunci când alegi un sistem CI/CD, pe lângă capacitățile sale, trebuie să iei în considerare și costurile asociate și ceea ce este familiar inginerilor DevOps care susțin proiectul.

Ce instrumente CI/CD utilizați?

Bătălia dintre Jenkins și GitLab CI/CD

Bătălia dintre Jenkins și GitLab CI/CD

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster