Olá pessoal!
Vamos ao objetivo 5.3, Configure a web application for deployment. Esse objetivo cobre como trocar de release para debug, transformar web.config com XSLT, usar SetParameters e configurar o Windows Azure.
Mudando De Release Para Debug
Ao fazer o build de um projeto, você usa uma build configuration. Duas configurações existem por padrão: release e debug.
Em release, o código é otimizado para rodar o mais rápido possível, o que você com certeza deseja no ambiente de produção.
O modo debug é o ideal para o ambiente de desenvolvimento, pois instruções extra são adicionadas no código compilado, permitindo que ela seja debugado.
Além da build configuration, há uma configuração no web.config que diz respeito a compilação. Mudando o valor do atributo debug para false, você desliga o modo de debug:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
</system.web>
</configuration>
No Visual Studio, você tem a opção de escolher quais debuggers utilizar no modo debug:
Transformando O Web.Config Com XSLT
No seu arquivo web.config, você guarda vários tipos de configurações como connection strings, app settings customizadas, etc. Esses valores dependem do ambiente que a aplicação está rodando. Você não pode fazer o deploy de uma aplicação com a connection string do seu banco local, por exemplo. Fazer as alterações manualmente, além de levar tempo, é suscetível a erros.
Aí entra o web.config transformation syntax. Com ele você define um XML que descreve as mudanças a serem feitas no web.config ao mudar de debug para release.
Ao criar uma aplicação ASP.NET MVC, os arquivos de transformação são criados automaticamente:
As transformações trabalham com a sintaxe do XML-Document-Transform. Segue um exemplo de arquivo de transformação que muda a connection string e configura o customErrors:
Você começa especificando o namespace para o arquivo de transformação. Depois, com os atributos xdt:Transform e xdt:Locator, você configura como os elementos devem ser encontrados e o que acontece quando isso acontecer. Nesse exemplo, apenas mudamos a connection string, mas o elemento customErrors é completamente substituído.
Para o atributo Locator, você pode usar os valores Match, XPath e Condition. A explicação detalhada do funcionamento deles pode ser vista aqui. Para o atributo Transform, os possíveis valores são: Insert, InsertBefore, InsertAfter, Remove, RemoveAll, RemoveAttributes e SetAttributes.
Usando SetParameters Para Preparar Um IIS App Pool
A web.config transformation é feita em tempo de compilação. Isso é bom quando você sabe em quais ambientes a aplicação será publicada.
Com Web Deploy, porém, você tem outra opção: parametrização. Com ela você pode parametrizar valores em tempo de instalação, facilitando a distribuição de um pacote para vários lugares.
Um pacote Web Deploy cria alguns arquivos para você, como o {nome do projeto}.zip, que é o pacote Web Deploy, e o {nome do projeto}.deploy.cmd, que permite que você faça o deploy da linha de comando. Há também o arquivo {nome do projeto}.SetParameters.xml, que tem uma série de valores que o MSDeploy.exe usa para fazer o deploy da aplicação. Esse arquivo é gerado dinamicamente, obtendo todas as configurações do seu projeto, como as connection strings do web.config.
A parametrização é feita quando você adiciona um arquivo Parameters.xml para o pacote Web Deploy. Nesse arquivo, você indica o arquivo que quer modificar, quais variáveis serão alteradas e um valor padrão para elas. Na instalação do pacote via IIS Manager, esses valores serão pedidos para o usuário digitar.
Segue um exemplo de uma seção de um web.config abaixo de system.ServiceModel:
O seguinte Parameters.xml pode ser usado:
Segue a explicação de alguns atributos importantes:
- name: o nome que é mostrado no IIS Manager;
- description: a descrição que é mostrada no IIS Manager;
- defaultValue: o valor que é pré-carregado no input;
- scope: uma expressão regular que mostra os arquivos que o parâmetro se aplica;
- kind: especifica o tipo do recurso na qual o parâmetro será aplicado (XmlFile ou TextFile);
- match: no caso de XmlFile, um XPath que seleciona o elemento que será alterado.
Caso você esteja fazendo o deploy pela linha de comando, você pode usar as opções declareParamFile and setParamFile para especificar os arquivos Parameters.xml e SetParameters.xml:
msdeploy.exe -verb:sync -source:apphostconfig="default web site/application"
-dest:archivedir="C:\packages\application" -declareParamFile="C:\source\application\
deployment\declareParamsFile.xml"
msdeploy.exe -verb:sync -dest:apphostconfig="default web site/application"
-source:archivedir="C:\packages\application" -setParamFile="C:\source\application\
deployment\setParamsFile.xml"
Por último, caso você não queira alterar o arquivo SetParameters.xml na mão em um processo de build por exemplo, existe uma task do MSBuild chamada XmlPoke que pode automatizar isso.
Para o exame, lembre-se do seguinte: web.config transformation é feita em tempo de compilação, enquanto parametrização em tempo de instalação.
Configurando O Windows Azure
Um projeto Cloud tem dois arquivos de configuração: ServiceConfiguration.Cloud.cscfg e ServiceConfiguration.Local.cscfg. O arquivo Local tem valores para o Windows Azure Emulator, enquando o Cloud tem os valores que serão usados no deploy para o Azure.
Nesses arquivos você pode configurar o número de instâncias para cada role, quaisquer app settings customizadas, thumbprints para certificados, VPNs no caso de máquinas virtuais (VM), etc.
Ao criar um projeto Cloud com uma web role e uma worker role, o seguinte arquivo de configuração é criado:
O elemento Role, além de especificar o nome da sua role, pode também ter o atributo vmName para ser usado como o nome o DNS para sua VM.
Dentro do elemento Role há o elemento Instances que indica o número de instâncias da role e o elemento ConfigurationSettings, que é uma coleção chave valor.
Outros elementos que podem ser adicionados são o Certificates e o OsImage:
Depois do elemento Roles, você pode especificar o elemento NetworkConfiguration. Essa seção descreve os valores de DNS e VPN. Um exemplo de configuração:
Chegamos ao final desse objetivo 🙂 Faltam apenas 3!
Obrigado pela leitura e fique de olho no próximo post, que será sobre o objetivo Manage packages by using NuGet.
Até mais!