Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
- YAML
- Klasické
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ě:
- PAŽE
- ASM (Classic)
[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ě:
- PAŽE
- ASM (Classic)
[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:
- YAML
- Klasické
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í.
- YAML
- Klasické
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 /?