Continuous Integration con Hudson

Avessi avuto la stessa passione anche per gli argomenti che trattavano a scuola sarei stato il primo della classe!

Non è un post storico! Stavo ripensando agli Specch che ho seguito al phpday 2010.  E stato un continuo prendere appunti: software, modelli di sviluppo, tool. Insomma ho veramente fatto tesoro di tutto quello che ho potuto ascoltare. E senza pensarci su, tornato nella mia quotidianità ho cominciato piano piano a mettere in pratica tutto il possibile.

Tanto per andare sul pratico, le prime cose che ho potuto mettere in campo sono stati alcuni tool dai quali sono rimasto incuriosito. In particolare dopo lo speech di Daniele Teti non vedevo l’ora, anche io, di provare questo sconosciuto … “Hudson” del quale già tanto si era parlato nel talk di Francesco Trucchia senza però illustrarne nulla.

hudson panel
husdson dashboard

Cosa è la continuous integration

La Continuos Integration (CI) è una metodologia che si è sviluppata con la progettazione del software agile ed in particolare con la eXtreme Programming (XP). Secondo questo metodo l’integrazione tra i vari pezzi che compongono una Applicazione software va continuamente testata al fine di scovare bug e risolverli il prima possibile. I test, unitari e funzionali, sono alla base di questa metodologia.

Cosa è Hudson

Hudson è un tool, sviluppato in java, che permette di eseguire in maniera autonoma e automatica tutte le operazioni necessarie alla pratica della CI. Punto di riferimento sono i test, attraverso i quali riesce a stabilire l’andamento dell’applicazione nella sua evoluzione temporale.

Cosa fa Hudson

Hudson dopo essere stato configurato a dovere si occupa fondamentalmente di eseguire questi task:

  1. Prendere dal repository l’ultima versione dell’applicazione.
  2. Compilare i sorgenti, o nel caso di linguaggi interpretati effettuare delle operazioni tali da rendere l’applicazione eseguibile.
  3. Eseguire i test (funzionali e unitari)
  4. Notificare eventuali errori

Tutta questa sequenza può essere gestita automaticamente, configurando il tutto come se fosse un cron job.

hudson andamento
Grafico dell'andamento delle build su hudson

A cosa serve

Hudson si installa su una macchina di testing molto simile a quella che in futuro sarà quella di produzione in modo che le simulazioni siano il più possibile veritiere.

Lo scenario che si vuole evitare è il seguente: si sviluppa sulla propria macchina fino a quando tutte le features non sono state soddisfatte, si fa il deploy sulla macchina interessata e poi si fa un giro di testing.
Bene, se tutto fosse semplice non ci sarebbero problemi, ma putroppo non è così, programmi perfetti non esistono e dopo il deploy cominceranno ad uscire fuori i bug, ma a quel punto il tempo per risolverli sarà molto più alto del tempo che si sarebbe impiegato per risolverli quando si stava sul pezzo.

Quanti non hanno fatto le 4 di notte perché alle 10 c’era la demo con il cliente? Dopo aver portato il codice sulla macchina di produzione non funziona nulla e giù a cercare le configurazione contrastanti.

La CI vuole puntare ad evitare scenari di questo tipo. I test sono utili se oltre ad essere verificati sulla macchina dello sviluppatore sono verificati anche sulla macchina di testing, nella quale sono integrati tutti i sorgenti di molteplici sviluppatori.
Molto spesso capita che il codice giri perfettamente sulla macchina dello sviluppatore, ma poi dopo il deploy non va. Lo sviluppatore ha fatto qualche modifica che magari appartiene non al codice ma all’environement dell’applicativo. Risultato: fino a quando non si fa il deploy il problema non esce fuori.

La CI non risolve i problemi, li fa uscire fuori prima

Quindi anticipiamo i tempi, fin dalle prime release dell’applicazione cominciamo a testare il codice anche sul server di prova, in questo modo la maggior parte dei problemi salterà subito fuori.

Non mi voglio dilungare oltre su come installare configurare hudson anche perché in giro ci sono molte guide su come fare anche a seconda del framework che si utilizza. Per esempio per symfony abbiamo utilizzato questa.

Appena mi è stato possibile ho installato questo tool e devo dire , che per adesso, sta portando i suoi frutti. Spero possa fare altrettanto anche per chi comincerà a metterlo in pratica dopo aver letto questo articolo.

Per adesso è tutto, il mio scopo era solo quello di incuriosire il lettore su queste tematiche. Negli articoli successivi vedremo come configurare e utilizzare alcune funzionalità di hudson.

4 pensieri su “Continuous Integration con Hudson

  1. Bel post David, veramente. L’argomento secondo me dovresti approfondirlo e metterlo al centro della discussione di un prossimo aperitivo degli indigeni. Grande, like ed Rt ci stanno tutte😉

  2. Grande David! Ho cominciato con la CI proprio stamattina su TFS 2008… UnitTest, Code Coverage, Code Analisys… mi stanno dando un bel pò di grattacapi… Il tutto sta nel capire bene come funziona…🙂

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...