2010-09-03 23 views
10

Estoy intentando automatizar nuestro proceso de compilación/implementación.Cómo ejecutar MSDeploy un paquete de sitio web creado en un sitio web de IIS virgen

Hasta el momento estoy usando:

  • una solución de Visual Studio 2010 con un principal proyecto de aplicaciones web (y los proyectos dependientes)
  • MSBuild
  • MSDeploy
  • CruiseControl.Net

Así que después de mucho forcejeo y crujir de dientes, ahora tengo a CCNet lanzando una secuencia de comandos MSBuild para construir, empacar y desplegar el sitio web. El guiónMSBuild es el siguiente:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<Target Name="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.sln" 
        Targets="Clean;Rebuild" 
        Properties="Configuration=$(Configuration)" 
    /> 
</Target> 

<!--<Target Name="Test" DependsOnTargets="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web.Tests\Product.Web.Tests.csproj" 
        Properties="Configuration=$(Configuration);OutputPath=$(CCNetArtifactDirectory)\Tests\" /> 
    <Exec Command="$(MSTestPath) /testcontainer:$(CCNetArtifactDirectory)\Tests\Product.Web.Tests.dll /runconfig:$(CCNetWorkingDirectory)\src\Local.testsettings" ContinueOnError="false" /> 
</Target>--> 

<Target Name="Package" DependsOnTargets="Build"> 
    <MSBuild Projects="$(CCNetWorkingDirectory)\src\Product.Web\Product.Web.csproj" 
        Targets="Package" 
        Properties="Configuration=$(Configuration);PackageLocation=$(PackageDir)\Product.zip" 
    /> 
</Target> 

<Target Name="Deploy" DependsOnTargets="Package"> 
    <Exec Command="&quot;$(MSDeployPath)&quot; -source:package='$(PackageDir)\Product.zip' -dest:auto,computerName='$(MSDeployComputerName)',includeAcls='False' -verb:sync -setParamFile:$(PackageDir)\Product.SetParameters.xml" ContinueOnError="false" /> 
</Target> 

Todo esto funciona bien siempre y cuando en el equipo de destino ya existe un sitio web configurado en IIS. Esto no necesita ser un sitio "real" existente (podría ser simplemente un shell).

Si bien esto es genial, realmente quiero que MSDeploy cree automáticamente el sitio web, como parece que puede hacer con una aplicación web. es posible? Y si es así, ¡cualquier ayuda sería muy apreciada!

Respuesta

4

Bastante seguro de que MSDeploy no puede hacer eso. Una cosa que he hecho en el pasado es tener una llamada de tarea Exec appcmd.exe para derribar/construir un nuevo sitio web. El MSBuild Community Tasks tiene algunas capacidades de sitio web, así como el MSBuild Extension Pack.

+1

Esto también es lo que he encontrado - Usé msdeploy -verb: sync -source: runCommand = c: \ mycommand.bat, nombreDeEquipo = MyServer -dest: auto, donde mycommand.bat contiene los comandos appcmd.exe para cree el nuevo sitio en IIS – zcrar70

10

MSDeploy tiene la capacidad, solo tiene que conectar el proveedor correcto.

Por ejemplo, está utilizando el proveedor "auto" en su destino, que básicamente dice que el destino será el mismo (o compatible) que el origen, que está configurando como un paquete. Como un paquete no especifica su entorno de alojamiento, msdeploy no intentará hacer nada con él, simplemente copiará los archivos del paquete básicamente.

podrá llamar de automóviles en (la "-dest: auto"):

-dest:auto,computerName='$(MSDeployComputerName)' 

Para obtener MSDeploy para crear el sitio, es necesario utilizar un proveedor más específico que entender los conceptos de una "sitio" y una "aplicación" y cómo pueden usar el paquete como contenido de un elemento del sitio web.

No he hecho esto por un tiempo, así que no quiero especificar detalles (ya que probablemente lo guiaré mal), pero eche un vistazo al documento de MSDN en los proveedores de msdeploy.

primer vistazo a auto, su configuración actual. Luego eche un vistazo a iisApp y appHostconfig.

http://technet.microsoft.com/en-us/library/dd569040(WS.10).aspx

Creo que uno de los 2 va a crear el sitio/aplicación para usted si se usa correctamente, y le dará el resultado que necesita.

+0

appHostConfig puede copiar una configuración de IIS en un nuevo sitio en el servidor de destino, pero no creo que pueda crear un nuevo sitio desde cero en el servidor de destino sin tener una fuente desde donde copiar. – zcrar70

+0

sí, en el momento en que no podía recordar, enumeré tanto iisApp como appHostConfig. El proveedor de iisApp engancha al proveedor de createApp, que debería crear el sitio –

Cuestiones relacionadas