2010-04-07 13 views
5

W dzienniku build mojego projektu, mogę zobaczyć te właściwości:Jak przekazać właściwość integracji do pliku wsadowego za pomocą CruiseControlNet?

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

Chcę przekazać właściwość CCNetProject i LastChangeNumber do pliku wsadowego. działa dobrze z CCNetProject,, ponieważ może być używany w pakiecie jako zmienna środowiskowa %CCNetProject%.

Ale to nie działa z innymi właściwościami (te, które nie zaczynają się od prefiksu CCnet) jako LastChangeNumber lub LastModificationDate.

Próbowałem przekazać to jako argument, ale nie udało się!

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

starałem się przekazać go jako zmiennej środowiskowej, ale nie jest on:

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

wyników jest zawsze taka sama, kiedy wyświetli parametru lub zmiennej: pusty ciąg lub nazwę zmiennej $(svn_label)

Jestem pewien, że to proste, ale ... Nie mogę znaleźć! Dowolny pomysł ?

+0

można mieszać się zmienną środowiskową i przykład argumentów. –

+0

Dobrze! Naprawiłem to. – TridenT

Odpowiedz

0

ok, znalazłem rozwiązanie. Należy użyć konkretnej etykiety o nazwie SvnRevisionLabeller, aby pobrać wersję svn. jest on następnie dostępny za pośrednictwem zmiennej środowiskowej CCNetLabel.

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

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

To trochę dziwne, ale przyjmuję moją odpowiedź :) Dziękuję wam za pomoc, to było bardzo przydatne do dochodzenia. – TridenT

8

CCNET przekazuje następujące parametry do programów zewnętrznych:

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

Jak widać na przykład LastIntegrationStatus jest dostępny przez CCNetLastIntegrationStatus, ale np. LastModificationDate np. nie ma odpowiednika.

można przekazać dodatkowe argumenty poprzez <buildArgs> lub <environment> ale wewnątrz konfiguracja CCNET masz brak dostępu na właściwości integracyjnych wymienionych powyżej. Większość osób zaczynających od CCNET (w tym ja) próbuje czegoś takiego jak <buildArgs>$(CCNetProject)</buildArgs> i nie.

Spójrz na mój answer to a similar question.

Niestety, nie mogę zapewnić lepszego rozwiązania.

Update (w sprawie Thinker's suggestion):

Korzystanie $[$CCNetLabel] wewnątrz konfiguracji CCNET nie wydają się działać.

Szczerze mówiąc, byłbym raczej zaskoczony, gdyby tak się stało. Konfiguracja jest czymś statycznym, podczas gdy CCNetLabel jest czymś dynamicznym, potencjalnie zmieniającym się przy każdej kompilacji integracji. Zakładając, że masz dostęp do tych dynamicznych właściwości w konfiguracji, konfiguracja może ulec zmianie przy każdej kompilacji. Ponieważ zmiana konfiguracji oznacza automatyczne ponowne uruchomienie serwera CCNET, spowoduje to restart serwera przy każdej kompilacji. Właściwie nie jest to pożądane zachowanie, prawda?

+0

Patrząc na stare pytanie, które wspomniałem, znalazłem tę odpowiedź od Thinker: http://stackoverflow.com/questions/1563362/cruisecontrol-net-using-ccnetlabel-inside-ccnet-config-file/2299848#2299848. Dam to rozwiązanie jutro. –

+0

Tak, spróbuję również jutro drukarki etykiet ccnet, aby uzyskać numer wersji svn – TridenT

+0

Nie. Nie działa dla mnie. –

Powiązane problemy