Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Você pode implantar automaticamente suas atualizações de banco de dados no banco de dados SQL do Azure após cada compilação bem-sucedida.
Produto | Requisitos |
---|---|
Azure DevOps | - Um projeto Azure DevOps. - Permissões: - Para criar conexões de serviço, você deve ter a função Administrador ou Criador para conexões de serviço . |
A maneira mais simples de implantar um banco de dados é usando um pacote de camada de dados ou DACPAC. Os DACPACs permitem empacotar e implantar alterações de esquema e dados. Você pode criar um DACPAC usando o projeto de banco de dados SQL no Visual Studio.
A tarefa de implantação do Banco de Dados SQL do Azure é o mecanismo principal para implantar um banco de dados no Azure. Esta tarefa, tal como acontece com outras tarefas internas do Azure, requer uma ligação de serviço do Azure como entrada. A conexão de serviço do Azure armazena as credenciais para se conectar do Azure Pipelines ao Azure.
A maneira mais fácil de começar com essa tarefa é entrar como um usuário que possui a organização do Azure DevOps e a assinatura do Azure. Nesse caso, você não precisará criar manualmente a conexão de serviço. Caso contrário, para saber como criar uma conexão de serviço do Azure, consulte Criar uma conexão de serviço do Azure.
Para saber como criar uma conexão de serviço do Azure, consulte Criar uma conexão de serviço do Azure.
Para implantar um DACPAC em uma base de dados SQL do Azure, use a tarefa de implementação do Banco de Dados SQL do Azure. Adicione o seguinte trecho ao seu arquivo YAML:
- task: SqlAzureDacpacDeployment@1
displayName: Execute Azure SQL : DacpacTask
inputs:
azureSubscription: '<Azure service connection>'
ServerName: '<Database server name>'
DatabaseName: '<Database name>'
SqlUsername: '<SQL user name>'
SqlPassword: '<SQL user password>'
DacpacFile: '<Location of Dacpac file in $(Build.SourcesDirectory) after compilation>'
Como alternativa, você pode usar scripts SQL em vez de DACPAC para implantar seu banco de dados. Abaixo está um script SQL simples que cria um banco de dados vazio:
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
Para executar scripts SQL a partir do seu pipeline, terá de adicionar e remover regras de firewall no Azure. Sem essas regras, o agente do Azure Pipelines não pode se comunicar com o Banco de Dados SQL do Azure.
O script PowerShell a seguir cria regras de firewall. Salve-o como SetAzureFirewallRule.ps1
e adicione-o ao seu repositório:
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $FirewallRuleName = "AzureWebAppFirewall"
)
$agentIP = (New-Object net.webclient).downloadstring("https://api.ipify.org")
New-AzSqlServerFirewallRule -ResourceGroupName $ResourceGroupName -ServerName $ServerName -FirewallRuleName $FirewallRuleName -StartIPAddress $agentIP -EndIPAddress $agentIP
O script PowerShell a seguir remove regras de firewall. Salve-o como RemoveAzureFirewallRule.ps1
e adicione-o ao seu repositório:
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $FirewallRuleName = "AzureWebAppFirewall"
)
Remove-AzSqlServerFirewallRule -ServerName $ServerName -FirewallRuleName $FirewallRuleName -ResourceGroupName $ResourceGroupName
O exemplo a seguir descreve as etapas para adicionar regras de firewall, implantar seu banco de dados usando scripts SQL e remover as regras de firewall:
variables:
AzureSubscription: '<SERVICE_CONNECTION_NAME>'
ResourceGroupName: '<RESOURCE_GROUP_NAME>'
ServerName: '<DATABASE_SERVER_NAME>'
ServerFqdn: '<DATABASE_FQDN>'
DatabaseName: '<DATABASE_NAME>'
AdminUser: '<DATABASE_USERNAME>'
AdminPassword: '<DATABASE_PASSWORD>'
SQLFile: '<LOCATION_OF_SQL_FILE_IN_$(Build.SourcesDirectory)>'
steps:
- task: AzurePowerShell@5
displayName: 'Set Azure firewall rules'
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptType: filePath
ScriptPath: '$(Build.SourcesDirectory)\scripts\SetAzureFirewallRule.ps1'
ScriptArguments: '-ServerName $(ServerName) -ResourceGroupName $(ResourceGroupName)'
azurePowerShellVersion: LatestVersion
- task: PowerShell@2
inputs:
displayName: 'Install SqlServer module if not present'
targetType: 'inline'
script: |
if (-not (Get-Module -ListAvailable -Name SqlServer)) {
Install-Module -Name SqlServer -Force -AllowClobber
}
- task: PowerShell@2
displayName: 'Deploy database'
inputs:
targetType: 'inline'
script: |
Invoke-Sqlcmd -InputFile $(SQLFile) -ServerInstance $(ServerFqdn) -Database $(DatabaseName) -Username $(AdminUser) -Password $(AdminPassword)
- task: AzurePowerShell@5
displayName: 'Remove Azure firewall rules'
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptType: filePath
ScriptPath: '$(Build.SourcesDirectory)\scripts\RemoveAzureFirewallRule.ps1'
ScriptArguments: '-ServerName $(ServerName) -ResourceGroupName $(ResourceGroupName)'
azurePowerShellVersion: LatestVersion
Você pode optar por implantar apenas compilações específicas em seu banco de dados do Azure, oferecendo mais controle sobre quais alterações são aplicadas com base em critérios como a ramificação de origem ou o status da compilação.
Para fazer isso no YAML, você pode usar uma destas técnicas:
Isole as etapas de implantação em um trabalho separado e aplique uma condição a esse trabalho.
Adicione uma condição diretamente à etapa.
O exemplo abaixo mostra como implantar apenas compilações da ramificação principal usando condições:
- task: SqlAzureDacpacDeployment@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<Azure service connection>'
ServerName: '<Database server name>'
DatabaseName: '<Database name>'
SqlUsername: '<SQL user name>'
SqlPassword: '<SQL user password>'
DacpacFile: '<Location of Dacpac file in $(Build.SourcesDirectory) after compilation>'
A tarefa Implantação do Dacpac do SQL Azure pode não abranger todas as ações do SQL Server que você precisa executar. Nesses casos, você pode usar o PowerShell ou scripts de linha de comando para executar os comandos necessários.
Esta seção aborda casos de uso comuns para invocar a ferramentaSqlPackage.exe. Antes de executar essa ferramenta, verifique se você está usando um agente auto-hospedado com a ferramenta instalada.
Nota
Se você executar SQLPackage a partir da pasta onde ele está instalado, você deve prefixar o caminho com &
e envolvê-lo em aspas duplas.
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
Você pode usar qualquer um dos seguintes scripts SQL com base na ação que deseja executar:
Cria um arquivo de instantâneo de banco de dados (.dacpac) a partir de um servidor SQL ativo ou do Banco de Dados SQL do Microsoft Azure.
Sintaxe do comando:
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
ou
SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"
Exemplo:
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Ajuda:
sqlpackage.exe /Action:Extract /?