Implantação de pacotes da Web

por Jason Lee

Este tópico descreve como você pode publicar pacotes de implantação da Web em um servidor remoto usando a Ferramenta de Implantação da Web (Implantação da Web) 2.0 dos Serviços de Informações da Internet (IIS).

Há duas main maneiras de implantar um pacote Web em um servidor remoto:

  • Você pode usar o utilitário de linha de comando MSDeploy.exe diretamente.
  • Você pode executar o arquivo [nome do projeto].deploy.cmd gerado pelo processo de build.

O resultado final é o mesmo, independentemente de qual abordagem você usa. Essencialmente, tudo o que o arquivo .deploy.cmd faz é executar MSDeploy.exe com alguns valores predeterminados, para que você não precise fornecer tanta informação para implantar o pacote. Isso simplifica o processo de implantação. Por outro lado, usar MSDeploy.exe diretamente oferece muito mais flexibilidade sobre exatamente como seu pacote é implantado.

Qual abordagem você usar dependerá de uma variedade de fatores, incluindo quanto controle você precisa sobre o processo de implantação e se você está direcionando o serviço Agente Remoto de Implantação da Web ou o Manipulador de Implantação da Web. Este tópico explica como usar cada abordagem e identifica quando cada abordagem é apropriada.

As tarefas e instruções passo a passo neste tópico pressupõem que:

Executar o arquivo [nome do projeto].deploy.cmd é a maneira mais simples de implantar um pacote Web. Em particular, o uso do arquivo .deploy.cmd oferece essas vantagens ao usar MSDeploy.exe diretamente:

  • Você não precisa especificar o local do pacote de implantação da Web— o arquivo .deploy.cmd já sabe onde ele está.
  • Você não precisa especificar o local do arquivo SetParameters.xml – o arquivo .deploy.cmd já sabe onde ele está.
  • Você não precisa especificar provedores MSDeploy de origem e destino— o arquivo .deploy.cmd já sabe quais valores usar.
  • Você não precisa especificar as configurações de operação MSDeploy— o arquivo .deploy.cmd adiciona os valores comumente necessários ao comando MSDeploy.exe automaticamente.

Antes de usar o arquivo .deploy.cmd para implantar um pacote web, você deve garantir que:

  • O arquivo .deploy.cmd , o [nome do projeto]. SetParameters.xml arquivo e o pacote web ([nome do projeto].zip) estão na mesma pasta.
  • A Implantação da Web (MSDeploy.exe) é instalada no computador que executa o arquivo .deploy.cmd .

O arquivo .deploy.cmd dá suporte a várias opções de linha de comando. Quando você executa o arquivo em um prompt de comando, essa é a sintaxe básica:

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

Você deve especificar um sinalizador /T ou um sinalizador /Y para indicar se deseja executar uma execução de avaliação ou uma implantação dinâmica respectivamente (não use os dois sinalizadores no mesmo comando). Esta tabela explica a finalidade de cada um desses sinalizadores.

Sinalizador Descrição
/T Chama MSDeploy.exe com o sinalizador –whatif , que indica uma execução de avaliação. Em vez de implantar o pacote, ele cria um relatório do que aconteceria se você implantasse o pacote.
/Y Chama MSDeploy.exe sem o sinalizador –whatif . Isso implanta o pacote no computador local ou no servidor de destino especificado.
/M Especifica o nome do servidor de destino ou a URL do serviço. Para obter mais informações sobre os valores que você pode fornecer aqui, consulte a seção Considerações de ponto de extremidade neste tópico. Se você omitir o sinalizador /M , o pacote será implantado no computador local.
/Um Especifica o tipo de autenticação que MSDeploy.exe deve usar para executar a implantação. Os valores possíveis são NTLM e Basic. Se você omitir o sinalizador /A , o tipo de autenticação usará como padrão o NTLM para implantação no serviço Agente Remoto de Implantação da Web e para Básico para implantação no Manipulador de Implantação da Web.
/U Especifica um nome de usuário. Isso só se aplica se você estiver usando a autenticação básica.
/P Especifica a senha. Isso só se aplica se você estiver usando a autenticação básica.
/L Indica que o pacote deve ser implantado na instância de IIS Express local.
/G Especifica que o pacote é implantado usando a configuração do provedor tempAgent. Se você omitir o sinalizador /G , o valor usará como padrão false.

Observação

Sempre que o processo de build cria um pacote Web, ele também cria um arquivo chamado [nome do projeto].deploy-readme.txt que explica essas opções de implantação.

Além desses sinalizadores, você pode especificar as configurações de operação de Implantação da Web como parâmetros adicionais .deploy.cmd . Todas as configurações adicionais especificadas são simplesmente passadas para o comando MSDeploy.exe subjacente. Para obter mais informações sobre essas configurações, consulte Configurações de Operação de Implantação da Web.

Suponha que você queira implantar o projeto de aplicativo Web ContactManager.Mvc em um ambiente de teste executando o arquivo .deploy.cmd . Seu ambiente de teste está configurado para usar o serviço Agente Remoto de Implantação da Web, conforme descrito em Configurar um servidor Web para publicação de implantação na Web (Agente Remoto). Para implantar o aplicativo Web, você precisa concluir as próximas etapas.

Para implantar um aplicativo Web usando o arquivo .deploy.cmd

  1. Compile e empacote o projeto de aplicativo Web, conforme descrito em Compilando e empacotando projetos de aplicativo Web.

  2. Modifique o arquivo ContactManager.Mvc.SetParameters.xml para conter os valores de parâmetro corretos para seu ambiente de teste, conforme descrito em Configurando parâmetros para implantação de pacote web.

  3. Abra uma janela do Prompt de Comando e navegue até o local do arquivo ContactManager.Mvc.deploy.cmd .

  4. Digite este comando e pressione Enter:

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

Neste exemplo:

  • O sinalizador /Y indica que você deseja realmente implantar o pacote, em vez de executar uma execução de avaliação.
  • O sinalizador /M indica que você deseja implantar o pacote no servidor chamado TESTWEB1. A partir desse valor, MSDeploy.exe tentará implantar o pacote no serviço Agente Remoto de Implantação da Web em http://TESTWEB1/MSDeployAgentService.
  • O sinalizador /A indica que você deseja usar a autenticação NTLM. Dessa forma, você não precisa especificar um nome de usuário e uma senha.

Para ilustrar como o uso do arquivo .deploy.cmd simplifica o processo de implantação, dê uma olhada no comando MSDeploy.exe que é gerado e executado quando você executa ContactManager.Mvc.deploy.cmd usando as opções mostradas acima.

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

Para obter mais informações sobre como usar o arquivo .deploy.cmd para implantar um pacote da Web, consulte Como instalar um pacote de implantação usando o arquivo deploy.cmd.

Usando MSDeploy.exe

Embora o uso do arquivo .deploy.cmd geralmente simplifica o processo de implantação, há algumas situações em que é preferível usar MSDeploy.exe diretamente. Por exemplo:

  • Se você quiser implantar no Manipulador de Implantação da Web como um usuário não administrador, não poderá usar o arquivo .deploy.cmd . Isso ocorre devido a um bug na Implantação da Web 2.0, conforme descrito em Considerações de ponto de extremidade.
  • Se você quiser alternar manualmente entre diferentes arquivos SetParameters.xml em locais diferentes, talvez prefira usar MSDeploy.exe diretamente.
  • Se você quiser substituir vários argumentos de linha de comando MSDeploy.exe, talvez prefira usar MSDeploy.exe diretamente.

Ao usar MSDeploy.exe, você precisa fornecer três informações importantes:

  • Um parâmetro –source que indica de onde seus dados são provenientes.
  • Um parâmetro –dest que indica para onde seus dados vão.
  • Um parâmetro –verbo que indica a operação que você deseja executar.

MSDeploy.exe depende de provedores de implantação da Web para processar dados de origem e de destino. A Implantação da Web inclui muitos provedores que representam o intervalo de aplicativos e fontes de dados com as quais ele pode trabalhar— por exemplo, há provedores para bancos de dados SQL Server, servidores Web do IIS, certificados, assemblies gac (cache de assembly global), vários arquivos de configuração diferentes e muitos outros tipos de dados. O parâmetro –source e o parâmetro –dest devem especificar um provedor, no formulário –source:[providerName]=[location]. Ao implantar um pacote da Web em um site do IIS, você deve usar estes valores:

  • O provedor –source é sempre empacotado. Por exemplo:

    -source:package='[path to web package]'
    
  • O provedor –dest é sempre automático. Por exemplo:

    -dest:auto='[server name or service URL]'
    
  • O –verbo é sempre sincronizado.

    -verb:sync
    

