CruiseControl.NET http://blogs.ugidotnet.org/rgm/category/CruiseControl.NET.aspx CruiseControl.NET it-IT Gian Maria Ricci Subtext Version 2.6.0.0 I suoni per il CC.Tray http://blogs.ugidotnet.org/rgm/archive/2008/08/08/93657.aspx <p>Il Cruise Control .NEt è veramente uno strumento che quando hai messo su la prima volta non ne puoi più fare a meno. Una delle cose che preferisco è che quando uno sviluppatore rompe la build, (ad esempio si scorda di aggiungere con tortoise i nuovi file) subito il cc.tray diventa rosso e segnala il problema. Sono quindi lontani i giorni in cui la mattina fai un update e ti trovi che la soluzione non compila, mancano file o ci sono errori e lo sviluppatore che fatto l'ultimo checkin è andato in ferie proprio quel giorno :D :D </p> <p>La cosa più carina è però la possibilità di suonare un file audio se la build si rompe, dopo una piccola ricerca ho trovato in un sito <a href="http://www.nablasoft.com/alkampfer/itablog/glass_shatter2.wav">questo bellissimo suono</a> di piatti rotti :D.</p> <p>Spesso quando sono in skype la gente mi dice "hey...ti si è rotto un piatto a casa?"</p> <p>Naturalmente quando invece la build compila ancora è necessario sentire un <a href="http://www.nablasoft.com/alkampfer/itablog/applause3.wav">bell'applauso</a> :D.</p> <p>alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/93657.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2008/08/08/93657.aspx Fri, 08 Aug 2008 13:51:00 GMT http://blogs.ugidotnet.org/rgm/archive/2008/08/08/93657.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/93657.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/93657.aspx Come mi piace la gestione di siti web del vs 2005 http://blogs.ugidotnet.org/rgm/archive/2007/04/03/74556.aspx <p>E stamane sono 3 blog.....è strano da parte mia, ma stamane è cominiciata storta e quando comincia storta nulla va più per il verso giusto. Mi accorgo che il progetto CC.NET non compila più correttamente, vado a vedere gli errori e vedo strani errori che da me in locale non va. </p> <p>Vado in terminal server nella macchina e mi accorgo che il problema è il subversion, il progetto è un sito web abbastanza grande e per problemi di performance solitamente testiamo i controlli utente in progetti più piccoli suddividendo in sezioni il progetto principale. Il problema è che le reference dei progetti web sono tenuti nella cartella bin e ankh o subversion tendono a metterli nel repository. La situazione attuale è che una dll viene aggiunta nel repository, quando il server fa update trova che la stessa dll è già nella cartella causa compilazione precedente, quindi stoppa l'update dicendo che non può prosegure. </p> <p>La soluzione è stata aggiungere nello script nant una action che cancella tutte le directory bin dei progetti web prima dell'update, in questo modo l'update non fallisce...vediamo oggi cosa altro può andare storto.</p> <p>Alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/74556.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/04/03/74556.aspx Tue, 03 Apr 2007 12:34:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/04/03/74556.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/74556.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/74556.aspx Cruise Control .NET - Eseguire test Nunit http://blogs.ugidotnet.org/rgm/archive/2007/01/18/67638.aspx In questa sesta parte si esaminerà come eseguire i test NUnit dopo la build del progetto. <img src="http://blogs.ugidotnet.org/rgm/aggbug/67638.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/01/18/67638.aspx Thu, 18 Jan 2007 19:46:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/01/18/67638.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/67638.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/67638.aspx CruiseControl.NET - Riepilogo http://blogs.ugidotnet.org/rgm/archive/2007/01/11/65933.aspx <p>La prossima uscita (spero oggi o cmq al massimo Sabato mattina) riguarderà NANT, e se ce la faccio anche NCOVER. Ho pensato che potrebbe essere interessant dare una riletta alla prima parte (i primi 5 post) rimetterli più in bella forma e poi pubblicarli su DotNetMarche. Mi piaceva per questo sapere quanti sarebbero interessati, perchè se alla fine a nessuno importa perchè i post sul blog sono sufficienti risparmio lavoro <img src="http://www.tuttogratis.it/img/emoticons/_linguaccia.gif"></p> <p>&nbsp;</p> <p>Ciao a tutti.</p> <p>Alk.</p><img src="http://blogs.ugidotnet.org/rgm/aggbug/65933.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/01/11/65933.aspx Thu, 11 Jan 2007 10:43:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/01/11/65933.aspx#feedback 2 http://blogs.ugidotnet.org/rgm/comments/commentRss/65933.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/65933.aspx CruiseControl.NET - Metriche di codice (FxCop) http://blogs.ugidotnet.org/rgm/archive/2007/01/10/65694.aspx In questo sesto intervento si inizia a capire la vera utilità di CC.NET inserendo FxCop come primo tool di metrica nella build automatica.<img src="http://blogs.ugidotnet.org/rgm/aggbug/65694.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/01/10/65694.aspx Wed, 10 Jan 2007 10:19:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/01/10/65694.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/65694.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/65694.aspx Esempi per Cruise Control .NET http://blogs.ugidotnet.org/rgm/archive/2007/01/05/65202.aspx <FONT face=Verdana size=2> <P>Per rendere più concreti gli esempi che faccio per CC.NET potete trovare a questo indirizzo le ultime versioni degli script</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New"><A href="http://dotnetmarche.googlecode.com/svn/trunk/Alkampfer/CCNetBlogCode">http://dotnetmarche.googlecode.com/svn/trunk/Alkampfer/CCNetBlogCode</A><BR></DIV></SPAN> <P>Questo è l'indirzzo del <A title="" href="http://subversion.tigris.org/getting_subversion.html" target=_blank name="">subversion </A>di google relativo a dotnetmarche per cui è conveniente farne il checkout in locale con il <A title="" href="http://tortoisesvn.tigris.org/" target=_blank name="">Tortoise</A>. Se qualcuno non volesse istallare il subversion fatemelo sapere, magari creo una versione zippata da scaricare direttamente dal sito.</P> <P>Alk.</P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --><img src="http://blogs.ugidotnet.org/rgm/aggbug/65202.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/01/05/65202.aspx Fri, 05 Jan 2007 19:24:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/01/05/65202.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/65202.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/65202.aspx Cruise Control .NET - Copiare le build nella cartella degli artefatti http://blogs.ugidotnet.org/rgm/archive/2007/01/03/64724.aspx In questo post si conclude la prima parte sul piccolo tutorial relativo al CruiseControl.NET mostrando come copiare le ultime build nella cartella degli artefatti mantenendo nel contempo tutto lo storico delle varie build.<img src="http://blogs.ugidotnet.org/rgm/aggbug/64724.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2007/01/03/64724.aspx Wed, 03 Jan 2007 18:59:00 GMT http://blogs.ugidotnet.org/rgm/archive/2007/01/03/64724.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/64724.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/64724.aspx Impostare il numero di versione del progetto http://blogs.ugidotnet.org/rgm/archive/2006/12/29/63873.aspx In questo 4° post su CruiseControl .NET verrà mostrato come generare automaticamente un nuovo numero di versione ad ogni build ed assegnarlo al progetto in maniera automatica.<img src="http://blogs.ugidotnet.org/rgm/aggbug/63873.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2006/12/29/63873.aspx Fri, 29 Dec 2006 16:09:00 GMT http://blogs.ugidotnet.org/rgm/archive/2006/12/29/63873.aspx#feedback 2 http://blogs.ugidotnet.org/rgm/comments/commentRss/63873.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/63873.aspx Cruise Control .NET, La web dashboard http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60823.aspx <FONT face=Verdana size=2> <P>So che fare due post così vicini tra loro non è politicamente corretto&nbsp;:S comunque volevo fare un ulteriore considerazione sulla <A title="" href="http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60820.aspx" target=_blank name="">seconda parte </A>delle mie impressioni su CC.NET.&nbsp;</P> <P>Se consultate la documentazione di CC.NET trovate sicuramente che nelle ultime versioni è stato aggiunto un task particolare per MSBuild, per cui ci si chiede "<EM>perchè utilizzare il nant da cui poi non facciamo altro che chiamare MSBuild, invece di utilizzare l'appropriato task per MSBuild??". </EM>Le mie ragioni personali sono le seguenti. </P> <P>In primo se utilizzo MSBuild come task, poi per coerenza lo dovrei utilizare anche per fare altre operazioni tipo copiare file in giro, fare test etc etc, per questi task è meglio Nant.</P> <P>MSBuild non è presente per Visual Studio 2003, meglio quindi abituarsi ad utilizare il task del NANT, se abbiamo una soluzione di VS2005 utilizziamo MSBuild altrimenti utilizziamo il suo task <A title="" href="http://nant.sourceforge.net/release/0.85-rc1/help/tasks/solution.html" target=_blank name="">&lt;solution&gt;</A>. </P> <P>Stranamente l'output del WebDashboard mi sembra migliore nel caso di NANT. Prima di spiegare cosa è e come funziona il Dashboard, bisogna sapere che i vari tool producono output che deve essere preso da CC.NET per essere mostrato all'utente in modo da far vedere cosa sta succedendo nelle varie build. MSBuild non emette di suo output XML, per cui il suo output non può essere consumato da CC.NET che vuole solamente XML come output. Per questo sono stati fatti <A title="" href="http://ccnetlive.thoughtworks.com/MSBuildXmlLogger-Builds/" target=_blank name="">formatter appositi</A> su cui potete anche trovare <A title="" href="http://confluence.public.thoughtworks.org/display/CCNET/Using+CruiseControl.NET+with+MSBuild" target=_blank name="">ulteriori informazioni</A>. Il task risultante nel mio caso è questo.</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;msbuild&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executable&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">executable&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;workingDirectory&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">workingDirectory&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;projectFile&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">TestProject1.sln</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">projectFile&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;buildArgs&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">/T:rebuild&nbsp;/p:Configuration=Debug</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">buildArgs&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;targets&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">Build</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">targets&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;timeout&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">15</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">timeout&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;logger&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">E:\Program&nbsp;Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">logger&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">msbuild&gt;<BR></DIV></SPAN> <P>Come vedete ho specificato nel logger la dll che esegue la formattazione, nonostante quseto nel webdashboard non vedo gli warning di compilazione <IMG height=19 src="http://www.imhoproject.org/files/arrabbiato.gif" width=19 align=absMiddle border=0>&nbsp;<SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&nbsp;</SPAN></P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">BUILD&nbsp;SUCCESSFUL&nbsp;<BR>Project:&nbsp;&nbsp;CCNetTest&nbsp;<BR>Date&nbsp;of&nbsp;build:&nbsp;&nbsp;20/12/2006&nbsp;9.57.01&nbsp;<BR>Running&nbsp;time:&nbsp;&nbsp;00:00:05&nbsp;<BR>Integration&nbsp;Request:&nbsp;&nbsp;continuous&nbsp;triggered&nbsp;a&nbsp;build&nbsp;(IfModificationExists)&nbsp;<BR>Last&nbsp;changed:&nbsp;&nbsp;2006-12-20&nbsp;09.56.49&nbsp;<BR>Last&nbsp;log&nbsp;entry:&nbsp;&nbsp;<BR>&nbsp;<BR><BR>Modifications&nbsp;since&nbsp;last&nbsp;build&nbsp;(1)&nbsp;&nbsp;<BR>Modified&nbsp;CCNET&nbsp;/trunk/TestProject1/TestProject1/Class1.cs&nbsp;&nbsp;2006-12-20&nbsp;09.56.49&nbsp;<BR><BR><BR><BR>&nbsp;<BR>&nbsp;<BR></DIV></SPAN> <P></P> <P>Se invece si lancia MSBuild internamente a NAnt, nant prende tutto l'output di MSBuild, lo mette in un CDATA section del suo output file e CC.NET riesce a trovare gli warning.</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><BR>&nbsp;&nbsp;<SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">BUILD&nbsp;SUCCESSFUL&nbsp;<BR>Project:&nbsp;&nbsp;CCNetTest&nbsp;<BR>Date&nbsp;of&nbsp;build:&nbsp;&nbsp;20/12/2006&nbsp;9.59.14&nbsp;<BR>Running&nbsp;time:&nbsp;&nbsp;00:00:07&nbsp;<BR>Integration&nbsp;Request:&nbsp;&nbsp;continuous&nbsp;triggered&nbsp;a&nbsp;build&nbsp;(IfModificationExists)&nbsp;<BR>Last&nbsp;changed:&nbsp;&nbsp;2006-12-20&nbsp;09.58.48&nbsp;<BR>Last&nbsp;log&nbsp;entry:&nbsp;&nbsp;<BR>&nbsp;<BR><BR>Modifications&nbsp;since&nbsp;last&nbsp;build&nbsp;(1)&nbsp;&nbsp;<BR>Modified&nbsp;CCNET&nbsp;/trunk/TestProject1/TestProject1/Class1.cs&nbsp;&nbsp;2006-12-20&nbsp;09.58.48&nbsp;<BR><BR>Warnings:&nbsp;(2)&nbsp;&nbsp;<BR>Class1.cs(10,10):&nbsp;warning&nbsp;CS0219:&nbsp;The&nbsp;variable&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff00ff; FONT-FAMILY: Courier New">'other'&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">is&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">assigned&nbsp;but&nbsp;its&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">value&nbsp;is&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">never&nbsp;used<BR>Class1.cs(10,10):&nbsp;warning&nbsp;CS0219:&nbsp;The&nbsp;variable&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff00ff; FONT-FAMILY: Courier New">'other'&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">is&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">assigned&nbsp;but&nbsp;its&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">value&nbsp;is&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">never&nbsp;used<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR></DIV></SPAN> <P>Per questa ulteriore ragione ho preferito mostrare come lanciare msbuild direttamente da uno script NANT.</P> <P>Alk.</P> <P> </FONT> <FONT face=Verdana size=2><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT> <P></P></TR></TBODY></TABLE><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --><img src="http://blogs.ugidotnet.org/rgm/aggbug/60823.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60823.aspx Wed, 20 Dec 2006 11:13:00 GMT http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60823.aspx#feedback http://blogs.ugidotnet.org/rgm/comments/commentRss/60823.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/60823.aspx Cruise Control .NET - La prima build http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60820.aspx <FONT face=Verdana size=2> <P>Nella speranza che qualcuno sia interessato alle mie esperienze in CC.NET oggi posto subito questa seconda parte. Nella <A title="" href="http://blogs.ugidotnet.org/rgm/archive/2006/12/19/60655.aspx" target=_blank name="">prima parte </A>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.</P> <P>LA mia esperienza personale è questa, dopo avere passato un 20 min in rete a documentarmi ho deciso di utilizzare <A title="" href="http://nant.sourceforge.net/" target=_blank name="">Nant</A>. 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.</P> <P><STRONG>Passo1</STRONG>: la prima cosa da fare è capire come&nbsp;fare il build di una solution&nbsp;Visual&nbsp;Studio 2005&nbsp;con MSBuild, la riga di comando è questa.</P> <P><EM>msbuild F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.sln /T:rebuild /p:Configuration=Debug</EM></P> <P>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.</P> <P><STRONG>Passo2</STRONG>: 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 <IMG height=19 src="http://www.imhoproject.org/files/complice.gif" width=19 align=absMiddle border=0>. 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 <STRONG>TestProject.build</STRONG>.</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;?xml&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">version</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="1.0"?&gt;<BR>&lt;project&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">name</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="TestProject1"&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">default</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="MSBuild"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">name</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="projectdir"&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">value</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1"</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">name</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="MSBuildDir"&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">value</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">target&nbsp;name</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="MSBuild"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exec&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">program</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="${MSBuildDir}\msbuild.exe"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">commandline</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="&nbsp;${projectdir}\TestProject1.sln&nbsp;/T:rebuild&nbsp;/p:Configuration=Debug"&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">basedir</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="."</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">target</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">project&gt;<BR></DIV></SPAN> <P>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</P> <P><EM>NAnt.exe -buildfile:F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.build</EM></P> <P>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.</P> <DIV style="BORDER-RIGHT: black 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: black 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: black 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: black 1px solid; BACKGROUND-COLOR: gainsboro"><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;cruisecontrol&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;project&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">name</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">="CCNetTest"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">...Questa&nbsp;parte&nbsp;è&nbsp;come&nbsp;nell'esempio&nbsp;precedente.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;tasks&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;nant&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executable&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\BuildTools\nant-0.85\bin\nant.exe</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">executable&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;buildFile&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">F:\Dati\Tutorials\Tutorials\CCNET\projects\CCNetTest\WorkingFolder\TestProject1\TestProject1.build</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">buildFile&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;targetList&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">target</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Courier New">MSBuild</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #ff0000; FONT-FAMILY: Courier New">target</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">targetList&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">nant&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">tasks&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">project&gt;<BR>&lt;</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #8b0000; FONT-FAMILY: Courier New">/</SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: #0000ff; FONT-FAMILY: Courier New">cruisecontrol&gt;<BR></DIV></SPAN> <P>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.</P> <P>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.</P> <P>Alk.</P> </FONT> <FONT face=Verdana size=2><P><A href="http://imhoproject.org/"><FONT face=Verdana size=1>powered by IMHO 1.3</FONT></A></P></FONT><!-- Powered by IMHO 1.3 (EN) Instant Blogger Copyright (c) 2005 A.Boschin - http://www.imhoproject.org --><img src="http://blogs.ugidotnet.org/rgm/aggbug/60820.aspx" width="1" height="1" /> Gian Maria Ricci http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60820.aspx Wed, 20 Dec 2006 10:42:00 GMT http://blogs.ugidotnet.org/rgm/archive/2006/12/20/60820.aspx#feedback 1 http://blogs.ugidotnet.org/rgm/comments/commentRss/60820.aspx http://blogs.ugidotnet.org/rgm/services/trackbacks/60820.aspx