Nella speranza che qualcuno sia interessato alle mie
esperienze in CC.NET oggi posto subito questa seconda parte. Nella prima parte si è visto come istallare e configurare il
CC.NET affinchè punti ad un repository subversion e faccia sempre il getlatest
ad ogni nuova modifica. Oggi viene il momento di capire come fare un build.
LA mia esperienza personale è questa, dopo avere passato un 20 min in rete a
documentarmi ho deciso di utilizzare Nant. Si potrebbe
anche utilizzare MSBuild, ma purtroppo non esiste in visual studio 2003, le cui
solution possono invece essere buildate direttamente da Nant, ed inoltre si può
comunque lanciare MSBuild direttamente da Nant.
Passo1: la prima cosa da fare è capire come fare il
build di una solution Visual Studio 2005 con MSBuild, la riga di
comando è questa.
msbuild
F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.sln
/T:rebuild /p:Configuration=Debug
Come si può vedere basta specificare la solution, il parametro T con cui si
chiede un rebuild ed infine la configurazione che in questo caso è quella di
debug.
Passo2: Ora che sappiamo come utilizzare msbuild per
effettuare una build bisogna capire come lanciarlo da uno script Nant. Premetto
che non ho mai utilizzato Nant e per questo la soluzione che posto è quella che
mi è venuta in mente per prima . Il primo passo è scaricare il Nant e mettere
il tutto direttamente nella cartella di subversion dove sono i sorgenti. Questa
è infatti una best practice, tenere gli strumenti di build assieme ai sorgenti.
A questo punto bisogna creare un file di build per il nant, lo ho creato nella
stessa cartella della solution è lo ho chiamato
TestProject.build.
<?xml version="1.0"?>
<project name="TestProject1" default="MSBuild">
<property name="projectdir" value="F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1"/>
<property name="MSBuildDir" value="E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"/>
<target name="MSBuild">
<exec program="${MSBuildDir}\msbuild.exe"
commandline=" ${projectdir}\TestProject1.sln /T:rebuild /p:Configuration=Debug"
basedir="."/>
</target>
</project>
Attendo i commenti di chi conosce veramente il Nant. Una breve spiegazione la
posso dare anche subito, un file build è un file XML con un funzionamento simile
a quello dei makefile con cui si compilavano i programmi C/C++. Iniziamo a
definire un nodo progetto, in cui specifichiamo il task di default. Internamente
con il tag property si mettono delle variabili, quel tanto che basta per rendere
lo script più comprensibile. A questo punto il tag target permette di
specificare le attività da fare, inizialmente ne ho messa una chiamata MSBuild,
il cui unico task è lanciare con il tag exec la compilazione tramite MSBuild. A
questo punto bisogna testare lo script con il Nant
NAnt.exe
-buildfile:F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.build
Una volta che si è verificato che tutto è ok si può andare a modificare il
file di configurazione principale di CC.NET aggiungendo un nuovo task.
<cruisecontrol>
<project name="CCNetTest">
...Questa parte è come nell'esempio precedente.
<tasks>
<nant>
<executable>F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\BuildTools\nant-0.85\bin\nant.exe</executable>
<buildFile>F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.build</buildFile>
<targetList>
<target>MSBuild</target>
</targetList>
</nant>
</tasks>
</project>
</cruisecontrol>
Come potete vedere si è aggiunto un nodo tasks, in cui specifichiamo un task
di tipo nant, di seguito specifichiamo dove abbiamo messo gli eseguibili, che
come potete vedere si trovano nel subversion assieme ai sorgenti, si specifica
quale è il file di build ed infine si mette la lista dei target, nel nostro caso
solamente MSBuild.
A questo punto potete provare a modificare un file sorgente, fare il check in
e vedrete al prossimo controllo il vostro progetto automaticamente compilato.
Con questo primo step avete il vostro primo sistema di Continuos Integration,
anche se la vera potenza di CC.NET deve ancora essere utilizzata.
Alk.