web-dev-qa-db-ja.com

CruiseControl.NET:ccnet.configファイル内で$(CCNetLabel)を使用

MSBuildクルーズコントロールなどの外部プロセスを呼び出すと、環境変数が設定されます。値の1つはCCNetLabelです。現在のプロジェクトラベルの値を保持します。 ccnet config自体で同じ値を使用したいのですが、ccnetconfigを試してみると問題が発生します。次のエラーが発生します。

[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

これも行う必要があり、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>      

(この特定の例では、CCNetLabelpublishDirパスに追加されないように、useLabelSubDirectoryがfalseに設定されていることに注意してください。)

21
Darryl

以下は、ccnetバージョン1.5の設定ファイルで使用できます<cb:define buildversion = "$ [$ CCNetLabel]" />

15
Thinker

ダリルの答えは、CCNET1.5でこの問題を解決するための最良のアプローチだと思います。答えについての2つのコメント:

  • これは、 動的パラメータ に関するccnetドキュメントへの正しいリンクです。
  • ドキュメントで読むことができるように、構文$[$Integration_Property]を使用して探している統合プロパティの値だけを取得するためのショートカットがあります。あなたの場合、$[$CCNetLabel]を使用すると機能します。
9
moreira

次の記事はあなたを助けることができるはずです。 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
Adam Wenger

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
The Chairman

パブリッシャーセクションに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>
3
Woy

バージョン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
kazim

私もこれを実行しようとしましたが、NANTスクリプトを使用することになりました。このスクリプトでは、次のような環境変数としてCCNetLabelにアクセスできます。

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