CruiseControl.NET:在ccnet.config文件中使用$(CCNetLabel)

时间:2009-10-13 22:43:01

标签: cruisecontrol.net 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中的属性。

有没有不同的方法来引用这些变量?

8 个答案:

答案 0 :(得分:21)

我们也需要这样做,并发现我们可以使用CruiseControl.NET 1.5中引入的Replacement Dynamic Values从ccnet.config中访问 CCNetLabel

例如,此代码段中的 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>

生成包含 CCNetLabel 值的 publishDir 路径:

  <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 :(得分:15)

以下内容可以在ccnet 1.5版的配置文件中使用 &LT; cb:define buildversion =“$ [ $ CCNetLabel ]”/&gt;

答案 2 :(得分:9)

我认为Darryl的答案是在CCNET 1.5中解决这个问题的最佳方法。 只有两条关于答案的评论:

  • 这是指向Dynamic Parameters
  • 的ccnet文档的正确链接
  • 正如您可以在文档中阅读的那样,有一种快捷方式可以使用语法$[$Integration_Property]获取您正在查找的集成属性的值。在您的情况下,使用$[$CCNetLabel]将起作用。

答案 3 :(得分:5)

无法在CCNET配置中访问这些环境变量。我想几乎任何配置CCNET(包括我自己)的人都试图这样做。此功能经常被要求,但尚未实施。

如果您想要访问CCNetWorkingDirectoryCCNetArtifactDirectory,则有解决方法:

<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的解决方案。对不起,我没有更好的消息。

答案 4 :(得分: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

答案 5 :(得分:3)

我通过在发布商部分添加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>

答案 6 :(得分:2)

如果使用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>
   
   

答案 7 :(得分:1)

我也尝试过这样做,最后只使用了NANT脚本,在那里我可以像CCNetLabel那样进行环境变化:

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