{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
08/02/2011
Fala galera. Quando procuramos maior produtividade e redução de problemas em nosso ambiente e processo de trabalho vamos nos deparar inevitavelmente com automação de algumas coisas.O processo de deploy do Windows Azure pode ser feito de três maneiras, a saber:- Via Windows Azure portal
Como ainda não estamos automatizando nosso build vamos compilar uma solution Azure no Visual Studio que será utilizada para o deploy.Para todos os scripts que executaremos precisaremos de algumas informações repetidamente. Para isso vamos criar variáveis no Powershell e armazenar alguns valores:
$nome_servico = "meu_servico"$subs_id = "a123bc12a-a123-1234-1234-a12b123c1234"$cert = Get-Item cert:\CurrentUser\My\<thumbprint />(os dados acima são fictícios hein! :P)Após definirmos estes dados vamos então começar a criar o deploy. Para isso vou definir mais três variáveis uma para o label da nossa publicação, uma para o caminho do pacote e uma para o caminho do arquivo de configuração.
$label = "deploy via powershell"$pacote = "C:\Publish\MVCSummitCloudApp.cspkg"$config = "C:\Publish\ServiceConfiguration.cscfg"No meu caso eu gerei estes arquivo no C: para facilitar o exemplo no blog.Vamos agora criar o script de deploy de fato:
New-Deployment -ServiceName $nome_servico -SubscriptionId $subs_id -Certificate $cert -Slot staging -Package $pacote -Configuration $config -Label $label | Get-OperationStatus -WaitToCompleteApós enviarmos o deploy precisamos colocá-lo para rodar, e para isso utilizaremos o script abaixo:
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate | Get-Deployment -Slot staging |Set-DeploymentStatus running |Get-OperationStatus -WaitToCompleteDepois que colocamos o serviço para rodar podemos testá-lo. Após os testes podemos então mover o deploy de staging para produção, e para isso vamos nos utilizar de mais um script:
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |Get-Deployment -Slot staging |Move-Deployment |Get-OperationStatus -WaitToCompleteQuando promovemos um deploy para produção, acabamos ficando com uma instância de staging ativa. Se mantivermos a mesma seremos cobrados por essa alocação. Para que não sejamos cobrados precisamos parar o serviço em staging e então deletá-lo. Para isso utilizaremos os dois scripts abaixo em conjunto:
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Set-DeploymentStatus suspended |
Get-OperationStatus -WaitToComplete
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Remove-Deployment |
Get-OperationStatus -WaitToCompletePronto! Isso é tudo que você precisa fazer para “automatizar” seu deploy com o Windows Azure.Eu criei um script powershell que já faz tudo isso e é possível chamá-lo com passagem de parâmetros, isso deve facilitar um pouco as coisas.O script completo está no gist(github) e aqui:
Param($S, $I, $Cert, $L, $P, $Cfg)
$start = Get-Date
$service_name = $S
$subscription_id = $I
$certificate = $Cert
$label = $L
$package = $P
$config_file = $Cfg
if (-not(Get-PSSnapin AzureManagementToolsSnapIn)) {
Add-PSSnapin AzureManagementToolsSnapIn
}
New-Deployment -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate -Slot staging -Package $package -Configuration $config_file -Label $label |
Get-OperationStatus -WaitToComplete
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Set-DeploymentStatus running |
Get-OperationStatus -WaitToComplete
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Move-Deployment |
Get-OperationStatus -WaitToComplete
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Set-DeploymentStatus suspended |
Get-OperationStatus -WaitToComplete
Get-HostedService -ServiceName $service_name -SubscriptionId $subscription_id -Certificate $certificate |
Get-Deployment -Slot staging |
Remove-Deployment |
Get-OperationStatus -WaitToComplete
$end = Get-Date
"Deploy finished in " + ($end - $start).TotalSeconds + " secs."O uso deste script é algo mais ou menos assim:
.'.\push.ps1' -S "service_name" -I "your_subscription_id" -Cert (Get-Item cert:\CurrentUser\My\<thumb_print>) -L "label_name" -P ".cspkg local" -Cfg ".cscfg local"</thumb_print>A idéia é transformar isso em cmdlets do powershell para facilitar um pouco as coisas e depois disso criar build tasks para o MS-Build.
Abraços, Vinicius Quaiato.