2012-04-30 8 views
5

Ho sistema:corsa costruire su cc.net se le parole precise sono inclusi per un commit log

  • svn - versione di controllo
  • cc.net - come server di CI
  • msbuild - come build system
  • nunit - per test di lancio
  • webdriver - per web-test.

Ora i miei test vengono eseguiti automaticamente dopo ogni commit. Ma voglio che il mio test venga eseguito se commit ha un commento #runautotest (o un altro).

Ho investigato i trigger di cc.net ma è per un altro obiettivo. Cerco di trovare alcune informazioni sui registri di analisi cc.net ma questo non ha avuto esito positivo.

Che tipo di modi dovrei usare per risolvere il mio problema?

risposta

3

Nella configurazione CCNet, nel progetto, nella parte superiore del blocco di compiti:

<modificationWriter> 
<filename>svn_mods.xml</filename> 
<path>c:\modsdir</path> 
</modificationWriter> 

Questo scriverà le modifiche SVN a un file.

successivo nel blocco di compiti:

<nant> 
<executable>c:\path_to_nant</executable> 
<buildFile>mybuildfile.build</buildFile> 
<targetList> 
    <target>conditionally_run_nunit_tests</target> 
</targetList> 
</nant> 

Questo farà eseguire un compito Nant dopo l'operazione modificationwriter.

In conditionally_run_nunit_tests, cercare il file c: \ modsdir \ svn_mods.xml per #runautotest.Se lo trovi, esegui i test. Se non lo trovi, allora non fare nulla. Esistono vari modi per analizzare il file mods. È possibile utilizzare lo script C# per leggere l'intero file in una stringa e quindi chiamare Contains passando in #runautotest.

Il seguente codice è un esempio di utilizzo di script C# in Nant. SearchFile apre un file, lo legge in una stringa e controlla se un valore è nella stringa. Restituisce "sì" o "no". Lo script seguente non è stato testato.

<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/> 

<script language="c#" prefix="ns"> 
    <references> 
     <include name="System"/> 
     <include name="System.IO"/> 
    </references> 
    <code> 
    <![CDATA[ 
    [Function("SearchFile")] 
    public static string SearchFile(string filepath, string token) 
    { 
     System.IO.StreamReader myFile = new System.IO.StreamReader(filepath); 
     string myString = myFile.ReadToEnd(); 
     myFile.Close(); 
     if(myString.Contains(token)) return "yes"; 
     else return "no"; 
    }    
    ]]> 
    </code> 
</script> 
+0

+1 per la risposta molto completa. – TridenT

+0

Grazie !!!!!!!!!!! –

0

Come indicano le stime della domanda, questa sembra essere una questione più importante. Farò un tentativo: per quanto ho capito, CCNET è il leader of the pack, che monitora SVN per le modifiche al codice sorgente, ottiene i sorgenti, attiva MSBuild per costruirli e fa scattare NUnit e WebDriver per eseguire test di unità e web.

La decisione sull'esecuzione o meno dei test dipende da un hashtag definito nei commenti di modifica SVN. SVN da un lato e NUnit e WebDriver dall'altro sono accoppiati solo tramite CCNET.

Quindi, prima di tutto, assicurerei che questo hashtag contenente commenti sia disponibile in CCNET da qualche parte. Non sono un esperto SVN ma suppongo che tutti i commenti siano nel log delle modifiche di CCNET. Puoi verificare questo?

Successivamente l'esecuzione dei test deve essere subordinata alla condizione. La configurazione di CCNET è piuttosto statica. Concesso con l'avvento di DynamicValues in CCNET 1.5 e ConditionalTasks in CCNET 1.6, la configurazione è diventata più dinamica e ora avete anche il controllo di flusso in CCNET, ma dato che sono un po 'antiquato, vorrei sostenere l'esecuzione del test di wrapping in uno script di build usando eg MSBuild o NAnt e inserire la valutazione del registro delle modifiche qui.

Aggiornamento: dare un'occhiata a Adam's answer. Questo esempio è abbastanza vicino a quello che avevo in mente (anche se avrei usato <xmlpeek> invece di <script>).

Problemi correlati