La battaglia tra Jenkins e GitLab CI/CD

Negli ultimi dieci anni sono stati compiuti notevoli progressi nello sviluppo di strumenti di integrazione continua (Continuous Integration, CI) e distribuzione continua (Continuous Delivery, CD). L'evoluzione delle tecnologie di integrazione tra sviluppo e operazioni software (Development Operations, DevOps) ha portato a una rapida crescita della domanda di strumenti CI/CD. Le soluzioni esistenti vengono costantemente migliorate per stare al passo con i tempi, vengono rilasciate nuove versioni e nel campo del controllo qualità del software (Quality Assurance, QA) appaiono continuamente nuovi prodotti. Con una così vasta gamma di opzioni, la scelta degli strumenti giusti può risultare una sfida complessa.

La battaglia tra Jenkins e GitLab CI/CD

Tra tutti gli strumenti CI/CD esistenti, ci sono due progetti a cui vale sicuramente la pena prestare attenzione per chi cerca qualcosa in questo campo. Si tratta di Jenkins e dello strumento GitLab CI/CD, che è parte della piattaforma GitLab. Jenkins ha più di 16000 stelle su GitHub. Il repository di GitLab su gitlab.com ha accumulato poco più di 2000 stelle. Se confrontiamo la popolarità dei repository, risulta che Jenkins ha ottenuto 8 volte più stelle della piattaforma che include GitLab CI/CD. Tuttavia, nella scelta di uno strumento CI/CD, questo non è certo l'unico indicatore da considerare. Ci sono molti altri fattori, il che spiega perché in molti confronti Jenkins e GitLab CI/CD risultano molto vicini l'uno all'altro.

Prendiamo, ad esempio, i dati dalla piattaforma G2, che raccoglie recensioni di vari prodotti e valutazioni fornite dagli utenti. Qui, la valutazione media Jenkins, calcolata su 288 recensioni, è di 4,3 stelle. Per quanto riguarda GitLab , ci sono 270 recensioni, con una valutazione media di 4,4 stelle per questo strumento. Non commetteremmo un errore nel dire che Jenkins e GitLab CI/CD competono tra loro su un piano di parità. È interessante notare che il progetto Jenkins è nato nel 2011 ed è diventato da allora lo strumento preferito dai tester. Nel frattempo, il progetto GitLab CI/CD, lanciato nel 2014, ha conquistato le sue posizioni, molto elevate, grazie alle avanzate funzionalità offerte da questa piattaforma.

Parlando della popolarità di Jenkins rispetto ad altre piattaforme simili, vale la pena notare che, dopo aver pubblicato un articolo in cui confrontavamo le piattaforme Travis CI e Jenkins, abbiamo condotto un sondaggio. Hanno partecipato 85 utenti. È stato chiesto ai rispondenti di scegliere lo strumento CI/CD che preferiscono di più. Il 79% ha scelto Jenkins, il 5% ha scelto Travis CI e il 16% ha indicato di preferire altri strumenti.

La battaglia tra Jenkins e GitLab CI/CD
Risultati del sondaggio

Tra gli altri strumenti CI/CD, GitLab CI/CD è stato il più citato.

Se ti occupi seriamente di DevOps, è fondamentale selezionare gli strumenti appropriati, tenendo conto delle caratteristiche del progetto, del suo budget e di altri requisiti. Per aiutarti a fare la scelta giusta, ci proponiamo di analizzare Jenkins e GitLab CI/CD. Questo, speriamo, ti aiuterà a prendere la decisione corretta.

Introduzione a Jenkins

La battaglia tra Jenkins e GitLab CI/CD
Jenkins è un noto e flessibile strumento CI/CD progettato per automatizzare numerosi compiti legati ai progetti software. Jenkins è completamente scritto in Java ed è rilasciato con licenza MIT. Dispone di un potente set di funzionalità, mirate all'automazione di compiti legati alla build, ai test, al deployment, all'integrazione e al rilascio del software. Questo strumento può essere utilizzato su diversi sistemi operativi, tra cui macOS, Windows e diverse distribuzioni Linux, come OpenSUSE, Ubuntu e Red Hat. Esistono pacchetti di installazione di Jenkins progettati per i vari sistemi operativi, ed è possibile installare questo strumento in Docker e su qualsiasi sistema che abbia JRE (Java Runtime Environment).

Gli sviluppatori di Jenkins hanno creato un altro progetto, Jenkins X, progettato per funzionare nell'ambiente Kubernetes. Jenkins X integra Helm, il server Jenkins CI/CD, Kubernetes e altri strumenti destinati alla creazione di pipeline CI/CD che rispettano le migliori pratiche di DevOps. Ad esempio, si utilizza GitOps.

Tra i punti a favore di Jenkins, si può aggiungere il fatto che i suoi script sono ben strutturati, chiari e facili da leggere. Il team di Jenkins ha creato circa 1000 plugin, progettati per facilitare l'interazione di Jenkins con varie tecnologie. Negli script è possibile utilizzare sistemi di autenticazione, il che, ad esempio, consente di connettersi a vari sistemi privati.

Durante il funzionamento della pipeline Jenkins, è possibile osservare cosa accade in ciascun passaggio, se le diverse fasi del lavoro si sono concluse con successo o meno. È possibile monitorare tutto ciò, senza utilizzare un'interfaccia grafica, ma sfruttando le capacità del terminale.

Caratteristiche di Jenkins

Tra le caratteristiche più conosciute di Jenkins si possono notare la facilità di configurazione, l'alto livello di automazione di varie operazioni e l'ottima documentazione. Quando si parla di soluzioni per problemi DevOps, Jenkins è considerato uno strumento molto affidabile, utilizzato per il quale, di solito, non ha senso monitorare attentamente l'intero processo di gestione del progetto. Con altri strumenti CI/CD non è così. Parliamo ora di alcune delle funzionalità più importanti di Jenkins.

▍1. Gratuito, open source, supporta molte piattaforme

Jenkins può funzionare su piattaforme macOS, Windows e Linux. Può operare anche in un ambiente Docker, il che consente l'esecuzione uniforme e rapida di compiti automatizzati. Questo strumento, inoltre, può essere eseguito come servlet in contenitori che supportano Java, come Apache Tomcat e GlassFish. L'installazione di Jenkins è ben documentata ..

▍2. Ecosistema di plugin avanzato

L'ecosistema di plugin di Jenkins risulta molto più sviluppato rispetto a quelli di altri strumenti CI/CD. Attualmente ci sono oltre 1500 plugin per Jenkins. Questi plugin sono progettati per affrontare una vasta gamma di esigenze, e possono automatizzare progetti di ogni tipo. La ricchezza nella scelta di moduli gratuiti significa che chi utilizza Jenkins non ha un'urgenza di acquistare costosi plugin a pagamento. C'è la possibilità di integrare Jenkins con molteplici strumenti DevOps.

▍3. Installazione e configurazione semplici

Jenkins è abbastanza semplice da installare e configurare. Inoltre, anche il processo di aggiornamento del sistema è molto comodo. È opportuno menzionare nuovamente la qualità della documentazione, poiché in essa è possibile trovare risposte a una vasta gamma di domande relative all'installazione e configurazione di Jenkins.

▍4. Comunità accogliente

Come già detto, Jenkins è un progetto open source la cui ecosistema include un'enorme quantità di plugin. Attorno a Jenkins si è sviluppata una grande comunità di utenti e sviluppatori che contribuiscono allo sviluppo del progetto. La comunità è uno dei fattori che favorisce la crescita di Jenkins.

▍5. Presenza di un REST API

Durante il lavoro con Jenkins è possibile utilizzare il REST API, il che amplia le possibilità del sistema. L'API per l'accesso remoto al sistema è disponibile in tre formati: XML, JSON con supporto JSONP, Python. Ecco pagina di documentazione che svela i dettagli su come lavorare con il REST API di Jenkins.

▍6. Supporto per l'esecuzione parallela delle attività

Jenkins supporta la parallelizzazione delle attività DevOps. Può essere facilmente integrato con gli strumenti appropriati e ricevere notifiche sui risultati delle esecuzioni. L'esecuzione dei test del codice può essere accelerata organizzando la build parallela del progetto utilizzando diverse macchine virtuali.

▍7. Supporto per il lavoro in ambienti distribuiti

Jenkins consente di organizzare build distribuite utilizzando più computer. Questa possibilità è applicabile in grandi progetti e utilizza uno schema di lavoro in cui esiste un server principale di Jenkins e diverse macchine subordinate. Le macchine subordinate possono essere utilizzate anche in situazioni in cui è necessario organizzare test del progetto in ambienti diversi. Queste caratteristiche distinguono favorevolmente Jenkins da altri progetti simili.

Introduzione a GitLab

La battaglia tra Jenkins e GitLab CI/CD
GitLab CI/CD può essere considerato uno degli strumenti più recenti e amati dagli ingegneri DevOps. Questo strumento open source gratuito è integrato nel sistema di gestione delle versioni GitLab. La piattaforma GitLab ha una versione community, supporta la gestione dei repository, strumenti per il tracciamento dei problemi, organizzazione delle revisioni del codice, meccanismi orientati alla creazione di documentazione. Le aziende possono installare GitLab localmente, collegando questo sistema a Active Directory e ai server LDAP per organizzare autenticazioni e autorizzazioni sicure degli utenti.

Ecco video tutorial che ti aiuterà a scoprire come creare pipeline CI/CD utilizzando le capacità di GitLab CI/CD.

Inizialmente, GitLab CI/CD è stato rilasciato come progetto autonomo, ma nel 2015 questo insieme di strumenti è stato integrato in GitLab 8.0. Un server GitLab CI/CD separato può supportare il lavoro di oltre 25.000 utenti. Su server simili si possono creare sistemi con alta disponibilità.

GitLab CI/CD e il progetto principale GitLab sono scritti in Ruby e Go. Sono rilasciati con licenza MIT. GitLab CI/CD, oltre alle normali funzionalità degli strumenti CI/CD, supporta anche funzionalità aggiuntive, ad esempio, per la pianificazione delle attività.

Integrarre GitLab CI/CD in un progetto è molto semplice. Quando si usa GitLab CI/CD, il processo di elaborazione del codice del progetto è suddiviso in fasi, ognuna delle quali può consistere in più attività eseguite in un determinato ordine. Le attività sono altamente configurabili.

Le attività possono essere eseguite in parallelo. Dopo aver configurato la sequenza delle fasi e delle attività, il pipeline CI/CD è pronto per l'uso. È possibile monitorare il progresso seguendo lo stato delle attività. Di conseguenza, utilizzare GitLab CI/CD è molto conveniente, probabilmente più conveniente rispetto ad altri strumenti simili.

Caratteristiche di GitLab CI/CD e GitLab

GitLab CI/CD è uno degli strumenti DevOps più popolari. Il progetto si distingue per la documentazione di qualità e le sue funzionalità sono facili e comodamente utilizzabili. Se non sei ancora familiare con GitLab CI/CD, la seguente lista delle funzionalità di questo strumento ti darà una visione generale di cosa aspettarti. Va notato che molte di queste funzionalità sono correlate alla piattaforma GitLab stessa, in cui è integrato GitLab CI/CD.

▍1. Popolarità

GitLab CI/CD è uno strumento relativamente nuovo, che ha trovato ampia applicazione. GitLab CI/CD è gradualmente diventato uno strumento CI/CD estremamente popolare, utilizzato per il test automatizzato e il deployment del software. È facile da configurare. Inoltre, è uno strumento CI/CD gratuito, integrato nella piattaforma GitLab.

▍2. Supporto per GitLab Pages e Jekyll