Além disso, você precisará especificar várias outras configurações específicas do provedor e configurações gerais de operação. Por exemplo, suponha que você queira implantar o aplicativo Web ContactManager.Mvc em um ambiente de preparo. A implantação terá como destino o Manipulador de Implantação da Web e deverá usar a autenticação básica. Para implantar o aplicativo Web, você precisa concluir as próximas etapas.

Para implantar um aplicativo Web usando MSDeploy.exe

  1. Compile e empacote o projeto de aplicativo Web, conforme descrito em Compilando e empacotando projetos de aplicativo Web.

  2. Modifique o arquivo ContactManager.Mvc.SetParameters.xml para conter os valores de parâmetro corretos para seu ambiente de preparo, conforme descrito em Configurando parâmetros para implantação de pacote web.

  3. Abra uma janela do Prompt de Comando e navegue até o local do MSDeploy.exe. Normalmente, isso ocorre em %PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe.

  4. Digite este comando e pressione Enter (desconsidere as quebras de linha):

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

Neste exemplo:

  • O parâmetro –source especifica o provedor de pacotes e indica o local do pacote Web.
  • O parâmetro –dest especifica o provedor automático . A configuração computerName fornece a URL de serviço do Manipulador de Implantação da Web no servidor de destino. A configuração authtype indica que você deseja usar a autenticação básica e, como tal, você precisa fornecer um nome de usuário e uma senha. Por fim, a configuração includeAcls="False" indica que você não deseja copiar as ACLs (listas de controle de acesso) dos arquivos em seu aplicativo Web de origem para o servidor de destino.
  • O argumento –verb:sync indica que você deseja replicar o conteúdo de origem no servidor de destino.
  • Os argumentos –disableLink indicam que você não deseja replicar pools de aplicativos, configuração de diretório virtual ou certificados SSL (Secure Sockets Layer) no servidor de destino. Para obter mais informações, consulte Extensões de Link de Implantação da Web.
  • O parâmetro –setParamFile fornece o local do arquivo SetParameters.xml .
  • A opção –allowUntrusted indica que a Implantação da Web deve aceitar certificados SSL que não foram emitidos por uma autoridade de certificação confiável. Se você estiver implantando no Manipulador de Implantação da Web e tiver usado um certificado autoassinado para proteger a URL do serviço, precisará incluir essa opção.

Automatizando a implantação de pacote Web

Em muitos cenários corporativos, você desejará implantar seus pacotes Web como parte de uma implantação automatizada ou de etapa única maior. Independentemente de você optar por implantar seus pacotes Web executando o arquivo .deploy.cmd ou usando MSDeploy.exe diretamente, você pode parametrizar seus comandos e chamá-los de um destino em um arquivo de projeto do Microsoft Build Engine (MSBuild).

Na solução de exemplo do Contact Manager, dê uma olhada no destino PublishWebPackages no arquivo Publish.proj . Esse destino é executado uma vez para cada arquivo .deploy.cmd identificado por uma lista de itens chamada PublishPackages. O destino usa propriedades e metadados de item para criar um conjunto completo de valores de argumento para cada arquivo .deploy.cmd e, em seguida, usa a tarefa Exec para executar o comando.

<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:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Observação

Para obter uma visão geral mais ampla do modelo de arquivo de projeto na solução de exemplo e uma introdução aos arquivos de projeto personalizados em geral, consulte Noções básicas sobre o arquivo de projeto e Noções básicas sobre o processo de build.

Considerações sobre ponto de extremidade

Independentemente de você implantar seu pacote Web executando o arquivo .deploy.cmd ou usando MSDeploy.exe diretamente, você precisa especificar um nome de computador ou um ponto de extremidade de serviço para sua implantação.

Se o servidor Web de destino estiver configurado para implantação usando o serviço Agente Remoto de Implantação da Web, especifique a URL do serviço de destino como seu destino.

