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.

есть ли другой способ ссылаться на эти переменные?


person minty    schedule 13.10.2009    source источник


Ответы (8)


Нам тоже пришлось это сделать, и мы обнаружили, что можем использовать Динамические значения замены, представленный в 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.)

person Darryl    schedule 08.04.2010

Следующее может использоваться в файле конфигурации в ccnet версии 1.5 ‹cb: define buildversion =" $ [$ CCNetLabel] "/>

person Thinker    schedule 19.02.2010
comment
Это работает. Я поставил это после типа этикетировщика. и использовал $ (buildversion), и он был заменен правильно. - person Pradeep; 04.03.2010


Нет возможности получить доступ к этим переменным среды внутри конфигурации 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. Извините, у меня нет лучших новостей.

person The Chairman    schedule 14.10.2009

Следующие статьи могут вам помочь. Вы можете использовать cb:scope или определить весь свой проект в cb:define и передать имя проекта.

-Удачи-

http://confluence.public.aughtworks.org/display/CCNET/Configuration+Preprocessor

http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---cruisecontrol.net-integration.aspx

person Adam Wenger    schedule 13.11.2009

Я решил это, добавив задачу 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>
person Woy    schedule 11.02.2011

при использовании версии 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>
   
   

person kazim    schedule 08.07.2010

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

  <property name="version.build" value="${environment::get-variable('CCNetLabel')}"/>
person Igor Zevaka    schedule 10.05.2010