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 maneiras principais 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 que o processo de compilação gera.
O resultado final é o mesmo, independentemente da abordagem que você usa. Essencialmente, tudo o que o arquivo .deploy.cmd faz é executá MSDeploy.exe com alguns valores predeterminados, para que você não precise fornecer tantas informações para implantar o pacote. Isso simplifica o processo de implantação. Por outro lado, usar o MSDeploy.exe diretamente oferece muito mais flexibilidade sobre como exatamente seu pacote é implantado.
A abordagem usada dependerá de vários 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 orientações neste tópico pressupõem que:
- Você criou e empacotou seu aplicativo Web, conforme descrito em Criando e empacotando projetos de aplicativo Web.
- Você modificou o arquivo SetParameters.xml para fornecer os valores de parâmetro corretos para seu ambiente de destino, conforme descrito em Configurando parâmetros para implantação de pacote Web.
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 estas vantagens em relação ao uso 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 do MSDeploy — o arquivo .deploy.cmd adiciona automaticamente os valores normalmente necessários ao comando MSDeploy.exe.
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 da 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 suporta várias opções de linha de comando. Quando você executa o arquivo a partir de um prompt de comando, esta é 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 ao vivo, 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 teste. Em vez de implantar o pacote, ele cria um relatório do que aconteceria se você implantasse o pacote. |
/Y | As chamadas 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 sobre 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 Portador, NTLM e Básico. Se você omitir o sinalizador /A , o tipo de autenticação será padronizado como NTLM para implantação no serviço Agente Remoto de Implantação da Web e como Básico para implantação no Manipulador de Implantação da Web. |
/U | Especifica o nome do usuário. Isso se aplica somente se você estiver usando a autenticação básica. |
/P | Especifica a senha. Isso se aplica somente se você estiver usando a autenticação básica. |
/L | Indica que o pacote deve ser implantado na instância local do IIS Express. |
/G | Especifica que o pacote é implantado usando a configuração do provedor tempAgent. Se você omitir o sinalizador /G , o valor padrão será false. |
Observação
Toda vez que o processo de compilação 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 .deploy.cmd adicionais. 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 da 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
Compile e empacote o projeto de aplicativo Web, conforme descrito em Criando e empacotando projetos de aplicativo Web.
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.
Abra uma janela do prompt de comando e navegue até o local do arquivo ContactManager.Mvc.deploy.cmd .
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 fazer uma execução de teste.
- 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 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 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 simplifique o processo de implantação, há algumas situações em que é preferível usá 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 sobre ponto de extremidade.
- Se você quiser alternar manualmente entre diferentes arquivos SetParameters.xml em locais diferentes, talvez prefira usá MSDeploy.exe diretamente.
- Se você quiser substituir vários MSDeploy.exe argumentos de linha de comando, talvez prefira usá MSDeploy.exe diretamente.
Ao usar MSDeploy.exe, você precisa fornecer três informações principais:
- Um parâmetro –source que indica de onde vêm seus dados.
- Um parâmetro –dest que indica para onde seus dados estão indo.
- Um parâmetro –verb 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 destino. A Implantação da Web inclui muitos provedores que representam a variedade de aplicativos e fontes de dados com os quais ela 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 formato –source:[providerName]=[location]. Ao implantar um pacote Web em um site do IIS, você deve usar estes valores:
O provedor –source é sempre package. 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 sync.
-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 deve 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 usando um token de acesso
O MSDeploy V3 dá suporte à autenticação com um token de acesso, também conhecido como token de portador. Os tokens de acesso são recomendados porque são os mais seguros.
Compile e empacote o projeto de aplicativo Web, conforme descrito em Criando e empacotando projetos de aplicativo Web.
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.
Abra uma janela do Prompt de Comando e navegue até o local de MSDeploy.exe. Isso geralmente ocorre em
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.Se você não tiver um token de acesso, crie um usando o comando:
az account get-access-token --query accessToken
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="Bearer", includeAcls="False", Password="{token}" -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
Bearer
authtype indica que você deseja usar um token de acesso para autenticação e, como tal, você precisa fornecer o valor do token como a senha. 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.
Para implantar um aplicativo Web usando a autenticação MSDeploy.exe e básica
Aviso
A autenticação básica não é recomendada se métodos mais seguros (token de portador) estiverem disponíveis.
Compile e empacote o projeto de aplicativo Web, conforme descrito em Criando e empacotando projetos de aplicativo Web.
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.
Abra uma janela do Prompt de Comando e navegue até o local de MSDeploy.exe. Isso geralmente ocorre em
%PROGRAMFILES%\IIS\Microsoft Web Deploy {version}\msdeploy.exe
.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, 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 pacotes Web
Em muitos cenários corporativos, você desejará implantar seus pacotes Web como parte de uma implantação maior de etapa única ou automatizada. 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 compilação.
Considerações sobre endpoint
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 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 Serviço de Gerenciamento da Web do IIS (WMSvc) como seu destino. Por padrão, isso assume o formato:
https://[server name]:8172/MSDeploy.axd
Você pode direcionar qualquer um desses endpoints 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 inclua 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 Agente Remoto de Implantação da Web e o Manipulador de Implantação da Web, consulte Escolhendo a abordagem correta para a implantação da Web. Para obter orientação 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 sobre 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 valores possíveis: Portador, NTLM ou Básico. Se você especificar Portador, precisará fornecer o token como a senha e qualquer valor para o nome de usuário. 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 de autenticação básicas.
- Se você estiver implantando no Manipulador de Implantação da Web, poderá usar um token de acesso (token de portador), NTLM ou autenticação básica. A configuração padrão é a autenticação básica. A autenticação básica depende da transmissão de nomes de usuário e senhas em texto sem formatação, suas credenciais são protegidas, pois o Manipulador de Implantação da Web sempre usa criptografia SSL. O método mais seguro é usar um token de acesso, o que evita o envio de uma senha real.
- Se o pacote 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 credenciais do SQL Server em sua cadeia de conexão de implantação ou fornecer credenciais de autenticação básicas para a Implantação da Web. Esse problema é descrito com mais detalhes 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 compilação automatizado ou de etapa única maior.
Leitura Adicional
Para obter diretrizes sobre como criar e parametrizar um pacote de implantação da Web, consulte Criando 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 Team Foundation Server (TFS), 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.