http://[server name]/MSDeployAgentService

Como alternativa, você pode especificar o nome do servidor sozinho como seu destino e a Implantação da Web inferirá a URL do serviço do agente remoto.

[server name]

Se o servidor Web de destino estiver configurado para implantação usando o Manipulador de Implantação da Web, você precisará especificar o endereço do ponto de extremidade do WMSvc (Serviço de Gerenciamento Web do IIS) como seu destino. Por padrão, isso assume o formulário:

https://[server name]:8172/MSDeploy.axd

Você pode direcionar qualquer um desses pontos de extremidade usando o arquivo .deploy.cmd ou MSDeploy.exe diretamente. No entanto, se você quiser implantar no Manipulador de Implantação da Web como um usuário não administrador, conforme descrito em Configurar um Servidor Web para Publicação de Implantação da Web (Manipulador de Implantação da Web), será necessário adicionar uma cadeia de caracteres de consulta ao endereço do ponto de extremidade de serviço.

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

Isso ocorre porque o usuário não administrador não tem acesso no nível do servidor ao IIS; ele ou ela só tem acesso a um site específico do IIS. No momento da gravação, devido a um bug no WPP (Pipeline de Publicação na Web), você não pode executar o arquivo .deploy.cmd usando um endereço de ponto de extremidade que inclui uma cadeia de caracteres de consulta. Nesse cenário, você precisa implantar seu pacote Web usando MSDeploy.exe diretamente.

Observação

Para obter mais informações sobre o serviço Implantar Agente Remoto da Web e o Manipulador de Implantação da Web, consulte Escolhendo a abordagem certa para a implantação da Web. Para obter diretrizes sobre como configurar seus arquivos de projeto específicos do ambiente para implantar nesses pontos de extremidade, consulte Configurar propriedades de implantação para um ambiente de destino.

Considerações de autenticação

Independentemente de você implantar seu pacote Web executando o arquivo .deploy.cmd ou usando MSDeploy.exe diretamente, você precisa especificar um tipo de autenticação. A Implantação da Web aceita dois valores possíveis: NTLM ou Basic. Se você especificar a autenticação básica, também precisará fornecer um nome de usuário e uma senha. Há vários fatores que você precisa estar ciente ao selecionar um tipo de autenticação:

  • Se você estiver implantando no serviço Agente Remoto de Implantação da Web, deverá usar a autenticação NTLM. O serviço de agente remoto não aceita credenciais básicas de autenticação.
  • Se você estiver implantando no Manipulador de Implantação da Web, poderá usar o NTLM ou a autenticação básica. A configuração padrão é a autenticação básica. Embora a autenticação básica dependa de nomes de usuário e senhas sendo transmitidas em texto sem formatação, suas credenciais são protegidas, pois o Manipulador de Implantação da Web sempre usa criptografia SSL.
  • Se o pacote da Web incluir um banco de dados e o servidor Web e o servidor de banco de dados forem computadores separados, você não poderá implantar o banco de dados usando a autenticação NTLM devido à limitação de "salto duplo" do NTLM. Você precisa usar SQL Server credenciais na cadeia de conexão de implantação ou fornecer credenciais básicas de autenticação para a Implantação da Web. Esse problema é descrito mais detalhadamente em Implantando bancos de dados de associação em ambientes corporativos.

Conclusão

Este tópico descreveu como você pode implantar um pacote Web executando o arquivo .deploy.cmd ou usando MSDeploy.exe diretamente. Ele explicou quando cada abordagem pode ser apropriada e descreveu como você pode parametrizar e executar um comando de implantação como parte de um processo de build automatizado ou de etapa única maior.

Leitura Adicional

Para obter diretrizes sobre como criar e parametrizar um pacote de implantação da Web, consulte Compilando e empacotando projetos de aplicativo Web e configurando parâmetros para implantação de pacote Web. Para obter diretrizes sobre como criar e implantar pacotes Web de uma instância do TFS (Team Foundation Server), consulte Configurando o Team Foundation Server para implantação automatizada da Web. Para obter informações sobre como personalizar e solucionar problemas do processo de implantação, consulte Excluindo arquivos e pastas da implantação.