in dev

Script para deploy: WebSite e NBL com PowerShell

Recentemente tive que automatizar um processo de sincronizar arquivos entre alguns servidores, e gerenciar estes mesmos servidores no NBL (network load balance) durante esse processo de sinc, parando o servidor e colocando ele de volta no NBL após o sinc e algumas urls tenham sido acessadas para testar.

Pensando nisso, fiz um script rápido que usa o modulo do windows para NBL, que basicamente automatiza esse processo.

Para o funcionamento, criei uma variável com o endereço dos arquivos de origem, e uma lista com servidores para onde eu devo fazer o deploy. Cada um destes servidores tem o ip, qual é o endereço de destino dos arquivos e uma lista com urls que devem ser acessadas após o sinc de arquivos.

Com essas variáveis eu criei um laço que faz os seguintes passos:

  • Tira os servidores do NBL
  • Aguarda alguns segundos
  • Sincroniza os arquivos utilizando o Robocopy
  • Aguarda alguns segundos
  • Acessa as urls da lista
  • Aguarda alguns segundos
  • Volta o servidor para o NBL

O Script final ficou da seguinte maneira:

$SiteOrigem="C:\inetpub\wwwroot\xxxx"
$TimeOut=5

$Servers = New-Object System.Collections.ArrayList

$Servers.Add(@{Ip="xxx.xxx.xxx";Path="E:\xxxx";Urls=("/","/appx")})
$Servers.Add(@{Ip="xxx.xxx.xxx";Path="F:\xxxx";Urls=("/","/appx")})
$Servers.Add(@{Ip="xxx.xxx.xxx";Path="G:\xxxx";Urls=("/","/appx")})
$Servers.Add(@{Ip="xxx.xxx.xxx";Path="H:\xxxx";Urls=("/","/appx")})

foreach($Server in $Servers)
{
    Write-Host "-----Iniciando deploy------"
    Write-Host $Server.Ip

    Write-Host "-----Retirando do NBL------"
    Stop-NlbClusterNode -Hostname $Server.Ip

    Start-Sleep -Second $TimeOut
    
    Write-Host "-----Copiando Arquivos------"
    
    robocopy $SiteOrigem   $Server.Path /S /E
    
    Start-Sleep -Second $TimeOut
    foreach($Url in $Server.Urls){
    
        Write-Host "-----Acessando Url------"
        $s=$Server.Ip
        Write-Host http://$s$Url
        $request = [System.Net.WebRequest]::Create("http://$s$Url")
        $request.GetResponse()
    }

    Start-Sleep -Second $TimeOut

    Write-Host "-----Colocando no NBL------"
    Start-NlbClusterNode -Hostname $Server.Ip
    
    Write-Host $Server.Ip
    Write-Host "-----Fim deploy------"
}
<br>

Gist com a url, para futuras atualizações: https://gist.github.com/rodolfofadino/9808985

Espero que este post seja útil, estou a disposição para qualquer dúvida, critica ou sugestão.

abs

Rodolfo