Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
por Jason Lee
Este tópico descreve como executar implantações "e se" (ou simuladas) usando o IIS (Internet Information Services) Web Deployment Tool (Web Deploy) e o VSDBCMD. Isso permite determinar os efeitos da lógica de implantação em um ambiente de destino específico antes de realmente implantar seu aplicativo.
Este tópico faz parte de uma série de tutoriais baseados nos requisitos de implantação empresarial de uma empresa fictícia chamada Fabrikam, Inc. Esta série de tutoriais usa uma solução de exemplo, a solução do Contact Manager, para representar um aplicativo Web com um nível realista de complexidade, incluindo um aplicativo ASP.NET MVC 3, um serviço WCF (Windows Communication Foundation) e um projeto de banco de dados.
O método de implantação no centro desses tutoriais baseia-se na abordagem de arquivo de projeto dividido descrita no Understanding the Project File, no qual o processo de build e implantação é controlado por dois arquivos de projeto, um contendo instruções de build que se aplicam a cada ambiente de destino e outro que contém configurações de build e implantação específicas do ambiente. Durante o build, o arquivo de projeto específico do ambiente é mesclado ao arquivo de projeto independente do ambiente para formar um conjunto completo de instruções de compilação.
Executando uma implantação de "What If" para pacotes da Web
Implantação Web inclui funcionalidade que permite executar implantações no modo "what if" (ou teste). Quando você implanta artefatos no modo "e se", o Web Deploy gera um arquivo de log como se a implantação tivesse sido executada, mas não altera nada no servidor de destino. Examinar o arquivo de log pode ajudá-lo a entender o impacto que sua implantação terá no servidor de destino, em particular:
- O que será adicionado.
- O que será atualizado.
- O que será excluído.
Como uma implantação "e se" não altera nada no servidor de destino, nem sempre é possível prever se uma implantação será bem-sucedida.
Conforme descrito na implantação de pacotes Web, você pode implantar pacotes Web usando a Implantação da Web de duas maneiras, usando o utilitário de linha de comando MSDeploy.exe diretamente ou executando o arquivo .deploy.cmd gerado pelo processo de build.
Se você estiver usando MSDeploy.exe diretamente, poderá executar uma implantação "e se" adicionando o sinalizador –whatif ao seu comando. Por exemplo, para avaliar o que aconteceria se você implantasse o pacote ContactManager.Mvc.zip em um ambiente de preparo, o comando MSDeploy deve ser semelhante ao seguinte. Observe que o exemplo a seguir está usando $CREDENTIAL_PLACEHOLDER$ como um espaço reservado para o par chave-valor de senha:
MSDeploy.exe
-whatif
-source:package="[path]\ContactManager.Mvc.zip"
-dest:auto,
computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
username="FABRIKAM\stagingdeployer",
password=$CREDENTIAL_PLACEHOLDER$,
authtype="Basic",
includeAcls="False"
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
-allowUntrusted
Quando estiver satisfeito com os resultados da implantação do "e se", você poderá remover o sinalizador –whatif para executar uma implantação ao vivo.
Observação
Para obter mais informações sobre opções de linha de comando para MSDeploy.exe, consulte Configurações de Operação de Implantação da Web.
Se você estiver usando o arquivo .deploy.cmd, poderá executar uma implantação simulada incluindo a flag /t (modo de avaliação) no lugar da flag /y ("sim," ou modo de atualização) em seu comando. Por exemplo, para avaliar o que aconteceria se você implantasse o pacote de ContactManager.Mvc.zip executando o arquivo .deploy.cmd , seu comando deve ser semelhante a este:
ContactManager.Mvc.deploy.cmd /t /m:TESTWEB1 /a:NTLM
Quando estiver satisfeito com os resultados da implantação do "modo de avaliação", você poderá substituir o sinalizador /t por um sinalizador /y para executar uma implantação dinâmica:
ContactManager.Mvc.deploy.cmd /y /m:TESTWEB1 /a:NTLM
Observação
Para obter mais informações sobre opções de linha de comando para arquivos .deploy.cmd , consulte Como instalar um pacote de implantação usando o arquivo deploy.cmd. Se você executar o arquivo .deploy.cmd sem especificar nenhum sinalizador, o prompt de comando exibirá uma lista de sinalizadores disponíveis.
Executando uma implantação "What If" para bancos de dados
Esta seção pressupõe que você esteja usando o utilitário VSDBCMD para executar a implantação de banco de dados incremental baseada em esquema. Essa abordagem é descrita com mais detalhes na implantação de projetos de banco de dados. Recomendamos que você se familiarize com este tópico antes de aplicar os conceitos descritos aqui.
Ao usar o VSDBCMD no modo de implantação , você pode usar o sinalizador /dd (ou /DeployToDatabase) para controlar se o VSDBCMD realmente implanta o banco de dados ou apenas gera um script de implantação. Se você estiver implantando um arquivo .dbschema, esse é o comportamento:
- Se você especificar /dd+ ou /dd, o VSDBCMD gerará um script de implantação e implantará o banco de dados.
- Se você especificar /dd- ou omitir a opção, o VSDBCMD gerará apenas um script de implantação.
Observação
Se você estiver implantando um arquivo .deploymanifest em vez de um arquivo .dbschema, o comportamento da opção /dd será muito mais complicado. Essencialmente, o VSDBCMD ignorará o valor da opção /dd se o arquivo .deploymanifest incluir um elemento DeployToDatabase com um valor true. A implantação de projetos de banco de dados descreve esse comportamento na íntegra.
Por exemplo, para gerar um script de implantação para o banco de dados ContactManager sem realmente implantar o banco de dados, o comando VSDBCMD deve ser semelhante a este:
vsdbcmd.exe /a:Deploy
/manifest:"…\ContactManager.Database.deploymanifest"
/cs:"Data Source=TESTDB1;Integrated Security=true"
/p:TargetDatabase=ContactManager
/dd-
/script:"…\Publish-ContactManager-Db.sql"
O VSDBCMD é uma ferramenta de implantação de banco de dados diferencial e, como tal, o script de implantação é gerado dinamicamente para conter todos os comandos SQL necessários para atualizar o banco de dados atual, se houver, para o esquema especificado. Examinar o script de implantação é uma maneira útil de determinar o impacto que sua implantação terá no banco de dados atual e nos dados que ele contém. Por exemplo, talvez você queira determinar:
- Se alguma tabela existente será removida e se isso resultará em perda de dados.
- Se a ordem das operações traz um risco de perda de dados, por exemplo, se você estiver dividindo ou mesclando tabelas.
Se você estiver satisfeito com o script de implantação, poderá repetir o VSDBCMD com a opção /dd+ para fazer as alterações. Como alternativa, você pode editar o script de implantação para atender aos seus requisitos e, em seguida, executá-lo manualmente no servidor de banco de dados.
Integrando a funcionalidade "What If" em arquivos de projeto personalizados
Em cenários de implantação mais complexos, você desejará usar um arquivo de projeto personalizado do MSBuild (Microsoft Build Engine) para encapsular sua lógica de build e implantação, conforme descrito em Noções básicas sobre o Arquivo de Projeto. Por exemplo, na solução de exemplo do Gerenciador de Contatos , o arquivo Publish.proj :
- Cria a solução.
- Usa o Web Deploy para empacotar e implantar o aplicativo ContactManager.Mvc.
- Usa-se o Web Deploy para empacotar e implantar o aplicativo ContactManager.Service.
- Implanta o banco de dados ContactManager .
Ao integrar a implantação de vários pacotes Web e/ou bancos de dados em um processo de etapa única dessa forma, você também pode querer a opção de executar toda a implantação em um modo "e se".
O arquivo Publish.proj demonstra como você pode fazer isso. Primeiro, você precisa criar uma propriedade para armazenar o valor "e se":
<PropertyGroup>
<WhatIf Condition=" '$(WhatIf)'=='' ">false</WhatIf>
</PropertyGroup>
Nesse caso, você criou uma propriedade chamada WhatIf com um valor padrão de false. Os usuários podem substituir esse valor definindo a propriedade como true em um parâmetro de linha de comando, como você verá em breve.
O próximo estágio é configurar os comandos de implantação da web e VSDBCMD para que as flags reflitam o valor da propriedade WhatIf. Por exemplo, o próximo destino (obtido do arquivo Publish.proj e simplificado) executa o arquivo .deploy.cmd para implantar um pacote Web. Por padrão, o comando inclui um comutador /Y ("sim" ou modo de atualização). Caso WhatIf esteja definido como true, isso será substituído por uma opção /T (modo de teste ou "e se").
<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
<PropertyGroup>
<_WhatIfSwitch>/Y</_WhatIfSwitch>
<_WhatIfSwitch Condition=" '$(WhatIf)'=='true' ">/T</_WhatIfSwitch>
<_Cmd>%(PublishPackages.FullPath) $(_WhatifSwitch)
/M:$(MSDeployComputerName)
/U:$(MSDeployUsername)
/P:$(MSDeployPassword)
/A:$(MSDeployAuth)
%(PublishPackages.AdditionalMSDeployParameters)
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
Da mesma forma, o próximo destino usa o utilitário VSDBCMD para implantar um banco de dados. Por padrão, uma opção /dd não está incluída. Isso significa que o VSDBCMD gerará um script de implantação, mas não implantará o banco de dados, ou seja, um cenário de "e se". Se a propriedade WhatIf não estiver definida como true, o parâmetro /dd será adicionado e o VSDBCMD implantará o banco de dados.
<Target Name="PublishDbPackages" Outputs="%(DbPublishPackages.Identity)">
<PropertyGroup>
<_DbDeployOrScript></_DbDeployOrScript>
<_DbDeployOrScript Condition=" '$(Whatif)'!='true' ">/dd</_DbDeployOrScript>
<_Cmd>"$(VsdbCmdExe)" /a:Deploy
/cs:"%(DbPublishPackages.DatabaseConnectionString)"
/p:TargetDatabase=%(DbPublishPackages.TargetDatabase)
/manifest:"%(DbPublishPackages.FullPath)"
/script:"$(_CmDbScriptPath)"
$(_DbDeployOrScript)
</_Cmd>
</PropertyGroup>
<Exec Command="$(_Cmd)"/>
</Target>
Você pode usar a mesma abordagem para parametrizar todos os comandos relevantes no arquivo de projeto. Quando quiser executar uma implantação do tipo "e se", você pode simplesmente fornecer um valor de propriedade WhatIf na linha de comando.
MSBuild.exe Publish.proj /p:WhatIf=true;TargetEnvPropsFile=EnvConfig\Env-Dev.proj
Dessa forma, você pode executar uma simulação de implantação "e se" para todos os componentes do projeto em uma única etapa.
Conclusion
Este tópico descreve como executar implantações "e se" usando o Web Deploy, o VSDBCMD e o MSBuild. Uma implantação "what if" permite que você avalie o impacto de uma implantação proposta antes de realmente fazer alterações no ambiente de destino.
Leitura Adicional
Para obter mais informações sobre a sintaxe de linha de comando de Implantação da Web, consulte Configurações de Operação de Implantação da Web. Para obter diretrizes sobre opções de linha de comando ao usar o arquivo .deploy.cmd , consulte Como instalar um pacote de implantação usando o arquivo deploy.cmd. Para obter diretrizes sobre a sintaxe de linha de comando do VSDBCMD, consulte Command-Line Reference for VSDBCMD.EXE (Deployment and Schema Import).