2008-09-16 3 views

Répondre

26

Étape 1: Définir une propriété dans votre script NAnt pour suivre l'environnement que vous construisez pour (local, test, production, etc.)

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

Étape 2: Si vous ne possédez pas déjà une cible de configuration ou d'initialisation que toutes les cibles dépendent, puis créer une cible de configuration, et assurez-vous que vos autres objectifs dépendent.

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

Étape 3: Mettre à jour votre cible de configuration pour tirer dans un fichier de propriétés appropriées en fonction de la propriété de l'environnement.

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

Remarque, je tiens à permettre aux membres de l'équipe de définir leurs propres fichiers local.config.xml qui ne reçoivent pas un défenseur du contrôle des sources. Cela fournit un endroit agréable pour stocker des chaînes de connexion locales ou d'autres paramètres d'environnement local.

Étape 4: Définissez la propriété de l'environnement lorsque vous invoquez NAnt, par exemple:

  • Nant -D: environnement = dev
  • Nant -D: environnement = test
  • Nant -D: environnement = production
+0

Votre ligne échoue pour moi avec le message: "Tâche non autorisée dans les cibles, doit être au niveau du projet." – vakman

0

La façon dont j'ai fait ce genre de chose est d'inclure des fichiers de construction séparés en fonction du type de construction en utilisant le nant task. Une alternative possible pourrait être d'utiliser le iniread task in nantcontrib.

5

Vous pouvez utiliser la tâche include pour inclure un autre fichier de construction (contenant vos propriétés) dans le fichier de construction principal. L'attribut if de la tâche include peut tester contre une variable pour déterminer si le fichier de construction doit être inclus:

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

J'ai eu un problème similaire que la réponse de scott.caligan partiellement résolu, mais je voulais que les gens soient en mesure de définir l'environnement et de charger le un propriétés ppropriate fichier simplement en spécifiant une cible comme ceci:

  • Nant dev
  • Nant Test
  • stade nante

Vous pouvez le faire en ajoutant une cible qui définit la variable d'environnement. Par exemple:

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