NAnt にプロパティ ファイルを動的にロードする方法はありますか?

StackOverflow https://stackoverflow.com/questions/76870

  •  09-06-2019
  •  | 
  •  

質問

1 つの変数に基づいて別のプロパティ ファイルをロードしたいと考えています。

基本的に、開発ビルドを実行する場合はこのプロパティ ファイルを使用し、テスト ビルドを実行する場合はこの他のプロパティ ファイルを使用し、実稼働ビルドを実行する場合はさらに 3 番目のプロパティ ファイルを使用します。

役に立ちましたか?

解決

ステップ1:NAnt スクリプトでプロパティを定義して、構築している環境 (ローカル、テスト、運用環境など) を追跡します。

<property name="environment" value="local" />

ステップ2:すべてのターゲットが依存する構成ターゲットまたは初期化ターゲットがまだない場合は、構成ターゲットを作成し、他のターゲットがそれに依存していることを確認します。

<target name="config">
    <!-- configuration logic goes here -->
</target>

<target name="buildmyproject" depends="config">
    <!-- this target builds your project, but runs the config target first -->
</target>

ステップ3:環境プロパティに基づいて適切なプロパティ ファイルを取り込むように構成ターゲットを更新します。

<target name="config">
    <property name="configFile" value="${environment}.config.xml" />
    <if test="${file::exists(configFile)}">
        <echo message="Loading ${configFile}..." />
        <include buildfile="${configFile}" />
    </if>
    <if test="${not file::exists(configFile) and environment != 'local'}">
        <fail message="Configuration file '${configFile}' could not be found." />
    </if>
</target>

なお、私はチーム メンバーがソース管理にコミットされない独自の local.config.xml ファイルを定義できるようにしたいと考えています。これは、ローカル接続文字列やその他のローカル環境設定を保存するのに適した場所を提供します。

ステップ4:NAnt を呼び出すときに環境プロパティを設定します。例:

  • ナント -D:環境=dev
  • nant -D:環境=テスト
  • ナント -D:環境=本番環境

他のヒント

使用できます include メイン ビルド ファイル内に別のビルド ファイル (プロパティを含む) を含めるタスク。の if の属性 include タスクは変数に対してテストして、ビルド ファイルを含めるべきかどうかを判断できます。

<include buildfile="devPropertyFile.build" if="${buildEnvironment == 'DEV'}"/>
<include buildfile="testPropertyFile.build" if="${buildEnvironment == 'TEST'}"/>
<include buildfile="prodPropertyFile.build" if="${buildEnvironment == 'PROD'}"/>

scott.caligan からの回答で部分的に解決された同様の問題がありましたが、次のようにターゲットを指定するだけで環境を設定し、適切なプロパティファイルをロードできるようにしたいと考えていました。

  • ナント開発者
  • ナントテスト
  • ナントステージ

これを行うには、環境変数を設定するターゲットを追加します。例えば:

<target name="dev">
  <property name="environment" value="dev"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="test">
  <property name="environment" value="test"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="stage">
  <property name="environment" value="stage"/>
  <call target="importProperties" cascade="false"/>
</target>

<target name="importProperties">
  <property name="propertiesFile" value="properties.${environment}.build"/>
  <if test="${file::exists(propertiesFile)}">
    <include buildfile="${propertiesFile}"/>
  </if>
  <if test="${not file::exists(propertiesFile)}">
    <fail message="Properties file ${propertiesFile} could not be found."/>
  </if>
</target>

私がこの種のことを行った方法は、ビルドの種類に応じて別のビルド ファイルを含めることです。 ナントタスク. 。考えられる代替案は、 nantcontrib の iniread タスク.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top