[AZURE] - Publicando web sites - the manual and the (semi)automated way
![[AZURE] - Publicando web sites - the manual and the (semi)automated way](/content/images/size/w2000/2016/10/windows-azure-cloud-1.png)
Olá pessoALL,
Quem trabalha com .net usando o visual studio sabe que o VS e totalmente integrado com Azure o que eu considero uma grande mão na roda no nosso dia a dia.
Com a migração para outras tecnologias como node.js ou até quem tem usado o VSCode no dia a dia por ser mais leve perdemos um pouco dessas integrações, mas existem maneiras simples de fazer publicações usando a própria API do websites.
SCM, Kudu e os segredos escondidos
Todo website criado no Azure possui uma dashboard de gerenciamento, o link para acessar essa dashboard é o seguinte:
Por baixo dos panos todo website usa o kudu services que tambem pode ser utilisado on premises.
The Manual way
O jeito mais fácil de publicar um site (fora da integração com controle de versao :D) eh gerando um arquivo zip da publicação e fazendo o upload através da interface do kudu.
Para nossos testes vou utilizar um projetinho simples que tenho feito com asp.net core, o codigo eh super simples e contem uma unica api para cadastro de pessoas armazenado em memoria.
O repositorio: https://github.com/rsantosdev/aspnetcore-api
O site: https://aspcore-publish-sample.azurewebsites.net/
Para começar clone o repositório para o seu diretório local
git clone https://github.com/rsantosdev/aspnetcore-api
Após o clone entre no diretório do website
cd .\SampleApi\src\SampleApi.WebApp\
Para gerar os arquivos a serem publicados, tudo o que temos que fazer e rodar o comando:
dotnet publish
Se você não tem o .net
core instalado na sua máquina, siga as instruções aqui:
https://www.microsoft.com/net/core#windows
O comando publish
irá gerar uma nova pasta em bin\Debug\netcoreapp1.0\publish
, essa pasta contém todos os arquivos necessarios para rodar a aplicação no Azure.
Para fazer um publish manual:
- Crie um arquivo
.zip
da pasta publish - Crie um novo site no portal do azure
- Navegue ate o
scm
do site usando o padraohttps://seusite.scm.azurewebsites.net
- No menu selecione Debug Console > CMD
- Na estrutura de diretórios navegue ate
site > wwwroot
- Faça o upload do arquivo
.zip
usando drag and drop
O serviço irá expandir o arquivo .zip
automaticamente, nessa mesma tela temos acesso ao cmd
que é útil para rodar comandos como npm install
no caso de aplicações em node.js
The (semi)automated way
Todos os serviços disponíveis no Azure tanto no portal como no scm
possuem API REST para gerenciamento, então podemos automatizar nosso processo de deploy de uma forma super simples através de um script. Nesse tutorial irei fazer com bash
, mas pode ser utilizado qualquer outra linguagem
Antes de irmos para o script, precisamos definir o nome de usuário e senha para acesso as api's de publicação dos sites, tanto para web deploy quando para ftp.
- Navegue para o portal do azure https://portal.azure.com
- Em App Services, selecione o App Service desejado
- Na sessão App Deployment, selecione Deployment credentials
- Preencha o nome de usuário e senha desejados
Na pasta da nossa WebApp crie um arquivo chamado azure-deploy.sh
, o script é super simples e automatiza os passos que fizemos manualmente
#!/bin/sh
# exit on sub-module failure
set -e
# --------
echo "Deploy Started..."
export AZURE_PUBLISH_URL=${AZURE_PUBLISH_URL}
export AZURE_PUBLISH_USERNAME=${AZURE_PUBLISH_USERNAME}
export AZURE_PUBLISH_PASSWORD=${AZURE_PUBLISH_PASSWORD}
# Builds the app
echo " Publishing"
dotnet publish
echo " Done Publishing"
# Zip the content
echo " Zipping"
pushd ./bin/Debug/netcoreapp1.0/publish
zip -r ../publish.zip ./*
popd
echo " Done Zipping"
# upload and expand the zip file, the If-Match header is to force file update
echo " Uploading zip file"
curl -H "If-Match: *" --user $AZURE_PUBLISH_USERNAME:$AZURE_PUBLISH_PASSWORD $AZURE_PUBLISH_URL/zip/site/wwwroot --upload-file ./bin/Debug/netcoreapp1.0/publish.zip
echo " Done Uploading zip file"
echo "Deploy Finished!"
# --------
Nosso script possui 3 variáveis de ambiente AZURE_PUBLISH_URL
, AZURE_PUBLISH_USERNAME
e AZURE_PUBLISH_PASSWORD
. Nós podemos defini-las direto no windows ou na sessão bash, para executar o script abra o bash terminal e execute o seguinte comando (dentro do diretório da nossa WebApp):
AZURE_PUBLISH_URL=url AZURE_PUBLISH_PASSWORD=senha AZURE_PUBLISH_USERNAME=username sh azure-publish.sh
O formato da url de publicação segue o seguinte padrão:
https://seusite.scm.azurewebsites.net/api
Com o site em uso, pode acontecer que durante o novo deploy você receba uma exception
relacionado a arquivos em uso. Existe uma maneira simples de contornar esse problema.
Navegue até o portal, no seu site, selecione Application Settings
e defina um App Setting chamado COR_ENABLE_PROFILING
com valor 0
.
Executando comandos remotos
Em aplicações node.js
por exemplo e muito comum após o upload do zip precisamos rodar alguns comandos básicos como por exemplo o npm install
para atualizar as nossas dependências ou algum script personalizado. No exemplo a seguir executaremos o comando npm install
no nosso site
curl -H "Content-Type: application/json" --user $AZURE_PUBLISH_USERNAME:$AZURE_PUBLISH_PASSWORD -X POST -d '{"command":"npm install","dir":"site\\wwwroot"}' $AZURE_PUBLISH_URL/command
Por hoje e so pessoal, qualquer duvida e so deixar um comentario ou abrir uma issue la no repositorio: https://github.com/rsantosdev/aspnetcore-api