CruiseControl.NET: использование $(CCNetLabel) внутри файла ccnet.config
При вызове внешних процессов, таких как круиз-контроль MSBuild, задаются переменные среды. Одним из значений является CCNetLabel. он содержит значение метки текущих проектов. Я хочу использовать одни и те же значения в самой конфигурации ccnet, но при попытке настроить конфигурацию ccnet возникает проблема. Я получаю следующую ошибку:
[CCNet Server:ERROR] INTERNAL ERROR: Reference to unknown symbol CCNetLabel
----------
ThoughtWorks.CruiseControl.Core.Config.Preprocessor.EvaluationException: Reference to unknown symbol CCNetLabel
at ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment._GetConstantDef(String name)
at ThoughtWorks.CruiseControl.Core.Config.Preprocessor.ConfigPreprocessorEnvironment.eval_text_constant(String name)
.....
----------
Я действительно хочу добавить CCNetLabel к другой переменной, поэтому мне нужно получить доступ к свойству в ccnet.config.
существует ли другой способ ссылки на эти переменные?
Ответы
Ответ 1
Нам тоже нужно было это сделать, и мы обнаружили, что мы можем использовать Replacement Dynamic Values , введенный в CruiseControl.NET 1.5, чтобы доступ к CCNetLabel из ccnet.config.
Например, блок dynamicValues в этом фрагменте:
<buildpublisher>
<sourceDir>C:\ccnet_projects\Installer\bin\x86\Release</sourceDir>
<dynamicValues>
<replacementValue property="publishDir">
<format>C:\builds\installers\{0}\x86</format>
<parameters>
<namedValue name="$CCNetLabel" value="Default" />
</parameters>
</replacementValue>
</dynamicValues>
<useLabelSubDirectory>false</useLabelSubDirectory>
</buildpublisher>
Создает путь publishDir, содержащий значение CCNetLabel:
<buildpublisher>
<sourceDir>C:\ccnet_projects\Installer\bin\x86\Release</sourceDir>
<publishDir>C:\builds\installers\1.0.2.120\x86</publishDir>
<useLabelSubDirectory>false</useLabelSubDirectory>
</buildpublisher>
(Обратите внимание, что для этого конкретного примера useLabelSubDirectory установлено значение false, чтобы не добавлять CCNetLabel в путь publishDir.). p >
Ответ 2
В файле конфигурации в ccnet версии 1.5 можно использовать следующее:
< cb: define buildversion = "$ [ $CCNetLabel]" /" >
Ответ 3
Я думаю, что ответ Даррила - лучший способ решить эту проблему в CCNET 1.5.
Всего два комментария о ответе:
- Это правильная ссылка на документы ccnet Динамические параметры.
- Как вы можете прочитать в документах, есть ярлык, чтобы получить только значение свойства интеграции, которое вы ищете, используя синтаксис
$[$Integration_Property]
. В вашем случае использование $[$CCNetLabel]
будет работать.
Ответ 4
Невозможно получить доступ к этим переменным среды в конфигурации CCNET. Я думаю, что почти любой, кто настроил CCNET (включая меня), пытался это сделать. Эта функция часто запрашивалась, но она еще не реализована.
Если вам нужен доступ к CCNetWorkingDirectory
или CCNetArtifactDirectory
, существует обход:
<cb:define name="project.workingDirectory">c:/foo</cb:define>
<cb:define name="project.artifactDirectory">c:/bar</cb:define>
<project>
<workingDirectory>$(project.workingDirectory)</workingDirectory>
<artifactDirectory>$(project.artifactDirectory)</artifactDirectory>
...
</project>
Но я не знаю решения для доступа к CCNetLabel
. Извините, у меня нет новостей.
Ответ 5
Следующие статьи должны быть в состоянии помочь вам. Вы можете использовать cb:scope
или определить весь ваш проект в cb:define
и передать название проекта в.
-Хорошая удача -
http://confluence.public.thoughtworks.org/display/CCNET/Configuration+Preprocessor
http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---cruisecontrol.net-integration.aspx
Ответ 6
если вы используете версию 1.5, вы можете напрямую указать $(CCNetLabel) в задаче msbuild
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
<workingDirectory>C:\TestApp\WindowsFormsApplication1</workingDirectory>
<projectFile>WindowsFormsApplication1.sln</projectFile>
<buildArgs>/p:Configuration=Debug /p:Platform="Any Cpu" /p:AssemblyVersion=$(CCNetLabel) </buildArgs>
<targets>build</targets>
<logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
Ответ 7
Я решил это, добавив задачу msbuild в раздел издателя (включая CCNetLabel
в пути)
<msbuild>
<executable>c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
<workingDirectory>C:\Path\WebApp</workingDirectory>
<projectFile>WebApp.csproj</projectFile>
<dynamicValues>
<replacementValue property="buildArgs">
<format>/noconsolelogger /v:quiet /p:Configuration=Release /p:WebProjectOutputDir=c:\Publish\WebApp\{0}\ /p:OutDir=c:\Publish\WebApp\{0}\bin\</format>
<parameters>
<namedValue name="$CCNetLabel" value="Default" />
</parameters>
</replacementValue>
</dynamicValues>
<targets>ResolveReferences;_CopyWebApplication</targets>
<timeout>600</timeout>
</msbuild>
Ответ 8
Я тоже попытался сделать это и просто использовал NANT script, где я могу добраться до CCNetLabel
в качестве переменной среды, например:
<property name="version.build" value="${environment::get-variable('CCNetLabel')}"/>