5

В журнале сборки моего проекта, я могу видеть эти свойства:Как передать свойство интеграции в пакетный файл с помощью CruiseControlNet?

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

Я хочу передать свойство CCNetProject и LastChangeNumber пакетный файл. он хорошо работает с CCNetProject,, поскольку он может использоваться в партии как переменная среды %CCNetProject%.

Но она не работает с другими свойствами (те, которые не начинаются с префикса CCnet) как LastChangeNumber или LastModificationDate.

Я попытался передать его в качестве аргумента, но он терпит неудачу!

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

Я попытался передать его в качестве переменной окружения, но это не удается:

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

Результаты всегда одинаковы, когда я отобразить параметр или переменную: пустая строка или имя переменной $(svn_label)

Я уверен, что это просто, но ... я не могу найти! Есть идеи ?

+0

Вы перепутали переменную среды и пример аргумента. –

+0

Правильно! Я починил это. – TridenT

ответ

0

ok, нашел решение. Чтобы получить версию svn, необходимо использовать специальную метку SvnRevisionLabeller. он доступен через переменную environement CCNetLabel.

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

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

Немного странно, но я согласен с ответом :) Спасибо, ребята, что помогли мне, это было очень полезно для расследования. – TridenT

8

CCNET передает следующие параметры внешних программ:

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

Как вы можете видеть LastIntegrationStatus например можно получить через CCNetLastIntegrationStatus, но LastModificationDate, например. не имеет эквивалента.

Вы можете передать дополнительные аргументы через <buildArgs> или <environment> но внутри конфигурации CCNET у вас нет доступа на свойства интеграции, упомянутых выше. Большинство людей, начинающих с CCNET (включая меня), пытаются что-то вроде <buildArgs>$(CCNetProject)</buildArgs> и терпят неудачу.

Посмотрите на мой answer to a similar question.

Извините, я не могу предоставить лучшее решение.

Update (относительно Thinker's suggestion):

Использование $[$CCNetLabel] внутри конфигурации CCNET не похоже на работу.

Честно говоря, я был бы очень удивлен, если бы это было. Конфигурация является чем-то статическим, тогда как CCNetLabel - это нечто динамическое, которое потенциально может меняться при каждой сборке интеграции. Предполагая, что у вас есть доступ к этим динамическим свойствам внутри конфигурации, конфигурация может измениться при каждой сборке. Поскольку изменение конфигурации означает перезапуск сервера CCNET автоматически, вы можете перезапустить сервер с каждой сборкой. На самом деле это не желаемое поведение, не так ли?

+0

Глядя на старый вопрос, который я упомянул, я нашел этот ответ Мыслителем: http://stackoverflow.com/questions/1563362/cruisecontrol-net-using-ccnetlabel-inside-ccnet-config-file/2299848#2299848. Я дам это решение завтра. –

+0

Да, я попробую еще завтра, чтобы получить номер версии svn – TridenT

+0

Nope. Не работает для меня. –

Смежные вопросы