Conosci… la continuous integration? E Jenkins?

Forse qualcuno di voi potrebbe aver già sentito parlare di continuous integration e di Jenkins o magari aver visto quest’ultimo al lavoro mentre è impegnato a svolgere qualche compito chiedendosi cosa fosse e come funzionasse.
Per fare un esempio pratico, chi bazzica nel mondo Android ed è interessato al progetto CyanogenMod probabilmente avrà visto questa pagina, e sa bene che è presente una lista di tutte le build della rom per i vari dispositivi che giornalmente vengono compilate sotto il nome di nightly.

Con ogni probabilità vi starete chiedendo cos’ha a che fare tutto questo con il tema della continuous integration ed ancora di più con Jenkins, prima però cerchiamo di capire un attimo che cos’è la prima in modo da capire a cosa ci serve il secondo.

Poniamo il caso che abbiamo sviluppato un certo servizio, ad esempio un servizio RESTful o un CMS, e che dobbiamo garantirne la continuità poiché è utilizzato costantemente. Ora, immaginiamo anche che per rendere operativo questo servizio sia necessario svolgere una moltitudine di passaggi che richiedono parecchio tempo ed una certa attenzione nello svolgerli nel giusto ordine e che ogni risultato di un comando sia “un passaggio” importante per quello dopo. Come è facile immaginare, ciò rende la vita dello sviluppatore un vero calvario, è in un’ottica dove magari sono richiesti costanti aggiornamenti giornalieri diventa veramente insostenibile continuare in una modalità del tutto manuale.

La continuous integration si occupa proprio di risolvere questo problema, rendendo la messa in produzione di nuovi aggiornamenti un processo efficiente ed automatizzato a patto di aver configurato per bene il sistema.

Ecco che entra in gioco Jenkins, infatti esso è un software web che si occupa di gestire tutti i passaggi della continuous integration in modo semplice e veloce. Con esso potrete configurare uno o più lavori dove ognuno di essi è composto da vari passaggi da svolgere per ottenere una build corretta e funzionante del progetto che ci interessa. Inoltre terrà traccia tramite una cronologia dell’andamento delle build, salverà l’output della console e quanti successi/fallimenti ci sono stati, oltre ovviamente a notificare, magari tramite una semplice email allo sviluppatore, cosa è successo.