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.

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

21
задан minty 13 October 2009 в 22:49
поделиться

6 ответов

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

15
ответ дан Thinker 29 November 2019 в 06:36
поделиться

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

  <property name="version.build" value="${environment::get-variable('CCNetLabel')}"/>
1
ответ дан Igor Zevaka 29 November 2019 в 06:36
поделиться

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.

5
ответ дан 29 November 2019 в 06:36
поделиться

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

-Good luck-

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

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

5
ответ дан 29 November 2019 в 06:36
поделиться

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

21
ответ дан 29 November 2019 в 06:36
поделиться

если используется версия 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>
   
   
2
ответ дан 29 November 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: