Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Cruise Control .NET - Copiare le build nella cartella degli artefatti

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

Print | posted on mercoledì 3 gennaio 2007 19:59 | Filed Under [ CruiseControl.NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET