Crear y ejecutar un archivo de comandos de implementación

por Jason Lee

En este tema se describe cómo crear un archivo de comandos que le permitirá ejecutar una implementación mediante archivos del proyecto de Microsoft Build Engine (MSBuild) como un proceso repetido de un solo paso.

Este tema forma parte de una serie de tutoriales basados en los requisitos de implementación empresarial de una empresa ficticia denominada Fabrikam, Inc. Esta serie de tutoriales utiliza una solución de ejemplo, la solución Contact Manager, para representar una aplicación web con un nivel de complejidad realista, que incluye una aplicación ASP.NET MVC 3, un servicio Windows Communication Foundation (WCF) y un proyecto de base de datos.

El método de implementación que constituye el núcleo de estos tutoriales se basa en el enfoque del archivo de proyecto dividido descrito en Descripción del archivo del proyecto, en el que el proceso de compilación está controlado por dos archivos de proyecto: uno que contiene las instrucciones de compilación que se aplican a todos los entornos de destino y otro que contiene los valores de compilación e implementación específicos del entorno. En tiempo de compilación, el archivo del proyecto específico del entorno se combina en el archivo del proyecto independiente del entorno para formar un conjunto completo de instrucciones de compilación.

Información general del proceso

En este tema, aprenderá a crear y ejecutar un archivo de comandos que use estos archivos del proyecto para realizar una implementación repetible en el entorno de destino. Básicamente, el archivo de comandos debe contener un comando de MSBuild que:

  • Indique a MSBuild que ejecute el archivo Publish.proj independiente del entorno.
  • Indique al archivo Publish.proj qué archivo contiene la configuración del proyecto específica del entorno y dónde encontrarlo.

Creación de un comando de MSBuild

Como se ha descrito en Descripción del proceso de compilación, el archivo del proyecto específico del entorno (por ejemplo, Env-Dev.proj) está diseñado para importarse en el archivo Publish.proj independiente del entorno en tiempo de compilación. Juntos, estos dos archivos proporcionan un conjunto completo de instrucciones que indican a MSBuild cómo compilar e implementar la solución.

El archivo Publish.proj usa un elemento Import para importar el archivo del proyecto específico del entorno.

<Import Project="$(TargetEnvPropsFile)"/>

Por tanto, al usar MSBuild.exe para compilar e implementar la solución Contact Manager, debe hacer lo siguiente:

  • Ejecutar MSBuild.exe en el archivo Publish.proj.
  • Especificar la ubicación del archivo del proyecto específico del entorno y proporcionar un parámetro de línea de comandos denominado TargetEnvPropsFile.

Para ello, el comando de MSBuild debe ser similar al siguiente:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj

Desde aquí, con un paso sencillo puede pasar a una implementación repetible de un solo paso. Lo único que debe hacer es agregar el comando de MSBuild a un archivo .cmd. En la solución Contact Manager, la carpeta Publish incluye un archivo denominado Publish-Dev.cmd que hace exactamente esto.

%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe Publish.proj /fl /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj
echo 
pause

Nota:

El modificador /fl indica a MSBuild que cree un archivo de registro denominado msbuild.log en el directorio de trabajo en el que se ha invocado MSBuild.exe.

Para implementar o volver a implementar la solución Contact Manager, lo único que debe hacer es ejecutar el archivo Publish-Dev.cmd. Al ejecutar el archivo, MSBuild hará lo siguiente:

  • Compilar todos los proyectos de la solución.
  • Generar paquetes web implementables para los proyectos de aplicación web.
  • Generar archivos .dbschema y .deploymanifest para los proyectos de base de datos.
  • Implementar los paquetes web en el servidor web.
  • Implementar la base de datos en el servidor de bases de datos.

Ejecución de la implementación

Cuando haya creado un archivo de comandos para el entorno de destino, debería poder completar toda la implementación simplemente ejecutando el archivo.

Para implementar la solución Contact Manager en el entorno de prueba

  1. En la estación de trabajo del desarrollador, abra el Explorador de Windows y vaya a la ubicación del archivo Publish-Dev.cmd.

  2. Haga doble clic en el archivo para ejecutarlo.

  3. Si aparece un cuadro de diálogo Abrir archivo: advertencia de seguridad, haga clic en Ejecutar.

  4. Si los valores de configuración y los servidores de prueba están configurados correctamente, en la ventana del símbolo del sistema se mostrará un mensaje de compilación correcta cuando MSBuild haya terminado de procesar los archivos del proyecto.

    If your configuration settings and test servers are set up correctly, the Command Prompt window will show a Build succeeded message when MSBuild has finished processing the project files.

  5. Si es la primera vez que ha implementado la solución en este entorno, deberá agregar la cuenta de máquina del servidor web de prueba a los roles db_datawriter y db_datareader de la base de datos ContactManager. Este procedimiento se describe en Configuración de un servidor de base de datos para la publicación de Web Deploy.

    Nota:

    Solo tiene que asignar estos permisos al crear la base de datos. De forma predeterminada, el proceso de compilación no volverá a crear la base de datos en cada implementación; en su lugar, comparará la base de datos existente con el esquema más reciente y solo realizará los cambios necesarios. Como resultado, solo debe tener que asignar estos roles de base de datos la primera vez que implemente la solución.

  6. Abra Internet Explorer y vaya a la dirección URL de la aplicación Contact Manager (por ejemplo, http://testweb1:85/ContactManager/).

  7. Compruebe que la aplicación funciona según lo previsto y que puede agregar contactos.

    Verify that the application works as expected and you're able to add contacts.

Conclusión

La creación de un archivo de comandos con las instrucciones de MSBuild proporciona una manera rápida y sencilla de compilar e implementar una solución de varios proyectos en un entorno de destino específico. Si necesita implementar repetidamente la solución en varios entornos de destino, puede crear varios archivos de comandos. En cada archivo de comandos, el comando MSBuild compilará el mismo archivo del proyecto universal, pero especificará un archivo del proyecto específico del entorno diferente. Por ejemplo, un archivo de comandos para publicar en un entorno de desarrollo o prueba podría contener este comando de MSBuild:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj

Un archivo de comandos para publicar en un entorno de ensayo podría contener este comando de MSBuild:

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj

Nota:

Para obtener instrucciones sobre cómo personalizar los archivos del proyecto específicos del entorno para entornos de servidor propios, vea Configuración de propiedades de implementación para un entorno de destino.

También puede personalizar el proceso de compilación para cada entorno si reemplaza las propiedades o establece otros modificadores en el comando de MSBuild. Para más información, vea Referencia de la línea de comandos de MSBuild.