Cos'è Jenkins? Perché utilizzare lo strumento di integrazione continua (CI)?
Cos'è Jenkins?
Jenkins è un server di integrazione continua open source scritto in Java per orchestrare una catena di azioni per realizzare il processo di Integrazione Continua in modo automatizzato. Jenkins supporta l'intero ciclo di vita dello sviluppo del software, dalla creazione, al test, alla documentazione del software, alla distribuzione e ad altre fasi del ciclo di vita dello sviluppo del software.
Jenkins è un'applicazione ampiamente utilizzata in tutto il mondo che ha circa 300 installazioni e cresce di giorno in giorno. Utilizzando Jenkins, le aziende di software possono accelerare il loro processo di sviluppo software, poiché Jenkins può automatizzare build e test a un ritmo rapido.
È un'applicazione basata su server e richiede un server Web come Apache Tomcat. Il motivo per cui il software Jenkins è diventato così popolare è dovuto al monitoraggio delle attività ripetute che si verificano durante lo sviluppo di un progetto. Ad esempio, se il tuo team sta sviluppando un progetto, Jenkins testerà continuamente le build del tuo progetto e ti mostrerà gli errori nelle prime fasi dello sviluppo.
Cos'è l'integrazione continua?
Integrazione continua è un processo di integrazione più volte delle modifiche al codice apportate da più sviluppatori in un unico progetto. Il software viene testato immediatamente dopo il commit del codice. Con ogni commit del codice, il codice viene creato e testato. Se il test viene superato, la build viene testata per la distribuzione. Se la distribuzione ha esito positivo, il codice viene inviato alla produzione.
Il commit, la creazione, il test e la distribuzione sono un processo continuo e da qui il nome integrazione/distribuzione continua.
Come funziona Jenkins?
Jenkins è un'applicazione basata su server e richiede un server Web come Apache Tomcat per essere eseguito su varie piattaforme come Windows, Linux, macOS, Unix, ecc. Per utilizzare Jenkins, è necessario creare pipeline, ovvero una serie di passaggi eseguiti da un server Jenkins. Jenkins Continuous Integration Pipeline è un potente strumento costituito da una serie di strumenti progettati per host, monitore, compilare e test codice o modifiche al codice, come:
- Server di integrazione continua (Jenkins, Bamboo, CruiseControl, TeamCity, e altri)
- Strumento di controllo del codice sorgente (ad esempio, CVS, SVN, GIT, Mercurial, Perforce, ClearCase e altri)
- Strumento di costruzione (Crea, ANT, Maven, Ivy, Gradle, e altri)
- Quadro di test di automazione (Selenium, Appium, TestComplete, UFT e altri)
Storia di Jenkin
- Kohsuke Kawaguchi, a Java Lo sviluppatore, che lavorava presso SUN Microsystems, era stanco di creare codice e correggere errori ripetutamente. Nel 2004, ha creato un server di automazione chiamato Hudson che automatizza le attività di creazione e test.
- Nel 2011, Oracle che possedeva Sun Microsystems ha avuto una disputa con la comunità open source di Hudson, quindi hanno biforcato Hudson e lo hanno ribattezzato Jenkins.
- Sia Hudson che Jenkins continuarono a operare in modo indipendente. Ma in un breve lasso di tempo, Jenkins acquisì molti progetti e collaboratori mentre Hudson rimase con solo 32 progetti. Con il tempo, Jenkins è diventato più popolare e Hudson non è più mantenuto.
Perché utilizzare l'integrazione continua con Jenkins?
Qualcuno potrebbe pensare che il vecchio modo di sviluppare il software sia il modo migliore. Cerchiamo di capire i vantaggi di CI con Jenkins con il seguente esempio
Immaginiamo che ci siano circa 10 sviluppatori che stanno lavorando su a repository condiviso. Alcuni sviluppatori completano la propria attività in 25 giorni mentre altri impiegano 30 giorni per completarla.
Prima di Jenkins | Dopo Jenkins |
---|---|
Una volta che tutti gli sviluppatori avevano completato le attività di codifica assegnate, erano soliti impegnare il codice tutto nello stesso tempo. Later, La build viene testata e distribuita.
Il commit del codice è stato creato e il ciclo di test era molto raro e una singola build è stata eseguita dopo molti giorni. |
Il codice viene creato e testato non appena lo sviluppatore esegue il commit del codice. Jenkin creerà e testerà il codice molte volte durante il giorno
Se la compilazione ha esito positivo, Jenkins distribuirà l'origine nel server di test e avviserà il team di distribuzione. Se la compilazione fallisce, Jenkins notificherà gli errori al team di sviluppatori. |
Poiché il codice è stato creato tutto in una volta, alcuni sviluppatori dovrebbero attendere fino a quando altri sviluppatori non finiranno di scrivere per verificare la loro build | Il codice viene creato immediatamente dopo il commit di uno sviluppatore. |
Non è un compito facile isolare, rilevare e correggere errori per più commit. | Poiché il codice viene creato dopo ogni commit di un singolo sviluppatore, è facile individuare il codice che ha causato il fallimento della compilazione |
Compilazione del codice e processo di prova sono interamente manuali, quindi ci sono molte possibilità di fallimento. | Processo automatizzato di creazione e test che consente di risparmiare tempi e ridurre i difetti. |
Il codice viene distribuito una volta corretti e testati tutti gli errori. | Il codice viene distribuito dopo ogni compilazione e test riusciti. |
Il ciclo di sviluppo è lento | Il ciclo di sviluppo è veloce. Le nuove funzionalità sono più facilmente disponibili per gli utenti. Aumenta i profitti. |
Caso di studio reale di integrazione continua
Sono sicuro che tutti voi siate a conoscenza del vecchio telefono Nokia. Nokia implementava una procedura chiamata nightly build. Dopo molteplici commit da parte di diversi sviluppatori durante il giorno, il software veniva creato ogni notte. Poiché il software veniva creato solo una volta al giorno, isolare, identificare e correggere gli errori in una base di codice di grandi dimensioni è estremamente complicato.
Later, hanno adottato l'approccio dell'integrazione continua. Il software è stato creato e testato non appena uno sviluppatore ha inviato il codice. Se viene rilevato un errore, il rispettivo sviluppatore può correggere rapidamente il difetto.
Plugin Jenkins
Per impostazione predefinita, Jenkins viene fornito con un set limitato di funzionalità. Se desideri integrare la tua installazione Jenkins con strumenti di controllo della versione come Git, devi installare i plug-in relativi a Git. Infatti, per l'integrazione con strumenti come Maven, Amazon EC2, devi installare i rispettivi plugin nel tuo Jenkins.
Vantaggi dell'utilizzo di Jenkins
- Jenkins è gestito dalla comunità che è molto aperta. Ogni mese tengono riunioni pubbliche e raccolgono input dal pubblico per lo sviluppo del progetto Jenkins.
- Finora sono stati chiusi circa 280 ticket e il progetto pubblica una versione stabile ogni tre mesi.
- Con la crescita della tecnologia, cresce anche Jenkins. Finora Jenkins ha circa 320 plugin pubblicati nel suo database dei plugin. Con i plugin, Jenkins diventa ancora più potente e ricco di funzionalità.
- Lo strumento Jenkins supporta anche l'architettura basata su cloud, consentendo di distribuire Jenkins su piattaforme basate su cloud.
- Il motivo per cui Jenkins è diventato popolare è che è stato creato da uno sviluppatore per sviluppatori.
Svantaggi dell'utilizzo di Jenkins
Sebbene Jenkins sia uno strumento molto potente, ha i suoi difetti.
- La sua interfaccia è obsoleta e non facile da usare rispetto alle attuali tendenze dell'interfaccia utente.
- Sebbene Jenkins sia amato da molti sviluppatori, non è così facile mantenerlo perché Jenkins funziona su un server e richiede alcune competenze come amministratore del server per monitorarne l'attività.
- Uno dei motivi per cui molte persone non implementano Jenkins è dovuto alla difficoltà di installazione e configurazione di Jenkins.
- Le integrazioni continue si interrompono regolarmente a causa di alcune piccole modifiche alle impostazioni. L'integrazione continua verrà sospesa e pertanto richiederà l'attenzione dello sviluppatore.
Conclusione
- Nell'integrazione continua, dopo un commit del codice, il software viene creato e testato immediatamente
- Jenkins veniva utilizzato per orchestrare una catena di azioni per l'integrazione continua in un progetto software
- Prima di Jenkins, quando tutti gli sviluppatori avevano completato le attività di codifica assegnate, erano soliti impegnare il codice tutto nello stesso momento. Later, La build viene testata e distribuita.
- Dopo Jenkins il codice viene creato e testato non appena lo sviluppatore esegue il commit del codice. Jenkin creerà e testerà il codice molte volte durante il giorno
- Per impostazione predefinita, Jenkins viene fornito con un set limitato di funzionalità. Se desideri integrare la tua installazione Jenkins con strumenti di controllo della versione come Git, devi installare i plug-in relativi a Git. Controlla anche migliori strumenti alternativi a Jenkins
- Il più grande vantaggio di Jenkins è che è gestito dalla comunità che tiene incontri pubblici e riceve input dal pubblico per lo sviluppo dei progetti Jenkins
- Il più grande svantaggio di Jenkins è che la sua interfaccia è obsoleta e non facile da usare rispetto alle attuali tendenze dell'interfaccia utente. Se stai considerando altre opzioni che potrebbero offrire un'esperienza utente più moderna, potresti voler esplorarne alcune i migliori strumenti di integrazione continua a disposizione.