Cos'è Jenkins? Storia, architettura, pipeline e vantaggi
Pubblicato: 2020-05-01Per i team che desiderano integrare le diverse fasi di DevOps, possono farlo attraverso l'integrazione continua. Sono disponibili diversi strumenti per aiutare a eseguire questa integrazione. Uno dei più popolari è Jenkins. Tuttavia, prima di saltare la pistola e iniziare a mettere in funzione questo strumento, devi capire di cosa si tratta esattamente, come funziona, quali funzionalità viene fornito e quali vantaggi offre rispetto ad altri strumenti simili.
Quando Jenkins è stato lanciato, era solo uno strumento di integrazione continua open source. Tuttavia, dopo i recenti aggiornamenti, è diventato uno strumento in grado di svolgere due compiti: integrazione continua e consegna continua. Ora è uno strumento che aiuta anche a organizzare la distribuzione delle applicazioni. Questo blog intende coprire tutti i dettagli che dovresti sapere su Jenkins prima di iniziare a usarlo nei tuoi progetti IT.
Sommario
Storia di Jenkins
Proprio come abbiamo tante storie interessanti sullo sviluppo di così tante tecnologie e strumenti nel corso degli anni, ne abbiamo una anche per Jenkins. Risale al 2004, Kohsuke Kawaguchi, lo sviluppatore di Jenkins, lavorava con Sun Microsystems come sviluppatore Java.
Kawaguchi non sapeva che il futuro aveva qualcosa di molto speciale in serbo per lui. A quel tempo, Kawaguchi era coinvolto in diversi progetti di sviluppo. Non gli piaceva rompere le build a causa di un errore del codice. Questo gli ha fatto cercare qualcosa che potesse aiutarlo a sapere se il codice funzionerà o meno prima che venga eseguito il commit nel repository.
Questa curiosità ha aperto la strada allo sviluppo di un server di automazione chiamato Hudson. Nel 2011 c'è stata una famigerata disputa tra la comunità open source indipendente di Hudson e Oracle, che ora ha Sun Microsystems sotto il suo ombrello.
Questa disputa ha portato a un fork, che è stato chiamato Jenkins. Sia Jenkins che Hudson hanno continuato a esistere per molto tempo; tuttavia, Jenkins era la scelta più preferita. Il progetto Hudson è stato interrotto nel gennaio 2020. Jenkins è ancora attivo.

Cos'è Jenkins?
Jenkins può essere definito uno strumento di automazione utilizzato dai team DevOps che cercano di portare un'integrazione continua nei loro progetti. È un software open source costruito in Java. Viene utilizzato durante il ciclo di vita dello sviluppo del software.
Non solo in fase di sviluppo e test, ma anche in fase di implementazione. Consente agli sviluppatori di integrare le modifiche molto facilmente nei loro progetti. Jenkins viene utilizzato anche per la fornitura continua di progetti software.
Ulteriori informazioni su: risoluzione di scenari in tempo reale con DevOps
Come funziona l'integrazione continua?
L'integrazione continua (CI) è parte integrante del processo di sviluppo del software. Può consistere in una serie di attività diverse, incluso l'uso di funzionalità uniche nel repository, lo sviluppo di funzionalità e la correzione di bug, tra le altre.
Uno strumento di integrazione continua, come Jenkins, è ottimo per identificare i problemi con le origini delle applicazioni correnti e fornisce una risposta rapida controllando il processo di integrazione con l'aiuto di funzionalità di compilazione e test automatizzate.
L'integrazione continua è derivata da un modello di programmazione associato alla metodologia Agile. Tuttavia, il concetto può ancora essere applicato a tutti quei modelli di programmazione che sono di natura iterativa.
Anche i modelli a cascata e altri approcci di sviluppo simili possono trarre vantaggio da ciò che l'integrazione continua ha da offrire. La CI lavora spesso in tandem con la distribuzione continua (CD) per fornire codice eseguibile alla produzione a un ritmo molto più rapido e in modo automatizzato. Di seguito sono elencate le pratiche CI comuni:
- Impegno regolare del codice
- Costruisci la messa in scena
- Una macchina di costruzione dedicata all'integrazione
- Feedback continuo
- Classificazione dei test degli sviluppatori
L'integrazione continua può essere rilasciata con la frequenza che ritieni appropriata in base al tuo progetto e alla tua azienda. Pertanto, le aziende che utilizzano la CI hanno versioni più regolari rispetto a quelle che utilizzano i tradizionali processi di sviluppo del software.
Sempre più aziende hanno iniziato a utilizzare la CI a causa di un semplice fatto: anche la più piccola modifica del codice potrebbe dare origine a una nuova build. CI può fornire un feedback continuo durante lo sviluppo del software.
Questo aiuta i team DevOps a eliminare gli errori in ogni fase dello sviluppo. Rileva anche problemi abbastanza presto nel processo di sviluppo. Questo rende questi problemi meno dirompenti, non troppo complessi e facili da gestire.
Leggi: I migliori strumenti DevOps sul mercato
Come funziona la consegna continua?
La distribuzione continua è una parte del processo di sviluppo del software che consente di procedere con lo sviluppo in modo tale da essere sempre pronti a rilasciare il software per la produzione. Ecco alcune volte in cui la consegna continua si rivela ulteriormente fruttuosa:
1. Il team DevOps garantisce che il software sia pronto per l'implementazione anche quando lo sviluppo delle funzionalità è in corso
2. Il software è pronto per essere distribuito durante tutto il ciclo di sviluppo del software
3. La distribuzione tramite pulsanti è una realtà per diverse versioni di software in diversi ambienti on-demand
Come si può ottenere la consegna continua? Il primo requisito è che il software sia già in fase di integrazione continua. Il team di sviluppo dovrebbe quindi creare gli eseguibili ed eseguire test su di essi per rilevare errori o bug. Inoltre, è molto importante testare gli eseguibili in diversi ambienti di produzione per garantire che il software sia pronto per essere inviato in produzione in qualsiasi momento. Per questo, è necessario disporre di una distribuzione.
L'automazione di Jenkins consente alle aziende di accelerare notevolmente il processo di sviluppo del software. Jenkins è in grado di integrare diversi tipi di processi del ciclo di vita dello sviluppo software, inclusi costruzione, test, distribuzione e altri. I plugin sono molto importanti per garantire un'integrazione continua. Se stai cercando di aggiungere un nuovo strumento a Jenkins, dovrai prima assicurarti di installare un plug-in per esso.
Leggi: Domande e risposte sull'intervista a Jenkins
Cos'è l'oleodotto Jenkins?
Una pipeline Jenkins è una combinazione di lavori, attività o eventi collegati tra loro in una sequenza. In altre parole, è un gruppo di plug-in che consentono di integrare e implementare facilmente le pipeline di distribuzione continua. L'automazione estensibile funziona per supportare una pipeline nella creazione di pipeline di consegna sia complesse che semplici sotto forma di codice e con l'aiuto di un linguaggio specifico del dominio o DSL.
Parliamo ora un po' delle pipeline di consegna continua e di come funzionano. La caratteristica di base di una pipeline Jenkins è che ogni evento, attività o lavoro che contiene dipende in un modo o nell'altro da uno o più di questi eventi, lavori o attività. Le pipeline di distribuzione continua presentano stati diversi, come build, test, deployment, release. Tutti questi stati sono collegati tra loro.
Una pipeline di distribuzione continua è una sequenza in cui funzionano gli eventi di ciascuno di questi stati. È un'espressione automatizzata che elabora i processi necessari per ottenere il software di controllo della versione. Tutte le modifiche apportate al software devono passare attraverso diversi processi complessi prima che il software venga rilasciato. Questo processo garantisce inoltre che il software sia sviluppato in modo ripetibile e affidabile e coinvolge più fasi di test e distribuzione, durante le quali il software procede.
JenkinsFile è un file di testo utilizzato per definire le pipeline Jenkins. JenkisFile viene spesso utilizzato per implementare pipeline sotto forma di codice e l'intero processo viene definito utilizzando DSL. Puoi anche usare JenkinsFile per annotare i passaggi da seguire per eseguire le pipeline Jenkins. Di seguito sono indicati alcuni vantaggi dell'utilizzo di JenkinsFile:

- Semplifica la revisione del codice sulla pipeline.
- Può aiutarti a eseguire richieste pull per tutte le pipeline che hai creato per rami diversi.
- È l'unica fonte per le tue pipeline che può essere modificata da utenti diversi.
- Può aiutarti a condurre un audit sulla tua pipeline Jenkins.
JenkinsFile è definito utilizzando due tipi di sintassi
Sintassi delle pipeline dichiarative
La creazione di pipeline è molto più semplice con questa sintassi. È dotato di una gerarchia ben consolidata che aiuta nella creazione di pipeline. Ti offre modi semplici per esercitare il controllo su ogni aspetto associato all'esecuzione delle pipeline.
Sintassi della pipeline con script
Utilizza un esecutore leggero e funziona su Jenkins master. Ha il proprio set di risorse che utilizza per convertire le pipeline in comandi atomici. Come è abbastanza evidente dalle loro definizioni, entrambe queste sintassi sono abbastanza diverse l'una dall'altra. Non solo questo, ma sono anche definiti in modi diversi.
Perché dovresti usare la pipeline Jenkins?
Jenkins automatizza il processo di sviluppo del software attraverso le sue capacità di integrazione continua. È possibile utilizzare casi d'uso diversi per creare una serie di processi di automazione e quindi utilizzare la pipeline Jenkins per eseguirli tutti. Di seguito sono elencati alcuni motivi per utilizzare la pipeline Jenkins:
- Poiché è implementato sotto forma di codice, la pipeline Jenkins può avere un numero di utenti che possono modificare ed eseguire il processo.
- Supporta progetti di dimensioni maggiori del solito. È possibile eseguire più progetti alla volta o utilizzare pipeline in un ciclo.
- Sono robusti. Non devi preoccuparti se il tuo server si riavvia in circostanze impreviste. L'oleodotto Jenkins riprenderebbe automaticamente.
- Il processo della pipeline può essere sospeso e non ripreso finché non si riceve l'input dell'utente.
Architettura Jenkins
In questa sezione, concentreremo la nostra discussione su come Jenkins aiuta sia gli sviluppatori che i tester? Discutiamo dell'integrazione continua di Jenkins per capirlo.
All'inizio, gli sviluppatori apportano tutte le modifiche che desiderano nel codice sorgente. Questo codice è archiviato nel repository Git. La modifica viene seguita e il commit di tali modifiche. Il server Jenkins sta facendo il suo lavoro e tiene traccia delle modifiche apportate ai file archiviati nel repository. Le modifiche apportate dagli sviluppatori vengono rilevate dal server Jenkins. Jenkins quindi estrae queste modifiche e inizia a lavorare su una nuova build del software basata su tali modifiche,
Il team interessato riceve una notifica se la build non riesce. D'altra parte, se la compilazione ha esito positivo, Jenkins la distribuisce sul server di prova. Gli sviluppatori vengono informati sullo sviluppo della build e sui risultati dei test. Questo ciclo continua a ripetersi.
Ora che capiamo come funziona Jenkins, sarà più facile per noi distinguere la differenza nel suo funzionamento e quella dei modi che sono stati utilizzati per il rilascio e la distribuzione prima di esso.
Quindi, prima che Jenkins venisse alla ribalta, il processo prevedeva la creazione e il test del codice sorgente completo. Individuare e correggere errori e bug non era affatto un compito facile che ritardava la consegna del software. Gli sviluppatori hanno dovuto aspettare molto tempo per i risultati dei test. La distribuzione avveniva manualmente.
Dopo Jenkins, tutte le modifiche al codice sorgente vengono testate una volta apportate. Gli sviluppatori non sono tenuti a esaminare il codice sorgente completo per individuare errori e bug. Il lancio di versioni di build è ora molto più frequente. Gli sviluppatori vengono informati sui risultati del test di tutte le modifiche e dei commit. Dopo aver eseguito il commit delle modifiche, il server Jenkins può iniziare a eseguire altri processi.
Architettura distribuita Jenkins
Jenkins gestisce le build con l'aiuto dell'architettura master-slave. Le unità master e slave comunicano tra loro utilizzando il protocollo IP/TCP. Ecco un piccolo download su come funziona il tutto.
Maestro Jenkins
Questo è il server principale di Jenkins. Gestisce una serie di attività che includono, a titolo esemplificativo ma non esaustivo, la pianificazione dei lavori di compilazione, la registrazione e la presentazione dei risultati di compilazione, l'invio di build agli slave per l'esecuzione, il monitoraggio di tutti gli slave offline e online e altro. Master Jenkins è in grado di eseguire direttamente lavori di compilazione.
Schiavo Jenkins
Funziona sul server remoto. Il server Jenkins segue le richieste del master Jenkins ed è compatibile con tutti i sistemi operativi. I lavori di costruzione inviati dal master vengono eseguiti dallo slave. Il progetto può essere opportunamente configurato per scegliere una specifica macchina slave.
Vantaggi di Jenkins
1. Jenkins è uno strumento open source estremamente facile da installare e utilizzare. Non hai bisogno di componenti aggiuntivi per usarlo
2. È gratuito e disponibile per essere utilizzato con diverse piattaforme, come Windows, Linux, macOS e altre
3. È ampiamente utilizzato, quindi trovare supporto nelle comunità online non è un grosso problema
4. Jenkins automatizza tutto il lavoro di integrazione. I problemi di integrazione sono scarsi e quindi aiuta a risparmiare tempo e denaro durante il ciclo di vita del progetto.
5. È facile da configurare, estendere e modificare. Consente la generazione istantanea di test e la creazione, l'automazione e la distribuzione di codice su piattaforme diverse
6. Jenkins può essere configurato per eseguire correttamente i concetti CI e CD
7. Può facilmente rilevare e risolvere i problemi. Il software è sempre pronto per un rilascio improvviso
8. Supporta una varietà di plugin, che consente una migliore flessibilità
9. Aiuta a rilevare gli errori molto presto, risparmiando così agli sviluppatori molto tempo e duro lavoro
Aumenta la produttività con i plugin Jenkins
Ecco alcuni dei plugin più comuni utilizzati dagli sviluppatori.

