2010-04-07 17 views
5

Nel registro accumulo del mio progetto, posso vedere queste proprietà:Come passare una proprietà di integrazione a un file batch con CruiseControlNet?

<integrationProperties> 
    <CCNetProject>Gdet_T</CCNetProject> 
    ... 
    <LastModificationDate>4/6/2010 1:29:04 PM</LastModificationDate> 
    <LastChangeNumber>10841</LastChangeNumber> 
</integrationProperties> 

voglio passare la proprietà CCNetProject e LastChangeNumber un file batch. funziona bene con CCNetProject, in quanto può essere utilizzato nel batch come variabile di ambiente %CCNetProject%.

Ma non funziona con altre proprietà (quelli non partiamo con il prefisso CCnet) come LastChangeNumber o LastModificationDate.

Ho provato a passarlo come argomento, ma fallisce!

<exec> 
    <executable>$(WorkingFolderBase)\MyBatch.bat</executable> 
    <baseDirectory>$(WorkingFolderBase)\</baseDirectory> 
    <buildArgs>$(LastModificationDate)</buildArgs> 
</exec> 

ho cercato di passare come variabile di ambiente, ma fallisce:

<exec> 
    <executable>$(WorkingFolderBase)\MyBatch.bat</executable> 
    <baseDirectory>$(WorkingFolderBase)\</baseDirectory> 
    <environment> 
    <variable> 
     <name>svn_label</name> 
     <value>"${LastModificationDate}"</value> 
    </variable> 
    </environment> 
</exec> 

Il risultato è sempre lo stesso quando visualizzare il parametro o variabile: stringa vuota o il nome della variabile $(svn_label)

Sono sicuro che sia semplice, ma ... Non riesco a trovare! Qualche idea ?

+0

È mescolato la variabile d'ambiente e l'esempio argomento. –

+0

Giusto! L'ho riparato. – TridenT

risposta

0

ok, trovato la soluzione. È necessario utilizzare un'etichetta specifica denominata SvnRevisionLabeller per recuperare la revisione svn. è quindi disponibile tramite la variabile di ambiente CCNetLabel.

http://code.google.com/p/svnrevisionlabeller/

<labeller type="svnRevisionLabeller"> 
    <url>http://mysvnrootproject/trunk</url> 
</labeller> 
+0

È un po 'strano, ma accetterò la mia risposta :) Grazie ragazzi per l'aiuto, è stato molto utile per le indagini. – TridenT

8

CCNet passa i seguenti parametri a programmi esterni:

CCNetArtifactDirectory 
CCNetBuildCondition 
CCNetBuildDate 
CCNetBuildTime 
CCNetFailureUsers 
CCNetIntegrationStatus 
CCNetLabel 
CCNetLastIntegrationStatus 
CCNetListenerFile 
CCNetModifyingUsers 
CCNetNumericLabel 
CCNetProject 
CCNetProjectUrl 
CCNetRequestSource 
CCNetUser 
CCNetWorkingDirectory 

Come si può vedere per esempio LastIntegrationStatus è disponibile tramite CCNetLastIntegrationStatus ma LastModificationDate ad es. non ha equivalenti.

è possibile passare argomenti aggiuntivi tramite <buildArgs> o <environment> ma all'interno configurazione CCNet si ha accesso sulle proprietà di integrazione di cui sopra. La maggior parte delle persone che iniziano con CCNET (incluso me stesso) prova qualcosa come <buildArgs>$(CCNetProject)</buildArgs> e fallisce.

Dai uno sguardo al mio answer to a similar question.

Scusa, non riesco a fornire una soluzione migliore.

Update (per quanto riguarda Thinker's suggestion):

Utilizzando $[$CCNetLabel] all'interno configurazione CCNet non sembra funzionare.

Francamente parlando, sarei stato piuttosto sorpreso, se avesse avuto. La configurazione è qualcosa di statico mentre CCNetLabel è qualcosa di dinamico, che potenzialmente cambia con ogni build di integrazione. Supponendo che tu abbia accesso a queste proprietà dinamiche all'interno della configurazione, la configurazione potrebbe cambiare ad ogni build. Poiché la modifica della configurazione implica il riavvio automatico del server CCNET, si causerà il riavvio del server ad ogni build. Non è davvero un comportamento desiderabile, vero?

+0

Guardando la vecchia domanda che ho citato ho trovato questa risposta da Thinker: http://stackoverflow.com/questions/1563362/cruisecontrol-net-using-ccnetlabel-inside-ccnet-config-file/2299848#2299848. Darò questa soluzione una prova domani. –

+0

Sì, proverò anche domani l'etichettatrice ccnet per ottenere il numero di revisione svn – TridenT

+0

No. Non funziona per me. –