Jekyll è un generatore di siti statici che può essere utilizzato all'interno del sistema GitLab Pages per creare siti basati su repository GitLab. Il sistema prende i materiali sorgente e genera un sito statico finale basato su di essi. È possibile gestire l'aspetto e le funzionalità di tali siti modificando il file _config.yml, utilizzato da Jekyll.

▍3. Possibilità di pianificazione dei progetti

Grazie alla pianificazione delle fasi dei progetti, aumenta la facilità di monitoraggio dei problemi e dei loro gruppi. Questo consente di gestire l'organizzazione del lavoro sui progetti, pianificando la loro realizzazione in una data specifica.

▍4. Scalabilità automatica dei runner CI

Grazie alla scalabilità automatica dei runner, responsabili dell'esecuzione di attività specifiche, è possibile risparmiare significativamente sui costi di affitto delle risorse server. Questo è particolarmente importante, specialmente quando si tratta di ambienti in cui il testing dei progetti viene eseguito in parallelo. Inoltre, è cruciale per progetti di grandi dimensioni composti da più repository.

▍5. Strumenti per il monitoraggio dei problemi

Le potenti capacità di monitoraggio dei problemi di GitLab hanno portato molteplici progetti open source ad utilizzare questa piattaforma. GitLab CI/CD consente di eseguire test paralleli su diverse branche di codice. I risultati dei test sono facili da analizzare nell'interfaccia del sistema. Questo distingue favorevolmente GitLab CI/CD da Jenkins.

▍6. Limitazione dell'accesso ai repository

La piattaforma GitLab supporta la limitazione dell'accesso ai repository. Ad esempio, a coloro che lavorano insieme su un progetto in un certo repository possono essere assegnati diritti corrispondenti ai loro ruoli. Questo è particolarmente rilevante per i progetti aziendali.

▍7. Attiva supporto della comunità

Attorno a GitLab si è formata una comunità attiva che promuove lo sviluppo di questa piattaforma e dei suoi strumenti, in particolare GitLab CI/CD. L'integrazione profonda tra GitLab CI/CD e GitLab, tra l'altro, semplifica la ricerca di risposte alle domande che sorgono durante l'utilizzo di GitLab CI/CD.

▍8. Supporto per diversi sistemi di controllo di versione

GitLab CI/CD è un sistema capace di lavorare non solo con il codice ospitato nei repository GitLab. Ad esempio, il codice può essere archiviato in un repository GitHub, mentre il pipeline CI/CD può essere organizzato su GitLab utilizzando GitLab CI/CD.

Confronto tra Jenkins e GitLab CI/CD

Jenkins e GitLab CI/CD sono strumenti di alta qualità, ognuno dei quali è in grado di garantire un normale funzionamento di un pipeline CI/CD. Ma se li si confronta, si scopre che, sebbene simili sotto molti aspetti, presentano anche alcune differenze.

Caratteristiche
Jenkins
GitLab CI/CD

Codice aperto o chiuso
Codice aperto
Codice aperto

Installazione
Richiesto.
Non richiesto, poiché è una funzionalità integrata della piattaforma GitLab.

Caratteristiche uniche
Supporto per plugin.
Profonda integrazione nel sistema di gestione delle versioni.

Supporto
Assente.
Disponibile.

Installazione e configurazione
Non presentano difficoltà
Non presentano difficoltà

Distribuzione autonoma del sistema
Questo è l'unico modo per utilizzare il sistema.
Supportato.

Creazione di pipeline CI/CD
Supportato, utilizzando Jenkins Pipeline.
Supportato.

Monitoraggio delle prestazioni delle applicazioni
Assente.
Disponibile.

Ecosistema
Esistono oltre 1000 plugin.
Il sistema si sviluppa all'interno di GitLab.

API
Supporta un sistema API avanzato.
Offre API per un'integrazione più profonda nei progetti.

Supporto per JavaScript
Disponibile.
Disponibile.

Integrazione con altri strumenti
È supportata l'integrazione con altri strumenti e piattaforme (Slack, GitHub).
Numerosi strumenti per l'integrazione con sistemi di terze parti, in particolare con GitHub e Kubernetes.

Controllo della qualità del codice
Supportato - tramite il plugin SonarQube e altri plugin.
Supportato.

Differenze tra Jenkins e GitLab CI/CD

Dopo aver descritto e confrontato Jenkins e GitLab CI/CD, concentriamoci sulle differenze tra questi strumenti DevOps. Conoscere queste differenze permetterà di capire chi preferisce uno di questi strumenti rispetto all'altro.

  • GitLab CI/CD può controllare completamente i repository Git. Si tratta della gestione dei rami dei repository e di alcune altre funzionalità. Jenkins, pur essendo in grado di lavorare con i repository, non offre lo stesso livello di controllo su di essi come GitLab CI/CD.
  • Jenkins è un progetto open source gratuito. Chi lo sceglie lo distribuisce autonomamente. GitLab CI/CD è incluso nella piattaforma GitLab, ed è una soluzione pronta all'uso.
  • GitLab CI/CD supporta strumenti avanzati di gestione delle attività, che operano a livello di progetto. Questo aspetto di Jenkins è meno sviluppato.

Jenkins e GitLab CI/CD: punti di forza e debolezza

Ora hai un'idea di Jenkins e GitLab CI/CD. Per familiarizzare ulteriormente con questi strumenti, esaminiamo i loro punti di forza e debolezza. Riteniamo che tu abbia già deciso quale strumento ti serve. Speriamo che questa sezione ti permetta di mettere alla prova le tue conoscenze.

▍Punti di forza di Jenkins

  • Un gran numero di plugin.
  • Controllo completo sull'installazione dello strumento.
  • Debugging semplice dei runner.
  • Impostazione semplice dei nodi.
  • Distribuzione del codice semplice.
  • Un ottimo sistema di gestione dei dati.
  • Flessibilità e versatilità.
  • Supporto per vari linguaggi di programmazione.
  • Il sistema è intuitivamente comprensibile.

▍Debolezze di Jenkins

  • Possono sorgere complicazioni nell'uso dei plugin.
  • Nell'uso di Jenkins in piccoli progetti, il tempo necessario per la configurazione autonoma può risultare eccessivo.
  • Mancanza di informazioni analitiche generali sulle catene CI/CD.

▍Punti di forza di GitLab CI/CD

  • Ottima integrazione con Docker.
  • Facile scalabilità dei runner.
  • Esecuzione parallela delle attività che fanno parte delle fasi del pipeline CI/CD.
  • Utilizzo di un modello di grafo aciclico orientato per la configurazione delle relazioni tra i compiti.
  • Alto livello di scalabilità grazie alla possibilità di eseguire i runner in parallelo.
  • Facilità di aggiunta di attività.
  • Facile risoluzione dei conflitti.
  • Sistema di sicurezza affidabile.

▍Debolezze di GitLab CI/CD

  • Per ogni attività è necessario descrivere e caricare/scaricare artefatti.
  • Non è possibile testare i risultati della fusione dei rami prima della loro effettiva fusione.
  • Nella descrizione delle fasi del pipeline CI/CD, attualmente non è possibile evidenziare fasi separate.

Conclusioni

Sia Jenkins che GitLab CI/CD hanno punti di forza e debolezza. La scelta di cosa utilizzare dipende dalle esigenze e dalle caratteristiche specifiche del progetto. Ognuno degli strumenti CI/CD esaminati oggi presenta specifiche peculiarità, pur essendo stati creati per affrontare lo stesso problema. Jenkins è uno strumento autonomo, mentre GitLab CI/CD è parte di una piattaforma destinata alla collaborazione sul codice.

Quando si sceglie un sistema CI/CD, è importante considerare, oltre alle sue funzionalità, anche i costi relativi e ciò con cui sono abituati a lavorare gli ingegneri DevOps che supportano il progetto.

Quali strumenti CI/CD utilizzate?

La battaglia tra Jenkins e GitLab CI/CD

La battaglia tra Jenkins e GitLab CI/CD

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster