Nel precedente post è
stato impostato il numero di versione del progetto, ora è arrivato il momento di
parlare di artefatti. Gli Artefatti non sono altro che tutti i file generati dal
processo di build e nel caso del nostro piccolo esempio si tratta solamente dei
file compilati ovvero il file .dll e il compagno .pdb. Nella cartella artifacts
si trovano in automatico i log dei processi di build e lo scopo di questa parte
è spiegare come poter mettere lo storico delle build e l’ultima build riuscita.
Il primo passo è creare una cartella in cui si possono trovare sempre le ultime
build del progetto in modalità debug e release, in pratica si crea sotto la
cartella artifacts una cartella chiamata Builds, che contiene una cartella
archive ed una latest.
A questo punto è comunque necessario fare un po di
pulizia nel file di configurazione modificando il target MSBuild
<target name="CompileDebug">
<property name="Configuration" value="Debug"/>
<call target="Compile" />
</target>
<target name="Compile" depends="Update, Version">
<exec program="${MSBuildDir}\msbuild.exe"
commandline=" ${projectdir}\TestProject1.sln /T:rebuild /p:Configuration=${Configuration}"
basedir="."/>
</target>
Come si può vedere il
target principale viene chiamato Compile e dipende dalla variabile NANT Configuration che contiene il tipo di
configurazione che si vuole compilare. Il target CompileDebug non fa altro che
impostare questa variabile al valore di Debug e poi lanciare la compilazione. A
questo punto basta creare un Target che effettua la copia dei file in una
cartella particolare degli artefatti sulla base di alcune variabili di ambiente
impostate nel target GetPublishingProperties visto nel post
precedente. Una cosa importante che bisogna ricordare è che il task call permette di chiamare un altro task
nant e tutte le dipendenze vengono rieseguite come se non fossero mai state
eseguite, questo permette infatti di richiamare più volte un task cambiando
variabili ed essere sempre sicuri che tutto il codice venga
eseguito.
Una volta che tutto è
stato corretto si procede con la creazione del task nant che copia in una
sottocartella della cartella Artifacts/Builds/Latest il risultato della
compilazione della configurazione corrente.
<target name="PublishLatestCore">
<delete dir="${PublishLatest}\${Configuration}" failonerror="false" />
<mkdir dir="${PublishLatest}\${Configuration}" />
<copy todir="${PublishLatest}\${Configuration}" includeemptydirs="false">
<fileset basedir="${ProjectOutputDir}\${Configuration}">
<include name="**/*.dll" />
<include name="**/*.pdb" />
</fileset>
</copy>
</target>
Il target
PublishLatestCore effettua quindi la copia di tutti i file .dll e .pub presenti
nella sottocartella della build corrispondente. I vari task NAnt che si
utilizzano si commentano da soli e servono per cancellare tutto il vecchio
contenuto, creare la cartella se non presente ed infine effettuare la
copia.
Per archiviare invece le
vecchie versioni è sufficiente utilizzare il task Zip che effettua uno zip dei
file contenuti in un determinato fileset
<target name="PublishArchive">
<mkdir dir="${PublishArchive}" />
<zip zipfile="${PublishArchive}\${BuildLabel}.zip">
<fileset basedir="${PublishLatest}">
<include name="**/*" />
</fileset>
</zip>
</target>
In questo modo come si
può vedere si effettua semplicemente lo zip di tutto quello che si trova nella
cartella Latest (Questo task deve quindi essere chiamato dopo il Publish Latest
Core) e lo mette nella cartella degli archivi. Il nome del file è contenuto
nella variabile BuildLabel, che come le altre viene generata nel target GetPublishingProperties. A questo punto
non rimane altro da fare che creare un target che effettua in sequenza tutte le
pubblicazioni richieste.
<target name="Publish" depends="CompileDebug, CompileRelease">
<call target="PublishDebug" />
<call target="PublishRelease" />
<call target="PublishArchive" />
</target>
<target name="PublishDebug" depends="CompileDebug">
<property name="Configuration" value="Debug"/>
<call target="PublishLatestCore" />
</target>
<target name="PublishRelease" depends="CompileRelease">
<property name="Configuration" value="Release"/>
<call target="PublishLatestCore" />
</target>
E con questo post si
conclude la prima parte con la quale si è imparato a gestire in maniera corretta
una build rudimentale comprendente l'archiviazione degli
artefatti.
Alk.
powered by IMHO 1.3