Negli ultimi dieci anni, sono stati compiuti notevoli progressi nello sviluppo di strumenti per l'integrazione continua (Continuous Integration, CI) e la consegna continua (Continuous Delivery, CD). L'evoluzione delle tecnologie che integrano 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, con il rilascio di nuove versioni, e nel campo del controllo qualità software (Quality Assurance, QA) emergono continuamente nuovi prodotti. Con una così ampia gamma di opzioni, scegliere gli strumenti giusti può rivelarsi una sfida non da poco.
Tra tutti gli strumenti CI/CD esistenti, ce ne sono due che meritano sicuramente l'attenzione di chi cerca qualcosa in questo ambito. Si tratta di Jenkins e dello strumento GitLab CI/CD, che fa parte della piattaforma GitLab. Jenkins ha più stelle su GitHub. Il repository di GitLab su gitlab.com ha raggiunto un po' più di stelle. Se confrontiamo la popolarità dei repository, scopriremo che Jenkins ha ricevuto 8 volte più stelle rispetto alla piattaforma che include GitLab CI/CD. Tuttavia, nella scelta di uno strumento CI/CD, questo non è l'unico indicatore a cui prestare attenzione. Ce ne sono molti altri, e questo spiega perché in molti confronti Jenkins e GitLab CI/CD risultano molto simili.
Prendiamo, ad esempio, i dati della piattaforma G2, che raccoglie recensioni su una vasta gamma di prodotti e le valutazioni attribuite dagli utenti. Qui, la valutazione media , calcolata su 288 recensioni, è di 4,3 stelle. Per quanto riguarda ci sono 270 recensioni, la valutazione media di questo strumento è di 4,4 stelle. Non saremmo in errore affermando che Jenkins e GitLab CI/CD competono alla pari. È interessante notare che il progetto Jenkins è nato nel 2011 ed è diventato da allora lo strumento preferito dai tester. Tuttavia, il progetto GitLab CI/CD, lanciato nel 2014, ha conquistato posizioni molto elevate grazie alle funzionalità avanzate offerte da questa piattaforma.
Parlando della popolarità di Jenkins rispetto ad altre piattaforme simili, è importante sottolineare che, dopo aver pubblicato un articolo che confrontava le piattaforme Travis CI e Jenkins, abbiamo condotto un sondaggio. Hanno partecipato 85 utenti. Ai partecipanti è stato chiesto di scegliere lo strumento CI/CD che preferivano di più. Il 79% ha scelto Jenkins, il 5% ha scelto Travis CI e il 16% ha indicato di preferire altri strumenti.

Risultati del sondaggio
Tra gli altri strumenti CI/CD, il più frequentemente menzionato è stato GitLab CI/CD.
Se ti occupi seriamente di DevOps, è fondamentale scegliere attentamente gli strumenti adatti, considerando le caratteristiche del progetto, il budget e altri requisiti. Per aiutarti a fare la scelta giusta, intendiamo condurre un'analisi su Jenkins e GitLab CI/CD. Speriamo che questo ti aiuti a prendere la decisione corretta.
Introduzione a Jenkins

Jenkins è uno strumento CI/CD ampiamente conosciuto e flessibile, progettato per automatizzare numerose attività correlate ai progetti software. È completamente scritto in Java e distribuito sotto licenza MIT. Ha un potente insieme di funzionalità dedicate all'automazione di attività, come costruzione, test, distribuzione, integrazione e rilascio del software. Questo strumento può essere utilizzato su diversi sistemi operativi, tra cui macOS, Windows e vari distributori Linux, come OpenSUSE, Ubuntu e Red Hat. Sono disponibili pacchetti di installazione di Jenkins per diversi sistemi operativi, e questo strumento può essere installato anche in Docker o su qualsiasi sistema che disponga di JRE (Java Runtime Environment).
Gli sviluppatori di Jenkins hanno creato un altro progetto, Jenkins X, progettato per funzionare in un ambiente Kubernetes. Jenkins X integra Helm, il server Jenkins CI/CD, Kubernetes e altri strumenti per la creazione di pipeline CI/CD conformi alle migliori pratiche DevOps. Ad esempio, qui viene utilizzato GitOps.
Tra i punti di forza di Jenkins c'è anche 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'integrazione di Jenkins con diverse tecnologie. Negli script è possibile utilizzare sistemi di autenticazione, il che consente, ad esempio, di collegarsi a vari sistemi riservati.
Durante il funzionamento del pipeline di Jenkins, è possibile monitorare ciò che accade in ciascuna fase, verificando se i vari passaggi sono stati completati con successo o meno. È possibile osservare tutto questo, sebbene non tramite un'interfaccia grafica, ma sfruttando le funzionalità del terminale.
Caratteristiche di Jenkins
Tra le caratteristiche più riconosciute di Jenkins ci sono la facilità di configurazione, l'alto livello di automazione delle varie operazioni e una documentazione eccellente. Quando si tratta di affrontare le sfide DevOps, Jenkins è considerato uno strumento molto affidabile, che normalmente non richiede un monitoraggio costante di tutto il processo di gestione del progetto. Non è lo stesso per altri strumenti CI/CD. Parliamo di alcune delle principali funzionalità di Jenkins.
▍1. Gratuito, open source, supporto per molte piattaforme
Jenkins può funzionare su macOS, Windows e Linux. Può anche operare in un ambiente Docker, consentendo l'esecuzione uniforme e rapida di compiti automatizzati. Questo strumento può inoltre essere eseguito come un servlet in contenitori supportati da Java, come Apache Tomcat e GlassFish. L'installazione di Jenkins è ben documentata. .
▍2. Un'ecosistema sviluppata di plugin
L'ecosistema dei plugin di Jenkins appare molto più sviluppato rispetto a quello di altri strumenti CI/CD. Attualmente, esistono oltre 1500 plugin per Jenkins. Questi plugin sono progettati per affrontare una vasta gamma di compiti, permettendo di automatizzare i progetti più disparati. La vasta scelta di moduli gratuiti significa che chi utilizza Jenkins non ha un'immediata necessità di acquistare costosi plugin a pagamento. Esiste la possibilità Jenkins con molti strumenti DevOps.
▍3. Installazione e configurazione semplice
Jenkins è abbastanza semplice da installare e configurare. Anche il processo di aggiornamento è molto intuitivo. Va nuovamente menzionata la qualità della documentazione, poiché in essa si possono trovare risposte a molte 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. È cresciuta attorno a Jenkins una grande comunità di utenti e sviluppatori che aiutano nello sviluppo del progetto. La comunità è uno dei fattori che favoriscono la crescita di Jenkins.
▍5. Disponibilità di REST API
Durante l'uso di Jenkins, è possibile utilizzare REST API, il che amplia le capacità del sistema. L'API per l'accesso remoto al sistema è disponibile in tre varianti: XML, JSON con supporto JSONP, Python. Pagina della documentazione che fornisce dettagli sul lavoro con REST API di Jenkins.
▍6. Supporto per l'esecuzione parallela dei task
Jenkins supporta il parallelismo nelle attività DevOps. Può essere facilmente integrato con strumenti appropriati e inviare notifiche sui risultati delle attività. L'esecuzione dei test del codice può essere accelerata organizzando una build parallela del progetto utilizzando diverse macchine virtuali.
▍7. Supporto per operare in ambienti distribuiti
Jenkins consente di organizzare build distribuiti utilizzando più computer. Questa funzione è utile nei grandi progetti e segue uno schema di lavoro in cui esiste un server Jenkins principale e diverse macchine secondarie. Le macchine secondarie possono essere utilizzate anche quando è necessario organizzare test del progetto in ambienti diversi. Queste caratteristiche distinguono vantaggiosamente Jenkins da altri progetti simili.
Introduzione a GitLab

può essere considerato uno degli strumenti più recenti e amati dagli ingegneri DevOps. Questo strumento open source gratuito è integrato nel sistema di controllo versione GitLab. La piattaforma GitLab ha una versione community che supporta la gestione dei repository, strumenti per il tracciamento dei problemi, organizzazione delle revisioni del codice e meccanismi orientati alla creazione di documentazione. Le aziende possono installare GitLab localmente, collegando questo sistema con Active Directory e server LDAP per una gestione sicura dell'autenticazione e autorizzazione degli utenti.
un video tutorial che ti aiuterà a scoprire come creare pipeline CI/CD utilizzando le funzionalità 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 oltre 25.000 utenti. Su server di questo tipo è possibile creare sistemi ad alta disponibilità.
GitLab CI/CD e il progetto principale di GitLab sono scritti in Ruby e Go. Sono rilasciati sotto licenza MIT. Oltre alle normali funzionalità degli strumenti CI/CD, GitLab CI/CD supporta anche funzionalità aggiuntive relative, ad esempio, alla pianificazione del lavoro.
Integrare GitLab CI/CD in un progetto è molto semplice. Utilizzando GitLab CI/CD, il processo di gestione del codice del progetto viene suddiviso in fasi, ognuna delle quali può comprendere più task eseguiti in un determinato ordine. I task possono essere configurati in modo dettagliato.
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 suo progresso seguendo lo stato delle attività. Di conseguenza, utilizzare GitLab CI/CD è molto comodo, forse più di 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 sua documentazione di qualità, e le sue funzionalità sono facili e comode da utilizzare. Se non conosci ancora GitLab CI/CD, il seguente elenco delle sue possibilità ti darà una panoramica di cosa aspettarti. È importante notare che molte di queste funzionalità sono collegate alla piattaforma GitLab stessa, in cui è integrato GitLab CI/CD.
▍1. Popolarità
GitLab CI/CD è uno strumento relativamente nuovo che ha trovato ampia applicazione. È diventato gradualmente uno strumento CI/CD estremamente popolare, utilizzato per il testing automatizzato e il deployment del software. È semplice 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 usato all'interno del sistema GitLab Pages per creare siti basati su repository GitLab. Il sistema prende il materiale sorgente e genera un sito statico pronto. È possibile gestire l'aspetto e le funzionalità di tali siti modificando il file _config.yml, utilizzato da Jekyll.
▍3. Funzionalità di pianificazione dei progetti
Grazie alla possibilità di pianificare le fasi dei progetti, aumenta la comodità nel monitoraggio dei problemi e dei loro gruppi. Questo consente di gestire l'organizzazione del lavoro sui progetti, pianificando il loro completamento per una data specifica.
▍4. Scalabilità automatica dei runner CI
Grazie alla scalabilità automatica dei runner, responsabili dell'esecuzione di compiti specifici, è possibile risparmiare notevolmente sui costi di affitto delle risorse server. Questo è molto importante, soprattutto nelle situazioni in cui i progetti sono testati in parallelo. Inoltre, è fondamentale per grandi progetti composti da più repository.
▍5. Strumenti per il monitoraggio dei problemi
Le potenti capacità di tracking dei problemi di GitLab hanno portato molti progetti open source a utilizzare questa piattaforma. GitLab CI/CD consente di eseguire test paralleli su diverse branche di codice. I risultati dei test sono facilmente analizzabili 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 collaborano a un progetto in un determinato 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 contribuisce allo sviluppo di questa piattaforma e dei suoi strumenti, in particolare di GitLab CI/CD. L'integrazione profonda tra GitLab CI/CD e GitLab, tra l'altro, semplifica la ricerca di risposte a domande che sorgono durante l'utilizzo di GitLab CI/CD.
▍8. Supporto per diversi sistemi di controllo versione
GitLab CI/CD è un sistema che può funzionare non solo con il codice ospitato nei repository di GitLab. Ad esempio, il codice può essere archiviato in un repository GitHub, mentre il pipeline CI/CD può essere organizzato su base GitLab utilizzando GitLab CI/CD.
Confronto tra Jenkins e GitLab CI/CD
Jenkins e GitLab CI/CD sono strumenti molto validi, ognuno dei quali è in grado di garantire il corretto funzionamento del pipeline CI/CD. Tuttavia, se li confrontiamo, si scopre che, sebbene siano simili sotto molti aspetti, differiscono in alcuni punti.
Caratteristica
Jenkins
GitLab CI/CD
Codice aperto o chiuso
Codice aperto
Codice aperto
Installazione
Richiesto.
Non richiesto, poiché questa è una funzionalità integrata della piattaforma GitLab.
Caratteristiche uniche
Supporto per i plugin.
Integrazione profonda nel sistema di gestione delle versioni.
Supporto
Assente.
Presente.
Installazione e configurazione
Non presenta difficoltà
Non presenta difficoltà
Installazione autonoma del sistema
Questo è l'unico modo per utilizzare il sistema.
Supportato.
Creazione di pipeline CI/CD
Supportato, utilizza Jenkins Pipeline.
Supportato.
Monitoraggio delle prestazioni delle applicazioni
Assente.
Presente.
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 JavaScript
Presente.
Presente.
Integrazione con altri strumenti
È supportata l'integrazione con altre piattaforme e strumenti (Slack, GitHub).
Numerosi strumenti per l'integrazione con sistemi esterni, in particolare con GitHub e Kubernetes.
Controllo della qualità del codice
Supportato — attraverso 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. Comprendere queste differenze aiuta a valutare chi preferisce uno di questi strumenti rispetto all'altro.
- GitLab CI/CD può controllare completamente i repository Git. Ciò riguarda la gestione dei rami e alcune altre funzionalità. Jenkins, pur potendo lavorare con i repository, non fornisce lo stesso livello di controllo come GitLab CI/CD.
- Jenkins è un progetto open source gratuito. Chi lo sceglie deve installarlo da solo. Al contrario, GitLab CI/CD è integrato nella piattaforma GitLab, rappresentando una soluzione pronta all'uso.
- GitLab CI/CD supporta strumenti avanzati per la gestione dei task a livello di progetto. Questo aspetto di Jenkins è meno sviluppato.
Jenkins e GitLab CI/CD: punti di forza e di debolezza
Ora avete un’idea di Jenkins e GitLab CI/CD. Per approfondire la vostra conoscenza di questi strumenti, esaminiamo i loro punti di forza e di debolezza. Ci aspettiamo che abbiate già preso una decisione su quale strumento vi serve. Speriamo che questa sezione vi aiuti a verificarvi.
▍Punti di forza di Jenkins
- Un gran numero di plugin.
- Completamente controllato sulla configurazione dello strumento.
- Facile debug dei runner.
- Facile configurazione dei nodi.
- Facile distribuzione del codice.
- Ottimo sistema di gestione delle credenziali.
- Flessibilità e versatilità.
- Supporto per diversi linguaggi di programmazione.
- Il sistema è comprensibile a livello intuitivo.
▍Punti di debolezza di Jenkins
- Possono sorgere complessità nell’utilizzo dei plugin.
- Nell’uso di Jenkins in piccoli progetti, il tempo necessario per la configurazione autonoma può risultare eccessivo.
- Mancanza di analisi generali sulle pipeline CI/CD.
▍Punti di forza di GitLab CI/CD
- Buona integrazione con Docker.
- Facile scalabilità dei runner.
- Esecuzione parallela delle attività incluse nelle fasi del pipeline CI/CD.
- Utilizzo di un modello di grafo aciclico orientato per configurare le relazioni tra le attività.
- Elevato livello di scalabilità grazie alla possibilità di eseguire runner in parallelo.
- Facilità di aggiungere attività.
- Semplice 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 branch prima della loro effettiva fusione.
- Nella descrizione delle fasi del pipeline CI/CD non è possibile attualmente evidenziare fasi separate.
Risultati
Sia Jenkins che GitLab CI/CD hanno punti di forza e debolezze. La risposta alla domanda su cosa scegliere dipende dalle esigenze e dalle specifiche del progetto. Ogni strumento CI/CD trattato oggi presenta caratteristiche particolari, anche se tutti servono a risolvere la stessa problematica. Jenkins è uno strumento autonomo, mentre GitLab CI/CD è parte di una piattaforma progettata per la collaborazione sul codice.
Quando si sceglie un sistema di CI/CD, è importante considerare non solo le sue funzionalità, ma anche i costi potenziali e le preferenze degli ingegneri DevOps che sostengono il progetto.
Quali strumenti CI/CD usate?
Fonte: habr.com
