Domanda

Voglio caricare un file di proprietà diverso in base a una variabile.

Fondamentalmente, se si esegue una build di sviluppo utilizzare questo file delle proprietà, se si esegue una build di test utilizzare questo altro file delle proprietà e se si esegue una build di produzione utilizzare ancora un terzo file delle proprietà.

È stato utile?

Soluzione

Passo 1:Definisci una proprietà nel tuo script NAnt per tenere traccia dell'ambiente per cui stai creando (locale, test, produzione, ecc.).

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

Passo 2:Se non disponi già di una destinazione di configurazione o di inizializzazione da cui dipendono tutte le destinazioni, crea una destinazione di configurazione e assicurati che le altre destinazioni dipendano da essa.

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

Passaggio 3:Aggiorna il tuo target di configurazione per inserire un file delle proprietà appropriato in base alla proprietà dell'ambiente.

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

Nota: mi piace consentire ai membri del team di definire i propri file local.config.xml che non vengono vincolati al controllo del codice sorgente.Ciò fornisce un luogo ideale in cui archiviare stringhe di connessione locali o altre impostazioni dell'ambiente locale.

Passaggio 4:Imposta la proprietà dell'ambiente quando invochi NAnt, ad esempio:

  • nant -D:ambiente=dev
  • nant -D:ambiente=test
  • nant -D:ambiente=produzione

Altri suggerimenti

Puoi usare il include compito di includere un altro file di build (contenente le tue proprietà) all'interno del file di build principale.IL if attributo del include l'attività può testare una variabile per determinare se il file di build deve essere incluso:

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

Ho avuto un problema simile che la risposta di scott.caligan ha parzialmente risolto, tuttavia volevo che le persone fossero in grado di impostare l'ambiente e caricare il file delle proprietà appropriato semplicemente specificando un target in questo modo:

  • nant dev
  • prova non necessaria
  • stadio nant

Puoi farlo aggiungendo un target che imposta la variabile di ambiente.Ad esempio:

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

Il modo in cui ho fatto questo genere di cose è includere file di build separati a seconda del tipo di build utilizzando il file compito non importante.Una possibile alternativa potrebbe essere quella di utilizzare il file attività di iniread in nantcontrib.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top