Когда вызов внешних процессов как круиз-контроль 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.
существует ли другой способ сослаться на эти переменные?
Следующее может быть использовано в конфигурационном файле в ccnet версии 1.5 < cb: define buildversion = "$ [ $ CCNetLabel ]" />
Я тоже пытался это сделать и в итоге использовал скрипт NANT, где я могу добраться до CCNetLabel
как переменная среды, например:
<property name="version.build" value="${environment::get-variable('CCNetLabel')}"/>
There is no way of accessing these environment variables inside CCNET configuration. I think almost anybody who configured CCNET (including myself) has tried to do so. This feature has been requested often, but it hasn't been implemented yet.
If you want access to CCNetWorkingDirectory
or CCNetArtifactDirectory
there is a workaround:
<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>
But I'm not aware of a solution for accessing CCNetLabel
. Sorry, I don't have better news.
Следующие статьи могут вам помочь. Вы можете использовать cb: scope
или определить весь свой проект в cb: define
и передать имя проекта.
-Good luck-
http : //confluence.public. Shouldtworks.org/display/CCNET/Configuration+Preprocessor
У нас тоже возникла такая необходимость, и мы обнаружили, что можем использовать 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. )
если используется версия 1.5, то в задании msbuild можно напрямую указать $(CCNetLabel)
<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>