you uptodown pro para instalar descargar anbox msbuild msdeploy webdeploy web-publishing msbuild-wpp

msbuild - uptodown - Desplegando un paquete existente usando perfiles de publicación



you tags pro uptodown (1)

ACTUALIZACIÓN 2014-01-28

Mantener mi script personalizado actualizado con las versiones cambiantes de VS / Azure SDK terminó siendo un trabajo demasiado duro, por lo que volví a usar el script deploy.cmd generado, con una pequeña diferencia:

Comencé a dejar todos mis valores de parámetros fuera del archivo ProfileName.pubxml y en lugar de ponerlos en ProfileName.paramters.xml (ejemplo generado en .SetParameters.xml con el paquete, docs aquí ). Visual Studio / MSBuild los recogerá automáticamente por convención y puedo usarlos en el tiempo de ejecución pasando el -setParamFile:path/to/ProfileName.parameters.xml al llamar a deploy.cmd

ACTUALIZACIÓN: ahora se está manteniendo (y documentando) una versión más nueva de este script en GitHub - https://github.com/richardszalay/msdeploy-package-publish

Después de mucho excavar, encontré varios problemas en Microsoft.Web.Publishing.targets (v10.5) que evitan que esto funcione. Para solucionar estos problemas, he creado la siguiente secuencia de comandos de MSBuild que se puede colocar en el mismo directorio que csproj de la aplicación web. He añadido comentarios relacionados con arreglos y detalles de implementación.

La secuencia de comandos usa Microsoft.Web.Publishing.targets, por lo que la mayoría de las propiedades estándar aún deberían funcionar. Aquí hay algunas formas en que puedes usarlo:

# Convention based msbuild PackageDeploy.build /p:PublishProfile=Stage;WebPublishPipelineProjectName=Name_of_your_web_application # Absolute paths to profile + package msbuild PackageDeploy.build /p:PublishProfile=Path/To/Profile.pubxml;PackageFileName=Path/To/Package.zip;WebPublishPipelineProjectName==Name_of_your_web_application

Si está utilizando VS2012, asegúrese de declarar VisualStudioVersion=v11.0 para importar el archivo de publicación correcto.

Con este script, no debería tener que volver a verificar su aplicación web en las etapas posteriores de su canal de implementación. Solo deberá conservar los siguientes artefactos después de la etapa de compilación / paquete:

  • PackageDeploy.build (abajo)
  • Tus perfiles de publicación
  • El paquete de aplicaciones web zip

Aquí está la fuente para PackageDeploy.build:

<!-- This build script supports deployment of a website package to a publish profile without rebuilding the project or package If placed in the same directory as a web project that uses publish profiles, the following arguments will need to be defined: Convention based required arguments: PublishProfile: the name of the publish profile (or a path to a pubxml file if using non-convention based) Configuration: Debug/Release Convention based optional arguments: VisualStudioVersion: Property specific to this build script that determines which WPP version to use (v10.5 [default] for VS2010+Azure updates, v11.0 for VS2012) WebPublishPipelineProjectName: WebPublishPipelineProjectDirectory: The root to the web project directory if this build script isn''t there and PublishProfile isn''t a path (to auto-detect publish profile directory) Non-convention based optional arguments: PackageFileName: The full path to the website package zip UseDeclareParametersXMLInMsDeploy: true to save the parameters to a file and then use that file; false to inline the parameters UseMsDeployExe: true to use msdeploy.exe; false to use the VS MSBuild task --> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="DeployFromPackage"> <PropertyGroup> <!-- IMPL: Set this to v11.0 to use VS2012 --> <VisualStudioVersion>v10.5</VisualStudioVersion> </PropertyGroup> <PropertyGroup> <!-- IMPL: Declared in Microsoft.Web.Publishing.targets, but we need to declare PublishProfileRootFolder before it''s imported --> <WebPublishPipelineProjectDirectory Condition="''$(WebPublishPipelineProjectDirectory)''==''''">$(MSBuildProjectDirectory)</WebPublishPipelineProjectDirectory> <!-- IMPL: Usually detected by ".csproj" vs ".vbproj", but PackageDeploy.build is neither --> <PublishProfileRootFolder Condition="''$(PublishProfileRootFolder)'' == '''' and Exists(''My Project/PublishProfiles'')">$(WebPublishPipelineProjectDirectory)/My Project/PublishProfiles</PublishProfileRootFolder> <PublishProfileRootFolder Condition="''$(PublishProfileRootFolder)'' == '''' and Exists(''Properties/PublishProfiles'')">$(WebPublishPipelineProjectDirectory)/Properties/PublishProfiles</PublishProfileRootFolder> </PropertyGroup> <!-- IMPL: Select the correct version of Microsoft.Web.Publishing.targets (usually done by the csproj via WebApplication.targets) --> <Import Project="$(MSBuildExtensionsPath32)/Microsoft/VisualStudio/$(VisualStudioVersion)/Web/Microsoft.Web.Publishing.targets" /> <!-- FIX: MSDeployPublish depends on building the package (can be skipped by clearing MSDeployPublishDependsOn) --> <!-- IMPL: ImportPublishingParameterValues transforms all the MSDeployParameterValue+ParameterValue to MsDeployDeclareParameters+Value --> <Target Name="DeployFromPackage" Condition="''$(PublishProfile)'' != ''''" DependsOnTargets="ImportPublishingParameterValues"> <PropertyGroup> <_PublishMsDeployServiceUrl>$(MsDeployServiceUrl)</_PublishMsDeployServiceUrl> <_PublishMsDeployServiceUrl Condition="(''$(MSDeployPublishMethod)''==''INPROC'')"></_PublishMsDeployServiceUrl> </PropertyGroup> <ItemGroup> <!-- IMPL: Always uses "package" source --> <MsDeploySourceProviderSetting Remove="@(MsDeploySourceProviderSetting)" /> <MsDeploySourceProviderSetting Include="package"> <Path>@(_MSDeployPackageFile->''%(FullPath)'')</Path> <EncryptPassword>$(DeployEncryptKey)</EncryptPassword> <WebServerAppHostConfigDirectory>$(_MSDeploySourceWebServerAppHostConfigDirectory)</WebServerAppHostConfigDirectory> <WebServerManifest>$(_MSDeploySourceWebServerManifest)</WebServerManifest> <WebServerDirectory>$(_MSDeploySourceWebServerDirectory)</WebServerDirectory> </MsDeploySourceProviderSetting> <MsDeployDestinationProviderSetting Remove="@(MsDeployDestinationProviderSetting)" /> <MsDeployDestinationProviderSetting Include="auto"> <Path></Path> <ComputerName>$(_PublishMsDeployServiceUrl)</ComputerName> <UserName>$(UserName)</UserName> <Password>$(Password)</Password> <EncryptPassword>$(DeployEncryptKey)</EncryptPassword> <IncludeAcls>False</IncludeAcls> <AuthType>$(AuthType)</AuthType> <WebServerAppHostConfigDirectory>$(_MSDeployDestinationWebServerAppHostConfigDirectory)</WebServerAppHostConfigDirectory> <WebServerManifest>$(_MSDeployDestinationWebServerManifest)</WebServerManifest> <WebServerDirectory>$(_MSDeployDestinationWebServerDirectory)</WebServerDirectory> </MsDeployDestinationProviderSetting> </ItemGroup> <!--Debug/Diagnostic message is not localized--> <Message Text="MSDeployPublish MsDeploySourceProviderSetting is @(MsDeploySourceProviderSetting)" Condition="$(EnablePackageProcessLoggingAndAssert)" /> <Message Text="MSDeployPublish MsDeployDestinationProviderSetting is @(MsDeployDestinationProviderSetting)" Condition="$(EnablePackageProcessLoggingAndAssert)"/> <ExportParametersFile Condition="!$(UseDeclareParametersXMLInMsDeploy) And $(EnablePackageProcessLoggingAndAssert)" Parameters="@(MsDeployDeclareParameters)" DeclareSetParameterFile="$(PackageLogDir)/MSDeployPublish.parameters.xml" GenerateFileEvenIfEmpty="True" /> <!--First delete the ParameterFile--> <Delete Files="$(PublishParametersFile)" Condition="Exists($(PublishParametersFile))" ContinueOnError="true"/> <!-- FIX: Use SetParameterFile (rather than DeclareSetParameterFile), which isn''t used anywehere in Microsoft.Web.Publishing.targets --> <ExportParametersFile Parameters="@(MsDeployDeclareParameters)" SetParameterFile="$(PublishParametersFile)" GenerateFileEvenIfEmpty="True" Condition="$(UseDeclareParametersXMLInMsDeploy)" /> <PropertyGroup> <_VsPublishParametersFile></_VsPublishParametersFile> <_VsPublishParametersFile Condition="$(UseDeclareParametersXMLInMsDeploy) and ''$(_VsPublishParametersFile)''==''''">$(PublishParametersFile)</_VsPublishParametersFile> </PropertyGroup> <ItemGroup Condition="!$(UseDeclareParametersXMLInMsDeploy)"> <_VsPublish_MsDeployDeclareParameters Remove="@(_VsPublish_MsDeployDeclareParameters)" /> <_VsPublish_MsDeployDeclareParameters Include="@(MsDeployDeclareParameters)" /> <!-- IMPL: Utilising the real version of this has way too much baggage (simplifying it could have repercussions, though) --> <_VsPublish_MsDeployDeclareParameters Include="$(DeployParameterIISAppName)" Condition="''$(DeployIisAppPath)'' != ''''"> <Value>$(DeployIisAppPath)</Value> </_VsPublish_MsDeployDeclareParameters> </ItemGroup> <!-- FIX: Microsoft.Web.Publishing.targets uses "SetParameterItems", which doens''t appear to work. This uses SimpleSetParameterItems instead --> <VSMSDeploy Condition="!$(UseMsdeployExe)" MSDeployVersionsToTry="$(_MSDeployVersionsToTry)" Source="@(MsDeploySourceProviderSetting)" Destination="@(MsDeployDestinationProviderSetting)" DisableLink="$(PublishDisableLinks)" EnableLink="$(PublishEnableLinks)" AllowUntrustedCertificate="$(AllowUntrustedCertificate)" BuildingInsideVisualStudio="$(BuildingInsideVisualStudio)" SkipExtraFilesOnServer="$(SkipExtraFilesOnServer)" SkipRuleItems="@(MsDeploySkipRules)" OptimisticParameterDefaultValue="$(EnableOptimisticParameterDefaultValue)" SimpleSetParameterItems="@(_VsPublish_MsDeployDeclareParameters)" ImportSetParametersItems="$(_VsPublishParametersFile)" RetryAttempts="$(RetryAttemptsForDeployment)" InvokedByPublish="true" > <Output TaskParameter="Result" PropertyName="_PublishResult" /> </VSMSDeploy> <!-- FIX: Microsoft.Web.Publishing.targets uses "SetParameterItems", which doens''t appear to work. This uses SimpleSetParameterItems instead --> <MSdeploy Condition="$(UseMsdeployExe)" Verb="sync" Source="@(MsDeploySourceProviderSetting)" Destination="@(MsDeployDestinationProviderSetting)" DisableLink="$(PublishDisableLinks)" EnableLink="$(PublishEnableLinks)" EnableRule="$(MsDeployDoNotDeleteRule)" AllowUntrusted="$(AllowUntrustedCertificate)" SkipRuleItems="@(MsDeploySkipRules)" OptimisticParameterDefaultValue="$(EnableOptimisticParameterDefaultValue)" SimpleSetParameterItems="@(_VsPublish_MsDeployDeclareParameters)" ImportSetParametersItems="$(_VsPublishParametersFile)" RetryAttempts="$(RetryAttemptsForDeployment)" ExePath="$(MSDeployPath)" /> </Target> </Project>

Estoy tratando de usar el nuevo soporte de perfil de publicación (disponible en VS2012 y en VS2010 a través de una actualización) para crear una "canalización de despliegue" de entrega continua, por lo que se crea un paquete / zip en la primera "etapa" y el mismo paquete es Implementado en diversos entornos utilizando diferentes configuraciones.

¿Qué tareas / propiedades están involucradas en la implementación de un paquete existente con la configuración definida en un archivo pubxml, desde la línea de comandos y sin generar una compilación? Dicho de otra manera, me gustaría "publicar" en un paquete , y luego "publicar" ese mismo paquete en otro perfil sin reconstruirlo.

(Sé que puedo usar MSDeploy directamente, pero preferiría tener menos tuberías en cada proyecto si es posible)