Sdílet prostřednictvím


Nasazení služby Azure SQL Database

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

Po každém úspěšném sestavení můžete do databáze Azure SQL automaticky nasadit aktualizace databáze.

Požadavky

produkt Požadavky
Azure DevOps – projekt Azure DevOps.
- Oprávnění:
    - Chcete-li vytvořit připojení služeb, musíte mít roli správce nebo tvůrce pro připojení služeb.

DACPAC

Nejjednodušší způsob, jak nasadit databázi, je použití balíčku datové vrstvy nebo DACPAC. DACPACs umožňují balení a nasazení změn schématu a dat. Můžete vytvořit DACPAC pomocí SQL Database Project v sadě Visual Studio.

Úloha nasazení Azure SQL Database je primárním mechanismem nasazení databáze do Azure. Tato úloha, stejně jako u dalších předdefinovaných úloh Azure, vyžaduje připojení služby Azure jako vstup. Připojení služby Azure ukládá přihlašovací údaje pro připojení z Azure Pipelines k Azure.

Nejjednodušší způsob, jak začít s touto úlohou, je přihlásit se jako uživatel, který vlastní organizaci Azure DevOps i předplatné Azure. V takovém případě nebudete muset připojení služby vytvořit ručně. V opačném případě se dozvíte, jak vytvořit připojení služby Azure, viz Vytvoření připojení služby Azure.

Informace o vytvoření připojení služby Azure najdete v tématu Vytvoření připojení služby Azure.

Pokud chcete nasadit DACPAC do databáze Azure SQL, použijte úlohu nasazení služby Azure SQL Database. Do souboru YAML přidejte následující fragment kódu:

- 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>'

Skripty SQL

Případně můžete k nasazení databáze použít skripty SQL místo jazyka DACPAC. Níže je jednoduchý skript SQL, který vytvoří prázdnou databázi:

  USE [main]
  GO
  IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
  CREATE DATABASE [DatabaseExample]
  GO

Pokud chcete spustit skripty SQL z vašeho procesního linie, je třeba přidat a odebrat pravidla firewallu v Azure. Bez těchto pravidel nemůže agent Azure Pipelines komunikovat se službou Azure SQL Database.

Nastavte pravidla brány firewall Azure

Následující skript PowerShellu vytvoří pravidla brány firewall. Uložte ho jako SetAzureFirewallRule.ps1 a přidejte ho do úložiště:

[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

Odebrání pravidel brány firewall Azure

Následující skript PowerShellu odebere pravidla brány firewall. Uložte ho jako RemoveAzureFirewallRule.ps1 a přidejte ho do úložiště:

[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

Nasazení databáze pomocí skriptů SQL

Následující příklad popisuje postup přidání pravidel brány firewall, nasazení databáze pomocí skriptů SQL a odebrání pravidel brány 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
  displayName: 'Install SqlServer module if not present'
  inputs:
    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

Podmíněné nasazení databáze

Do databáze Azure můžete nasadit jenom konkrétní sestavení, abyste měli větší kontrolu nad tím, které změny se použijí na základě kritérií, jako je zdrojová větev nebo stav sestavení.

K tomu v YAML můžete použít jednu z těchto technik:

  • Izolujte kroky nasazení do samostatné úlohy a použijte pro tuto úlohu podmínku.

  • Přidejte podmínku přímo do kroku.

Následující příklad ukazuje, jak nasadit pouze sestavení z hlavní větve pomocí podmínek:

- 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>'

Další akce SQL

Úloha nasazení SQL Azure Dacpac nemusí zahrnovat všechny akce SQL Serveru, které potřebujete provést. V takových případech můžete ke spuštění požadovaných příkazů použít PowerShell nebo skripty příkazového řádku.

Tato část popisuje běžné případy použití pro vyvolání nástrojeSqlPackage.exe. Před spuštěním tohoto nástroje se ujistěte, že používáte agenta v místním prostředí s nainstalovaným nástrojem.

Poznámka:

Pokud spustíte SQLPackage ze složky, ve které je nainstalovaná, musíte předponu cesty & zadat a zabalit ji do dvojitých uvozovek.

Základní syntaxe

<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>

Na základě akce, kterou chcete provést, můžete použít libovolný z následujících skriptů SQL:

Vytvoří soubor snímku databáze (.dacpac) z živého SQL serveru nebo služby Microsoft Azure SQL Database.

Syntaxe příkazu:

SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"

nebo

SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"

Příklad:

SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
 /SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"

Pomoc:

sqlpackage.exe /Action:Extract /?