2008-09-16 8 views

Respuesta

26

Paso 1: Definir una propiedad en la secuencia de comandos de NAnt para rastrear el entorno en el que está la construcción de (local, prueba, producción, etc.).

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

Paso 2: Si usted no tiene ya un objetivo de configuración o inicialización que todos los objetivos depende, a continuación, crear un destino de configuración y asegúrese de que sus otros objetivos dependen de ello.

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

Paso 3: Modificar la configuración de destino para tirar en un archivo de propiedades apropiadas sobre la base de la propiedad de entorno.

<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, me gusta para permitir que los miembros del equipo para definir sus propios archivos local.config.xml que no se comprometan a control de código fuente. Esto proporciona un buen lugar para almacenar cadenas de conexión locales u otras configuraciones de entorno local.

Paso 4: Establecer la propiedad de entorno cuando se invoca de NAnt, por ejemplo:

  • Nant -D: entorno dev =
  • Nant -D: entorno de prueba =
  • Nant -D: entorno = producción
+0

Su línea falla para mí con el mensaje: "Tarea no permitida en los objetivos. Debe estar al nivel del proyecto". – vakman

0

La forma en que he hecho este tipo de cosas es incluir archivos de compilación separados dependiendo del tipo de compilación usando el nant task. Una posible alternativa podría ser usar el iniread task in nantcontrib.

5

Puede usar la tarea include para incluir otro archivo de compilación (que contenga sus propiedades) dentro del archivo de compilación principal. El atributo if del include tarea puede comprobar con respecto a una variable para determinar si el fichero de construcción se debe incluir:

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

Tuve un problema similar que la respuesta de scott.caligan parcialmente resuelto, sin embargo, quería que las personas pudieran configurar el entorno y cargar un ppropriate propiedades de ficheros justo mediante la especificación de un objetivo, así:

  • Nant dev
  • prueba Nant
  • etapa Nant

Usted puede hacer esto mediante la adición de un objetivo que establece la variable de entorno. Por ejemplo:

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