1. Plugin per la generazione di lavoro
Mantenere i lavori del progetto in un'organizzazione in crescita o più grande è un po' difficile, soprattutto perché gli sviluppatori lavorano spesso su rami e rilasci diversi. Sebbene tu sia pronto a consentire agli sviluppatori di creare lavori da soli, non sei sicuro che saranno in grado di soddisfare gli standard aziendali. Questo è un grande dilemma. Questo plug-in ti consente di definire modelli, che i tuoi sviluppatori possono utilizzare per creare lavori. È possibile disabilitare l'accesso alla configurazione del modello utilizzando il plug-in di autorizzazione basato sui ruoli.
2. Plugin per le statistiche di costruzione globali
Conoscere la capacità, le capacità e l'utilizzo attuali è molto importante per prepararsi ai requisiti di sistema o alla pianificazione della capacità. Dovresti essere consapevole del numero di build che si verificano regolarmente. Devi anche conoscere il tempo necessario per rilasciare le build. Questo plugin ti fornisce tutte le informazioni necessarie per rispondere a tutte queste domande.
3. Generatore di richieste pull GitLab/GitHub
Puoi utilizzare questo modello per automatizzare il processo di revisione del codice in GitLab/GitHub a un livello superiore al normale. Per ogni richiesta pull, puoi aspettarti che questo plug-in non solo esegua la build, ma crei anche risultati e condivida lo stato con una richiesta pull o raccolga importanti analisi statiche. Questo plugin dice molto sul codice che deve essere unito. È anche possibile definire l'unione automatica in alcune circostanze utilizzando questo plugin.
Conclusione
Questo blog fornisce una solida idea di come funziona Jenkins e di come può essere utilizzato per implementare diverse idee di progetto utilizzando CI/CD. È uno degli strumenti DevOps più preferiti in questi giorni che rende le cose molto facili con la sua interfaccia e plug-in efficaci.
Se sei interessato a saperne di più sullo sviluppo dello stack completo, dai un'occhiata al Diploma PG di upGrad e IIIT-B in Sviluppo software full stack, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, oltre 9 progetti e incarichi, Status di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.