in Desenvolvimento

Integração Contínua com Team Foundation Server (deploy de um WebSite ASP.NET MVC + IIS)

Recentemente precisei automatizar o deploy de uma aplicação web para dois ambientes diferentes, basicamente qualquer commit para a branch Master, deveria fazer um publish para o ambiente de stage, e qualquer commit para branch Integration, deveria fazer um publish para o ambiente de homologação.

O Team Foundation Server oferece uma infraestrutura de automatização de builds, que entre as principais funções estão a execução de builds, scripts e testes de maneira agendada, manual e acionada através de algum trigger (como por exemplo um checkin ou commit). Essa solução de ALM oferece todo o conjunto de rastreamento do processo.

A ideia deste post é mostrar como criar uma Build Definition, que faça deploy de um WebSite a cada checkin realizado.

Como pré-requisito, precisaremos de um ambiente usando Team Foundation Server 2013, e um servidor (podendo até ser a mesma máquina) configurado como Build Service (http://msdn.microsoft.com/en-us/library/ee259687.aspx). É extremamente importante instalar todos o recursos necessário para compilar a aplicação, neste build server. No caso, instalei as versões necessárias do .NET, MVC e o Web Deploy.

Além disso, precisaremos de um ambiente web configurado para receber o publish utilizando Web Deploy (Instalando e configurando). É neste ambiente que faremos deploy a cada checkin no nosso projeto. Para este exemplo vou utilizar um WebSite no Azure (fazendo download do publish profile).

Criando o Projeto

Para começar, vou criar um projetos ASP.NET MVC5.

image

Com o projeto criado, vou criar um website no Windows Azure, fazer download e importar o Publish Profile no projeto (eu poderia criar o publish profile para qualquer IIS que estiver configurado com o WebDeploy).

image

No painel do Web Site, vou selecionar a opção Baixar o perfil de publicação.

image

Após baixar o perfil, precisamos clicar com o botão direito em cima do projeto no Visual Studio e selecionar a opção Publish.

image

Na janela que aparecerá, podemos utilizar a opção import, para adicionar o publish profile que acabamos de baixar.

image

Pronto, agora nosso projeto está com as configurações necessárias para fazer o publish para o ambiente que queremos.

Adicionando o Projeto ao TFS

Agora, vou adicionar esse projeto web ao Team Foundation Server, no meu caso, vou utilizar o TFVC, mas poderia optar por utilizar o Git sem problemas.

image

Configurando o Build Definition

Depois de adicionar o projeto ao controle de versão, precisamos ir na Home do Team Explorer e selecionar a opção Builds

image

Na  aba de Builds, vou adicionar um novo Build Definition

image

Com o Build Definition criado, precisamos configurar as propriedades, o primeiro passo é definir o nome do build, no meu caso chamei de Deploy WebSite Azure.

image

O próximo passo é configurar a aba Trigger, onde encontramos as opções que acionarão o build, no meu casado eu coloquei Continuous Integration – Build each check-in, mas poderia agendar horários ou deixar ele de forma manual.

image

Em Source Setings eu não farei nenhuma alteração.

image

Na opção Build Defaults que selecionarei o Servidor de Build que está configurado, e optarei por não ter um output em uma pasta dos conteúdos gerados a cada build.

image

Na aba de Process, é onde selecionaremos o template que vamos utilizar, para o nosso caso, vou utilizar o TFVC Template, que basicamente criará um workspace, baixará o projeto, compilará o projeto, executará os testes e por fim, realizará o deploy para o WebSite no Azure.image

image

No exemplo acima, manterei as configurações padrões, e somente no item 5. Advanced (do Build) precisarei incluir os parâmetros para ele executar o deploy, utilizando o publish profile.

Utilizarei os seguintes parâmetros no MSBuild:

/p:DeployOnBuild=true  /p:PublishProfile="demodeploy01 – Web Deploy" /p:Configuration=Release /P:Username=$demodeploy01;Password=wallwDMcdcSrPT5moZ2E0DGg0FRDfyfCh6qjYgdmEgu5A804WG0MQB3yjbSK

Caso você precise ignorar um certificado auto assinado do seu IIS, precisará utilizar em conjunto o seguinte parâmetro: /p:AllowUntrustedCertificate=True

Após adicionar os argumentos do MSBuild, teremos o seguinte:

image

Executando um Build manualmente

Após a configuração feita, podemos clicar em cima da Build Definition e enfileirar um novo build:

image

O qual, se tudo der certo, terá um resultado positivo, com todo o log do que foi feito:

image

Executando um Checkin

Como a ideia é realmente automatizar, para testar vou fazer uma alteração em uma View, e fazer um checkin.

image

image

Assim que eu realizar o checkin, podemos ver na tab de Builds, que existe um novo build enfileirado.

image

Quando ele estiver terminado, podemos acessar o site e ver nossa alteração no ar \o/

image

image

DICAS


Build Incremental

dependendo do tamanho da sua aplicação, e de alguns cenários, o build pode ser configurado para funcionar de forma incremental e levar somente os arquivos alterados, como DLL’s, arquivos novos ou alterados. Para isso, podemos configurar o processo para não criar uma Workspace limpa a cada build, e como parâmetro do MSBuild, podemos passar o parâmetro /p:IncrementalBuild=true

image

Certificado

Caso você precise ignorar um certificado auto assinado do seu IIS, precisará utilizar em conjunto o seguinte parâmetro: /p:AllowUntrustedCertificate=True

Tasks / Bugs

Existe a opção de criar um PBI para cada erro de build que tiver, essa opção é um parâmetro do Build Process Templates, chamado Create Work item on Failure.

image

   Bom, espero que este post seja útil, estou a disposição para dúvidas, criticas e sugestões. 

Abs

Rodolfo

  • Anonymous

    Post sensacional, Rodolfino! Congrats!

  • http://fabianonalin.net.br/ Fabiano Nalin

    Muito bom, parabéns pelo post.
    Abs

  • Bruno Almeida

    Você ignorou os warnings do Build. Para reslvê-los, preciso instalar o Windows SDK no servidor de Build?