Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Minden sikeres build után automatikusan üzembe helyezheti az adatbázis-frissítéseket az Azure SQL Database-ben.
Előfeltételek
| termék | Követelmények |
|---|---|
| Azure DevOps | - Egy Azure DevOps-projekt. - engedélyek: – Szolgáltatáskapcsolatok létrehozásához rendszergazdai vagy létrehozói szerepkör szükséges szolgáltatáskapcsolatokhoz. |
DACPAC
Az adatbázisok üzembe helyezésének legegyszerűbb módja egy adatréteg-csomag vagy a DACPAC használata. A DACPAC-k lehetővé teszik sémamódosítások és adatok csomagolását és üzembe helyezését. DACPAC-t az SQL Database Project használatával hozhat létre a Visual Studióban.
Az Azure SQL Database üzembe helyezési feladata az adatbázis Azure-ban történő üzembe helyezésének elsődleges mechanizmusa. Ehhez a feladathoz, mint más beépített Azure-feladatokhoz, egy Azure-szolgáltatáskapcsolatra van szükség bemenetként. Az Azure-szolgáltatáskapcsolat tárolja az Azure Pipelinesból az Azure-ba való csatlakozáshoz szükséges hitelesítő adatokat.
Ennek a feladatnak a legegyszerűbb módja, ha olyan felhasználóként jelentkezik be, aki az Azure DevOps-szervezetet és az Azure-előfizetést is birtokolja. Ebben az esetben nem kell manuálisan létrehoznia a szolgáltatáskapcsolatot. Ha szeretné megtudni, hogyan hozhat létre Azure-szolgáltatáskapcsolatot, olvassa el az Azure-szolgáltatáskapcsolatok létrehozását ismertető témakört.
Az Azure-szolgáltatáskapcsolatok létrehozásáról további információt az Azure-szolgáltatáskapcsolat létrehozása című témakörben talál.
A DACPAC Azure SQL Database-ben való üzembe helyezéséhez használja az Azure SQL Database üzembe helyezési feladatát. Adja hozzá a következő kódrészletet a YAML-fájlhoz:
- 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>'
SQL-szkriptek
Másik lehetőségként a DACPAC helyett SQL-szkripteket is használhat az adatbázis üzembe helyezéséhez. Az alábbiakban egy egyszerű SQL-szkriptet talál, amely üres adatbázist hoz létre:
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
Ha SQL-szkripteket szeretne futtatni a folyamatból, tűzfalszabályokat kell hozzáadnia és eltávolítania az Azure-ban. E szabályok nélkül az Azure Pipelines-ügynök nem tud kommunikálni az Azure SQL Database-sel.
Azure-tűzfalszabályok beállítása
Az alábbi PowerShell-szkript tűzfalszabályokat hoz létre. Mentsd el SetAzureFirewallRule.ps1 néven, és add hozzá a tárhelyedhez:
[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
Azure-tűzfalszabályok eltávolítása
Az alábbi PowerShell-szkript eltávolítja a tűzfalszabályokat. Mentsd el RemoveAzureFirewallRule.ps1 néven, és add hozzá a tárhelyedhez:
[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
Adatbázis üzembe helyezése SQL-szkriptekkel
Az alábbi példa a tűzfalszabályok hozzáadásának, az adatbázis SQL-szkriptek használatával történő üzembe helyezésének, majd a tűzfalszabályok eltávolításának lépéseit ismerteti:
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
Adatbázis feltételes üzembe helyezése
Dönthet úgy, hogy csak bizonyos buildeket helyez üzembe az Azure-adatbázisban, így jobban szabályozhatja, hogy mely módosítások legyenek alkalmazva olyan feltételek alapján, mint a forráság vagy a build állapota.
Ehhez a YAML-ben az alábbi technikák egyikét használhatja:
Elkülönítheti az üzembe helyezés lépéseit egy külön feladatba, és alkalmazhat egy feltételt erre a feladatra.
Adjon hozzá egy feltételt közvetlenül a lépéshez.
Az alábbi példa bemutatja, hogyan helyezhet üzembe csak buildeket a fő ágból feltételekkel:
- 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>'
További SQL-műveletek
Előfordulhat, hogy az SQL Azure Dacpac üzembe helyezési feladata nem fedi le a végrehajtandó ÖSSZES SQL Server-műveletet. Ilyen esetekben PowerShell-lel vagy parancssori szkriptekkel hajthatja végre a szükséges parancsokat.
Ez a szakasz a SqlPackage.exe eszköz meghívásának gyakori használati eseteit ismerteti. Ellenőrizze, hogy az eszköz futtatása előtt a telepített eszközzel rendelkező, saját üzemeltetésű ügynököt használja.
Megjegyzés
Ha az SQLPackage-t abból a mappából hajtja végre, ahol telepítve van, az elérési út elé a előtagot kell tenni, és dupla idézőjelekbe kell csomagolnia.
Alapszintű szintaxis
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
Az alábbi SQL-szkriptek bármelyikét használhatja a végrehajtani kívánt művelet alapján:
Létrehoz egy adatbázis-pillanatképfájlt (.dacpac) egy élő SQL-kiszolgálóról vagy a Microsoft Azure SQL Database-ből.
Parancs szintaxisa:
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
vagy
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élda:
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Segítség:
sqlpackage.exe /Action:Extract /?