Come bloggato qualche tempo fa, nel mio team abbiamo messo in piedi un build server e per farlo abbiamo scelto CI-Factory. Il processo non è stato immediato ma devo dire che il risultato sta portando alcune soddisfazioni.
Prima ho scritto "abbiamo messo in piedi un build server " invece di installato perchè la vera e proprio installazione e configurazione base di CI-Factory non è un processo molto complicato. Per avere la prima build basta poco.
L'attività che richiede più tempo è sicuramente la configurazione dei molti package disponibili: Alerts , Analytics , CSDiff , DotNetUnitTest , FinalBuilder , InstallShield , MSBuild , MSTest , NCover , nDepend , Simian , Subversion , Tracker , Vault , Versioning , VisualSourceSafe , VS.NETCompile , VSTSVersionControl , Wix , XenocodePostbuild.
Grazie a questo strumento oggi riusciamo ad automattizzare molto operazioni e quindi a conti fatti risparmiamo tempo, abbiamo sempre report e metriche aggiornati per il codice prodotto e comettiamo qualche errore in meno automattizando le operazioni ripetitive.
Per cominciare abbiamo messo in pista la compilazione dei sorgenti, quindi ogni 5 min. circa viene controllato se nel source control ci sono state delle modifiche. Se ce ne sono in automatico viene ricompilata tutta la soluzione.
Il secondo passo è stata l'esecuzioni degli unit-test. Ora dopo ogni build andata a buon fine vengono eseguiti tutti gli unit-test e viene controllato il code-coverage, per controllare quanto codice è coperto dagli unit-test.
Dopo questi 2 passi per noi fondamentali abbiamo cominciato a capire un po' cosa potevamo realizzare con un build server e qui è cominciato il vero divertimento:
ora abbiamo una gestione del tagging all'interno del source control: Dopo ogni build "buona" viene aumentato il numero di versione e creato un tag nel repository SVN che permette di intificare facilmente il codice appartente a quella versione.
poi abbiamo automatizzato gli script di gestione del database (creazione ed aggiormento): nel nostro scenario è indispensabile garantire la possibilità di aggiornare il database da una "vecchia" versione all'"ultima" versione senza preocuparsi degli aggiornamenti.
infine abbiamo automattizzato la creazione dei pacchetti dei setup. Dopo ogni build "buona" viene creato il pacchetto di setup da distribuire beta-tester con cadenza settimanale ed agli utenti finali con cadenza mensile.
In cantiere ci sono già molte idee, spero di riuscire a metterle in pista a breve e magari farne un secondo post sull'argomento.