Essa semana eu publiquei na web o Recast, uma aplicação para criar podcasts. Queria fazer ela rápido, sem custo, sem dor de cabeça. Podia fazer com Ruby e Heroku, mas eu já fiz isso antes. Então experimentei fazer com ASP.NET MVC e Azure. E o Azure é grande pra caramba, e o Azure Compute (big brother Azure), que foi a primeira tecnologia que surgiu com o Azure, não é a melhor para publicar. O Web Sites é mais rápido e já traz integração pronta com o Git.
Se você quiser ver eu publicando nodejs com git direto, sem github, veja esse vídeo que fiz no final do ano passado na Lambda3TV: Publicando uma app Nodejs no Azure em menos de 5 minutos
Criando o site no Azure
Para criar um website no Azure é super simples:
O site sempre é criado em uma instância gratuita. Você tem direito a 10 instâncias grátis por região, e há cinco regiões, ou seja, você tem direito a 50 sites gratuitos. Pra entender quanto isso custa veja aqui.
Selecione o site:
Ele vai abrir. Essa é a dashboard:
Ela mostra várias estatísticas de uso interessante e permite administrar a app.
Habilitando git no Azure
Pra habilitar o git você vai em “Set up Git Publishing”, no canto inferior direito. Ele vai demorar uns 3 segundos…
… e vai criar o repositórios de git pra você:
Criando o repositório local
Como vocês podem ver, é possível publicar via git diretamente, já que ele te entrega a url do repositório git do Azure. Foi dessa forma que fiz no vídeo de node que mencionei acima. Basicamente nesse cenário você pega um repositório git que já tem e faz:
git remote add azure https://[email protected]/bloglambda3.git git push azure master
Mas nesse post vou linkar com o Github. E é bem simples. Criei um repositório git simples e coloquei o projeto lá:
Peguei um projeto simples de ASP.NET MVC 4, sem nada. coloquei ele no repositorio:
E commit!
Coloquei um home controller e uma view só pra ter o que mostrar.
Criando o repositório no Github e configurando local
Fui no github criei um projeto:
Coloquei o repositório remoto do github nos meus remotes e pushei o commit pra lá (bonito esse verbo, não?):
Configurando o Azure para publicar a partir do Github
Agora é só ir no manager do azure e adicionar ele. Clique em authorize windows azure debaixo de Deploy from github:
O Azure vai te mostrar todos os projetos seus e os que você pode adminstrar. Escolha o projeto correto dê um ok:
Como já tinha coisa no repositório, ele já vai publicar. E vai falhar:
O problema é o nuget. Você precisa habilitar a restauração de pacotes. Faça isso no Visual Studio:
E faça um commit e push das suas alterações. Você vai precisar incluir o diretório .nuget manualmente (veja o parâmetro –force) porque ele começa com ponto (.):
O push para o github vai iniciar um novo deploy. Em uns 2 ou 3 segundos após o push terminar você já verá o azure iniciando deploy.
E em mais uns 10 segundos dessa vez ele vai passar:
Você pode ver o log do deploy:
E com muitos detalhes se quiser, clicando em View Log:
Clicando no botão Browse, que fica centralizado bem no meio da tela, abaixo, você é levado até sua página no domínio azurewebsites.net. A minha ficou em bloglambda3.azurewebsites.net:
Pra atualizar é muito rápido, você pode ir no projeto, alterar, commit e push:
E você verá um novo deploy, atualizado, em alguns segundos:
Note que aparece a mensagem do último commit publicado.
Publicando só quando você quer
Talvez você não queira que todo push gere uma publicação, e queira controlar quando ela acontece. Nesse caso, crie um branch. Aqui chamei o meu de release e mandei ele também pro github:
Vá no azure, e troque o nome do branch nas configurações (aba configure):
Agora, quando faço atualizações no branch master, elas não são publicadas. Como publicar? Volte para o branch release e faça um merge e um push:
Um pouco de diversão: publicando sem o repositório local
Descobriu um bug, está fora de casa, sem Visual Studio, sem o seu código, tem que arrumar agora, via web? Vá ao Github, e edite o arquivo (atente para fazer a alteração no branch de release):
E vai ser publicado!
Não faça disso prática comum. Edições não devem acontecer no branch de release. Depois volte no seu repositório local e faça um pull no branch de release, e merge para o branch master.
E é isso. Agora, sempre que o branch for atualizado a aplicação vai ser publicada! Divirtam-se!
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.