Integração Contínua com VSTS, GitHub e Azure

Fala, pessoal! tudo certo?

Nos últimos anos tem muito se falado sobre DevOps e métodos ágeis de desenvolvimento. Isso se deve ao fato da atual dinâmica em exigir entregas rápidas, otimizando e aperfeiçoando produtos de modo mais eficaz.

O modelo de DevOps permite que equipes de desenvolvedores atinjam resultados mais rápidos, garantindo a entrega contínua, confiabilidade, colaboração e segurança.

E quando falamos de integração contínua (CI), em muitos casos acaba se tornando o grande divisor de águas, pois pode alterar radicalmente a forma como as equipes pensam sobre todo o processo de desenvolvimento.

Quando uma alteração no código é identificada, o servidor automaticamente compila, testa ou até mesmo publica a aplicação. Se algo der errado, a ferramenta rapidamente notifica os desenvolvedores para que possam corrigir o problema o mais rápido possível.

Neste exemplo, iremos trabalhar com o Visual Studio Team Services, também conhecido como VSTS integrado com um repositório do GitHub e publicando nossa aplicação no Microsoft Azure.

Antes de tudo, uma breve introdução sobre o VSTS:

A Microsoft criou um novo nome para a sua plataforma de DevOps, passando a se chamar Visual Studio Team Services ou VSTS. O VSTS é uma plataforma completa, baseada em cloud para gestão de código fonte, planejamento, gestão da qualidade, controle de versões, automação de builds e uma infinidade de outros recursos.

Visual Studio Team Services (Team Services) is a set of cloud-based collaboration tools that help you plan, develop, and manage software projects of any size, in any software programming language. Based on the capabilities of Team Foundation Server, with additional cloud services, Team Services helps you manage your source code, work items, builds, tests, and more.

Para o artigo não ficar muito extenso, pularei algumas etapas consideradas triviais, considerando que você já possua uma conta ativa no github, Visual Studio Team Services e Microsoft Azure.

Let’s go!

Vamos começar criando um novo projeto ASP.NET Core com o template Web Application. Caso você não tenha uma conta no github, clique nesse link e crie seu usuário, pois iremos precisar de um repositório para testar nossos builds. Não esqueça de adicionar o projeto a um controle de versão, clicando em File => “Add to Source Control”.

Publique o projeto na sua conta do github da forma que desejar, seja via terminal ou pelo plugin do Visual Studio.

Crie também um novo recurso no Azure, do tipo “Aplicativo Web” e configure com o nome, grupo de recursos e plano de serviços que desejar. O importante é ter um servidor web para que nossa aplicação seja executada.

O próximo passo é configurar o VSTS, apontando para o repositório do github e configura-lo para que a cada mudança na branch master, seja automaticamente compilado e publicado no Azure.

Na página inicial do VSTS, crie um novo projeto através do botão “New Project”. Defina um nome, descrição (opcional) e selecione o “Git” como controle de versão.

Antes de criar nosso template de build, vamos aproveitar para definir nossos serviços de integração. Selecione a opção “Services” e clique em “New Service Endpoint” no canto esquerdo da tela.

Selecione a opção “Github” e clique em “Authorize” na nova tela que será aberta. Certifique-se que você esteja logado na sua conta do github e que seu bloqueador de popups esteja desabilitado para este site. Após autorizado, clique em “Ok”.

Repita o mesmo procedimento selecionando a opção “Azure Classic” e preenchendo os campos: Connection name, subscription Id, Subscription Name, Username e Password. Mas calma, você poderá baixar um arquivo com todos esses dados clicando no link “publish settings file”.

Com todos os serviços devidamente configurados, selecione a opção “Build & Release” no menu superior e clique em “New definition”. A próxima etapa é escolher o template que ficará responsável por fazer as etapas do build da nossa aplicação. Escolha o template ASP.NET Core clique em “Apply”.

Nas configurações de Build, será necessário preencher os campos “Name”, bem como selecionar o agente enfileirador, que nesse caso, utilizaremos a opção “Hosted VS2017”.

Em “Get sources”, selecione o ícone do GitHub não esquecendo de preencher o nome do repositório que acabamos de criar. No meu caso, “ExemploVSTS_Github” na branch master.

Antes de partimos para as configurações de deploy, salve as definições clicando no botão “Save & Queue” => “Save”.

#UPDATE

Após a publicação desse artigo, recebi um feedback muito interessante do MVP Julio Arruda questionando o motivo do deploy estar na Build. Devo concordar que a maneira que estava sendo feita não era o cenário mais correto, pois o deploy/publish não seria responsabilidade do Build, mas sim da etapa de Release.

Estávamos criando uma nova Task do tipo “Azure App Service Deploy”, conforme imagem abaixo:

Seguindo as boas práticas, vamos criar uma nova definição de Release que ficará encarregada de fazer a publicação dos arquivos caso o processo de Build seja concluído com sucesso.

No meu superior, clique na opção “Build & Releases” => “Release” => “New Definition”

Selecione o template “Azure App Service Deployment” e clique em “Next”.

Nessa próxima etapa será necessário escolher qual o projeto que iremos criar o processo de Release, bem como escolher a opção de “Continuous deployment”, que ficará responsável por fazer o deploy após o build ser concluído.

Após clicar em create, devemos preencher as informações referentes a nossa conta do Azure. Após selecionar a inscrição, será necessário autorizar o VSTS autenticar e publicar nossos arquivos no Azure. Para isso, utilize a opção “Authorize” informando suas credenciais.

Após autorizado, note que nossos recursos já irão aparecer na lista “App service name”, junto com as configurações adicionais de deploy.

Marque a opção: “Take App Offline” e salve as definições. Com isso, já podemos fazer um teste enfileirando nosso primeiro agente de build.

Clicando no botão “Queue new Build”, podemos acompanhar todo o processo de build através dos logs disponibilizados pelo VSTS. Bacana, não?

Build concluído com sucesso!

Com nossa aplicação compilada e publicada, já podemos conferir o resultado numa nova abado navegador. E voilà:

Agora vamos abrir o projeto, alterar alguma coisa e fazer o commit/push para o repositório do github. Para fins de testes, alterei somente o título na view _layout:

Note que dentro de alguns minutos a aplicação já estará atualizada:

Conclusão

O objetivo deste artigo foi fazer uma breve introdução utilizando conceitos de integração contínua com o VSTS, publicando no Azure a partir de um repositório no Github.

É claro, existe uma infinidade de recursos e funcionalidades que não foram exploradas neste artigo. Talvez eu tenha me esquecido de algum detalhe ou até mesmo possa existir outras formas (até melhores) de fazer o mesmo processo. Caso surgir alguma duvida, deixe seu comentário que tentarei ajuda-lo! :)

Espero que tenham gostado!

Referências: