Usando scripts do Windows PowerShell para publicar para ambientes de desenvolvimento e teste
Quando você cria um aplicativo Web no Visual Studio, pode gerar um script do Windows PowerShell que pode usar posteriormente para automatizar a publicação de seu site no Azure como um aplicativo Web no Serviço de Aplicativo do Azure ou em uma máquina virtual. Você pode editar e estender o script do Windows PowerShell no editor do Visual Studio para atender às suas necessidades ou integrar o script a scripts de compilação, teste e publicação existentes.
Usando esses scripts, você pode provisionar versões personalizadas (também conhecidas como ambientes de desenvolvimento e teste) do seu site para uso temporário. Por exemplo, você pode configurar uma versão específica do seu site em uma máquina virtual do Azure ou no slot de preparo em um site para executar um conjunto de testes, reproduzir um bug, testar uma correção de bug, avaliar uma alteração de proposta ou configurar um ambiente personalizado para uma demonstração ou apresentação. Depois de criar um script que publica seu projeto, você pode recriar ambientes idênticos ao executar novamente o script conforme necessário ou executar o script com seu próprio build do aplicativo Web para criar um ambiente personalizado de teste.
Pré-requisitos
- Visual Studio com a carga de trabalho do Azure instalada. Veja Downloads do Visual Studio.
- Azure PowerShell 0.7.4 ou posterior. Consulte Como instalar e configurar o PowerShell do Azure.
- Windows PowerShell 3.0 ou posterior.
- Uma conta do Azure. Se você não tiver uma conta Azure, ative seus benefícios do Azure para assinantes do Microsoft Visual Studio ou inscreva-se para uma avaliação gratuita.
Ferramentas adicionais
Estão disponíveis ferramentas e recursos adicionais para trabalhar com o PowerShell no Visual Studio para desenvolvimento do Azure. Consulte Ferramentas do PowerShell para Visual Studio.
Gerando scripts de publicação
Você pode gerar scripts de publicação para uma máquina virtual que hospeda seu site ao criar um novo projeto seguindo estas instruções. Você também pode gerar scripts de publicação para aplicativos Web no Serviço de Aplicativo do Azure.
Scripts gerados pelo Visual Studio
O Visual Studio gera uma pasta de nível de solução chamada PublishScripts que contém dois arquivos do Windows PowerShell, um script de publicação para sua máquina virtual ou site, e um módulo que contém funções que você pode usar nos scripts. O Visual Studio também gera um arquivo no formato JSON que especifica os detalhes do projeto que você está implantando.
Script de publicação do Windows PowerShell
O script de publicação contém etapas específicas de publicação para implantar em um site ou em uma máquina virtual. O Visual Studio fornece sintaxe colorida para o desenvolvimento do Windows PowerShell. Ajuda para as funções estão disponíveis e você pode editar livremente as funções no script para atender às necessidades de mudanças.
Módulo do Windows PowerShell
O módulo do Windows PowerShell que o Visual Studio gera contém funções que o script de publicação usa. Essas funções do Azure PowerShell e não podem ser modificadas. Consulte Como instalar e configurar o PowerShell do Azure.
Arquivo de configuração JSON
O arquivo JSON é criado na pasta Configurações e contém dados de configuração que especificam exatamente quais recursos implementar no Azure. O nome do arquivo que o Visual Studio gera é project-name-WAWS-dev.json se você tiver criado um site, ou o projeto name-VM-dev.json se você tiver criado uma máquina virtual. Aqui está um exemplo de um arquivo de configuração JSON é gerado quando você cria um site. A maior parte dos valores é autoexplicativa. O nome do site é gerado pelo Azure, portanto não pode coincidir com o nome do projeto.
{
"environmentSettings": {
"webSite": {
"name": "WebApplication26632",
"location": "West US"
},
"databases": [{
"connectionStringName": "DefaultConnection",
"databaseName": "WebApplication26632_db",
"serverName": "YourDatabaseServerName",
"user": "sqluser2",
"password": "",
"edition": "",
"size": "",
"collation": "",
"location": "West US"
}]
}
}
Quando você cria uma máquina virtual, o arquivo de configuração JSON é semelhante ao seguinte. Um serviço de nuvem é criado como um contêiner para a máquina virtual. A máquina virtual contém os pontos de extremidade comuns para acesso à Web via HTTP e HTTPS, bem como pontos de extremidade para a implantação da Web, o que lhe permite publicar o site de seu computador local, área de trabalho remota e Windows PowerShell.
{
"environmentSettings": {
"cloudService": {
"name": "myusernamevm1",
"affinityGroup": "",
"location": "West US",
"virtualNetwork": "",
"subnet": "",
"availabilitySet": "",
"virtualMachine": {
"name": "myusernamevm1",
"vhdImage": "a699494373c04fc0bc8f2bb1389d6106__Win2K8R2SP1-Datacenter-201403.01-en.us-127GB.vhd",
"size": "Small",
"user": "vmuser1",
"password": "",
"enableWebDeployExtension": true,
"endpoints": [{
"name": "Http",
"protocol": "TCP",
"publicPort": "80",
"privatePort": "80"
},
{
"name": "Https",
"protocol": "TCP",
"publicPort": "443",
"privatePort": "443"
},
{
"name": "WebDeploy",
"protocol": "TCP",
"publicPort": "8172",
"privatePort": "8172"
},
{
"name": "Remote Desktop",
"protocol": "TCP",
"publicPort": "3389",
"privatePort": "3389"
},
{
"name": "Powershell",
"protocol": "TCP",
"publicPort": "5986",
"privatePort": "5986"
}
]
}
},
"databases": [{
"connectionStringName": "",
"databaseName": "",
"serverName": "",
"user": "",
"password": ""
}],
"webDeployParameters": {
"iisWebApplicationName": "Default Web Site"
}
}
}
Você pode editar a configuração JSON para alterar o que acontece quando você executa scripts de publicação. As seções cloudService
e virtualMachine
são necessárias, mas você pode excluir a seção databases
se não precisar dela. As propriedades vazias no arquivo de configuração padrão que o Visual Studio gera são opcionais; as propriedades com valores no arquivo de configuração padrão são obrigatórias.
Se você tiver um site com vários ambientes de implantação (conhecidos como slots) em vez de um único site de produção no Azure, pode incluir o nome do slot no nome do site no arquivo de configuração JSON. Por exemplo, se você tiver um site que seja nomeado como mysite e um slot para ele nomeado test então o URI seria mysite-test.cloudapp.net
, mas o nome correto a ser usado no arquivo de configuração será mysite(test). Você só pode fazer isso se o site e os slots já existirem em sua assinatura. Se não existirem, crie o site executando o script sem especificar o slot e depois crie o slot no portal do Azuree execute o script com o nome do site modificado. Para obter mais informações sobre os slots de implantação para aplicativos Web, consulte Configurar ambientes de preparo para aplicativos Web no Serviço de Aplicativo do Azure.
Como gerar scripts de publicação
Se você nunca executou um script do Windows PowerShell antes, deve primeiro definir a política de execução para habilitar a execução dos scripts. A política é um recurso de segurança para impedir que usuários executem scripts do Windows PowerShell se estiverem vulneráveis a malware ou vírus que envolvem a execução de scripts.
Executar o script
Crie o pacote de implantação na Web para seu projeto. Um pacote de implantação na Web é um arquivo compactado (arquivo .zip) que contêm arquivos que você deseja copiar em seu site ou máquina virtual. Você pode criar pacotes de implantação na Web no Visual Studio para qualquer aplicativo Web.
Consulte Como criar um pacote de implantação na Web no Visual Studio. Você também pode automatizar a criação do pacote de Implantação da Web, conforme descrito em Personalizando e estendendo os scripts de publicação.
No Gerenciador de Soluções, abra o menu de contexto do script e, em seguida, escolha Abrir com o ISE do Windows PowerShell.
Se você estiver executando os scripts do Windows PowerShell neste computador pela primeira vez, abra uma janela de prompt de comando com privilégios de administrador e digite o seguinte comando:
Set-ExecutionPolicy RemoteSigned
Entre no Azure usando o comando a seguir.
Add-AzureAccount
Quando solicitado, forneça seu nome de usuário e senha.
Observe que quando você automatiza o script, esse método para fornecer credenciais do Azure não funciona. Em vez disso, você deve usar o arquivo
.publishsettings
para fornecer credenciais. Uma vez apenas, você usa o comando Get-AzurePublishSettingsFile para baixar o arquivo do Azure e depois usa Import-AzurePublishSettingsFile para importar o arquivo. Para saber mais, confira Como instalar e configurar o Azure PowerShell.(Opcional) Se você quiser criar recursos do Azure, como máquina virtual, banco de dados e site sem publicar o aplicativo Web, use o comando Publish-WebApplication.ps1 com o argumento -Configuration, definido para o arquivo de configuração JSON. Essa linha de comando usa o arquivo de configuração JSON para determinar quais recursos criar. Como ela usa configurações padrão para outros argumentos de linha de comando, ela cria os recursos, mas não publica seu aplicativo Web. A opção –Verbose fornece mais informações sobre o que está acontecendo.
Publish-WebApplication.ps1 -Verbose –Configuration C:\Path\WebProject-WAWS-dev.json
Use o comando Publish-WebApplication.ps1 conforme mostrado em um dos exemplos a seguir para invocar o script e publicar seu aplicativo Web. Se você precisar substituir as configurações padrão de qualquer um dos outros argumentos, como o nome da assinatura, nome do pacote de publicação, credenciais de máquina virtual ou credenciais do servidor de banco de dados, você pode especificar esses parâmetros. Use a opção – Verbose para obter mais informações sobre o andamento do processo de publicação.
Publish-WebApplication.ps1 –Configuration C:\Path\WebProject-WAWS-dev-json ` –SubscriptionName Contoso ` -WebDeployPackage C:\Documents\Azure\ADWebApp.zip ` -DatabaseServerPassword @{Name="dbServerName";Password="adminPassword"} ` -Verbose
Se você estiver criando uma máquina virtual, o comando é semelhante ao seguinte. Este exemplo também mostra como especificar credenciais para vários bancos de dados. Para as máquinas virtuais que esses scripts criam, o certificado SSL não é de uma autoridade raiz confiável. Portanto, você precisa usar a opção –AllowUntrusted .
Publish-WebApplication.ps1 ` -Configuration C:\Path\ADVM-VM-test.json ` -SubscriptionName Contoso ` -WebDeployPackage C:\Path\ADVM.zip ` -AllowUntrusted ` -VMPassword @{name = "vmUserName"; password = "YourPasswordHere"} ` -DatabaseServerPassword @{Name="server1";Password="adminPassword1"}, @{Name="server2";Password="adminPassword2"} ` -Verbose
O script pode criar bancos de dados, mas não cria servidores de banco de dados. Para criar um servidor de banco de dados, você pode usar a função New-AzureSqlDatabaseServer no módulo do Azure.
Personalizando e estendendo scripts de publicação
Você pode personalizar o script de publicação e o arquivo de configuração JSON. As funções no módulo do Windows PowerShell AzureWebAppPublishModule.psm1 não se destinam a serem modificadas. Se você quiser apenas especificar um banco de dados diferente ou alterar algumas das propriedades da máquina virtual, edite o arquivo de configuração JSON. Se quiser estender a funcionalidade do script para automatizar a criação e testar o projeto, você pode implementar stubs de função em Publish-WebApplication.ps1.
Para automatizar a criação de seu projeto, adicione o código que chama o MSBuild para New-WebDeployPackage
conforme mostrado neste exemplo de código. O caminho para o comando MSBuild é diferente dependendo da versão do Visual Studio que você instalou. Para obter o caminho correto, você pode usar a função Get-MSBuildCmd, conforme mostrado neste exemplo.
Para automatizar a criação de seu projeto
Adicione o parâmetro
$ProjectFile
à seção de parâmetros globais.[Parameter(Mandatory = $false)] [ValidateScript({Test-Path $_ -PathType Leaf})] [String] $ProjectFile,
Copie a função
Get-MSBuildCmd
em seu arquivo de script.function Get-MSBuildCmd { process { $StartInfo = New-Object System.Diagnostics.ProcessStartInfo; $StartInfo.Filename = ${Env:ProgramFiles(x86)} + "\\Microsoft Visual Studio\\Installer\\vswhere.exe" $StartInfo.Arguments = " -latest -requires Microsoft.Component.MSBuild -find MSBuild\\**\\Bin\\MSBuild.exe" $StartInfo.RedirectStandardOutput = $True $StartInfo.UseShellExecute = $False [System.Diagnostics.Process] $VSWhere = [Diagnostics.Process]::Start($StartInfo) $VSWhere.WaitForExit() return $VSWhere.StandardOutput.ReadToEnd(); } }
Substitua
New-WebDeployPackage
pelo seguinte código e substitua os espaços reservados na construção de linha$msbuildCmd
.function New-WebDeployPackage { #Write a function to build and package your web application
Para criar seu aplicativo Web, use o MSBuild.exe. Para obter ajuda, confira Referência de linha de comando do MSBuild.
Write-VerboseWithTime 'Build-WebDeployPackage: Start' $msbuildCmd = '"{0}" "{1}" /T:Rebuild;Package /p:OutputPath="{2}\MSBuildOutputPath" /flp:logfile=msbuild.log,v=d' -f (Get-MSBuildCmd), $ProjectFile, $scriptDirectory Write-VerboseWithTime ('Build-WebDeployPackage: ' + $msbuildCmd)
Iniciar a execução do comando de build
$job = Start-Process cmd.exe -ArgumentList('/C "' + $msbuildCmd + '"') -WindowStyle Normal -Wait -PassThru
if ($job.ExitCode -ne 0) {
throw('MSBuild exited with an error. ExitCode:' + $job.ExitCode)
}
#Obtain the project name
$projectName = (Get-Item $ProjectFile).BaseName
#Construct the path to web deploy zip package
$DeployPackageDir = '.\MSBuildOutputPath\_PublishedWebsites\{0}_Package\{0}.zip' -f $projectName
#Get the full path for the web deploy zip package. This is required for MSDeploy to work
$WebDeployPackage = Resolve-Path –LiteralPath $DeployPackageDir
Write-VerboseWithTime 'Build-WebDeployPackage: End'
return $WebDeployPackage
}
Chame a função
New-WebDeployPackage
antes dessa linha:$Config = Read-ConfigFile $Configuration
para aplicativos Web ou$Config = Read-ConfigFile $Configuration -HasWebDeployPackage:([Bool]$WebDeployPackage)
para máquinas virtuais.if($ProjectFile) { $WebDeployPackage = New-WebDeployPackage }
Invoque o script personalizado da linha de comando usando a passagem do argumento
$Project
como no seguinte exemplo:.\Publish-WebApplicationVM.ps1 -Configuration .\Configurations\WebApplication5-VM-dev.json ` -ProjectFile ..\WebApplication5\WebApplication5.csproj ` -VMPassword @{Name="VMUser";Password="Test.123"} ` -AllowUntrusted ` -Verbose
Para automatizar o teste do seu aplicativo, adicione código ao
Test-WebApplication
. Certifique-se de cancelar os comentários das linhas em Publish-WebApplication.ps1 no qual essas funções são chamadas. Se você não fornecer uma implementação, poderá compilar manualmente seu projeto com o Visual Studio e depois executar o script de publicação para publicar no Azure.
Resumo da função de publicação
Para obter ajuda para as funções que você pode usar no prompt de comando do Windows PowerShell, use o comando Get-Help function-name
. A Ajuda inclui exemplos e ajuda de parâmetro. O mesmo texto da Ajuda está também nos arquivos de origem de script AzureWebAppPublishModule.psm1 e Publish-WebApplication.ps1. O script e a ajuda estão localizados em seu idioma do Visual Studio.
AzureWebAppPublishModule
Nome da função | Descrição |
---|---|
Add-AzureSQLDatabase | Cria um novo banco de dados SQL do Azure. |
Add-AzureSQLDatabases | Cria os bancos de dados SQL do Azure com base nos valores no arquivo de configuração JSON que o Visual Studio gera. |
Add-AzureVM | Cria uma máquina virtual do Azure e retorna a URL da VM implantada. A função configura os pré-requisitos e, em seguida, chama a função New-AzureVM (módulo do Azure) para criar uma nova máquina virtual. |
Add-AzureVMEndpoints | Adiciona novos pontos de extremidade de entrada a uma máquina virtual e retorna a máquina virtual com o novo ponto de extremidade. |
Add-AzureVMStorage | Cria uma nova conta de Armazenamento do Azure na assinatura atual. O nome da conta começa com "desenvolvimento/teste", seguido por uma cadeia de caracteres alfanumérica exclusiva. A função retorna o nome da nova conta de armazenamento. Especifique um local ou um grupo de afinidades para a nova conta de armazenamento. |
Add-AzureWebsite | Cria um site com nome e local especificados. Essa função chama a função New-AzureWebsite no módulo do Azure. Se a assinatura ainda não incluir um site com o nome especificado, essa função criará o site e retornará um objeto de site. Caso contrário, ele retornará $null . |
Assinatura de backup | Salva a assinatura atual do Azure na variável $Script:originalSubscription no escopo do script. Essa função salva a assinatura do Azure atual (conforme obtidas pelo Get-AzureSubscription -Current ) e sua conta de armazenamento e a assinatura é alterada por esse script (armazenado na variável $UserSpecifiedSubscription ) e sua conta de armazenamento, no escopo de script. Ao salvar os valores, você pode usar uma função, como Restore-Subscription , para restaurar a assinatura atual original em a conta de armazenamento ao status atual, se o status atual foi alterado. |
Find-AzureVM | Obtém a máquina virtual especificada do Azure. |
Format-DevTestMessageWithTime | Anexa data e hora a uma mensagem. Essa função destina-se a mensagens gravadas em fluxos de erro e detalhes. |
Get-AzureSQLDatabaseConnectionString | Monta uma cadeia de conexão para se conectar a um banco de dados SQL do Azure. |
Get-AzureVMStorage | Retorna o nome da primeira conta de armazenamento com o nome padrão "desenvolvimento/teste*" (não diferencia maiúsculas de minúsculas) no local ou grupo de afinidade especificado. Se conta de armazenamento "desenvolvimento/teste" não corresponder ao local ou grupo de afinidade, a função o ignora. Especifique um local ou um grupo de afinidades. |
Get-MSDeployCmd | Retorna um comando para executar a ferramenta MsDeploy.exe. |
New-AzureVMEnvironment | Encontra ou cria uma máquina virtual na assinatura que corresponde aos valores no arquivo de configuração JSON. |
Publish-WebPackage | Usa MsDeploy.exe e um arquivo .zip para implantar recursos em um site. Essa função não gera nenhuma saída. Se a chamada para MSDeploy.exe falhar, a função gerará uma exceção. Para obter uma saída mais detalhada, use a opção -Verbose . |
Publish-WebPackageToVM | Verifica os valores de parâmetro e, em seguida, chama a função Publish-WebPackage . |
Read-ConfigFile | Valida o arquivo de configuração JSON e retorna uma tabela de hash de valores selecionados. |
Restore-Subscription | Redefine a assinatura atual à assinatura original. |
Test-AzureModule | Retorna $true se a versão do módulo do Azure instalado for 0.7.4 ou posterior. Retorna $false se o módulo não estiver instalado ou for uma versão anterior. Essa função não tem parâmetros. |
Test-AzureModuleVersion | Retorna $true se a versão do módulo do Azure for 0.7.4 ou posterior. Retorna $false se o módulo não estiver instalado ou for uma versão anterior. Essa função não tem parâmetros. |
Test-HttpsUrl | Converte a URL de entrada em um objeto System.Uri . Retorna $True se a URL for absoluta e seu esquema for HTTPS. Retorna $false se a URL for relativa, seu esquema não for HTTPS ou a cadeia de caracteres de entrada não puder ser convertida em URL. |
Test-Member | Retorna $true se uma propriedade ou método for um membro do objeto. Caso contrário, retorna $false . |
Write-ErrorWithTime | Grava uma mensagem de erro prefixada com a hora atual. Essa função chama a função Format-DevTestMessageWithTime para prefixar a hora antes de gravar a mensagem no fluxo de erro. |
Write-HostWithTime | Grava uma mensagem no programa host (Write-Host) prefixada com a hora atual. O efeito da gravação no programa host varia. A maioria dos programas que hospeda o Windows PowerShell grava essas mensagens na saída padrão. |
Write-VerboseWithTime | Grava uma mensagem detalhada prefixada com a hora atual. Como a mensagem chama Write-Verbose, ela será exibida somente quando o script for executado com o parâmetro Detalhado ou quando a preferência VerbosePreference é definida como Continuar. |
Publish-WebApplication
Nome da função | Descrição |
---|---|
New-AzureWebApplicationEnvironment | Cria recursos do Azure, como um site ou uma máquina virtual. |
New-WebDeployPackage | Essa função não está implementada. Você pode adicionar comandos nessa função para compilar o projeto. |
Publish-AzureWebApplication | Publicar um aplicativo Web no Azure. |
Publish-WebApplication | Cria e implanta aplicativos Web, máquinas virtuais, bancos de dados SQL e contas de armazenamento para um projeto Web do Visual Studio. |
Test-WebApplication | Essa função não está implementada. Você pode adicionar comandos a essa função para testar o aplicativo. |
Conteúdo relacionado
Saiba mais sobre os scripts do PowerShell ao ler Criando scripts com o Windows PowerShell e confira outros scripts do Azure PowerShell no Script Center.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de