Azure SQL veritabanı dağıtımı
Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 | TFS 2017
Not
Microsoft Team Foundation Server (TFS) 2018 ve önceki sürümlerde, derleme ve yayın işlem hatlarıtanımlarolarak adlandırılır, çalışmalaraderlemelerdenir, hizmet bağlantılarınahizmet uç noktalarıdenir, aşamalarortamlarolarak adlandırılır ve işleraşamalarolarak adlandırılır.
her başarılı derlemeden sonra, veritabanı güncelleştirmelerinizi Azure SQL veritabanına otomatik olarak dağıtabilirsiniz.
DACPAC
Bir veritabanını dağıtmanın en basit yolu, veri katmanı paketi veya DACPAColuşturmaktır. DACPACs, şema değişikliklerinin yanı sıra verileri de paketlemek ve dağıtmak için kullanılabilir. Visual Studio SQL veritabanı projesini kullanarak bir dacpac oluşturabilirsiniz.
bir Azure SQL veritabanına bir dacpac dağıtmak için, azure-pipelines. yıml dosyanıza aşağıdaki kod parçacığını ekleyin.
- 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>'
YAML işlem hatları TFS 'de kullanılamaz.
Azure SQL Veritabanı dağıtım görevini kullanırken ayrıca bkz. kimlik doğrulama bilgileri.
SQL betikleri
bir dacpac kullanmak yerine, veritabanınızı dağıtmak için SQL betikleri de kullanabilirsiniz. boş bir veritabanı oluşturan SQL betiğe ilişkin basit bir örnek aşağıda verilmiştir.
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
SQL betikleri bir işlem hattının parçası olarak çalıştırmak için azure Powershell betiklerinin azure 'da güvenlik duvarı kuralları oluşturup kaldırabilmeniz gerekir. güvenlik duvarı kuralları olmadan, Azure Pipelines aracısı Azure SQL Veritabanı iletişim kuramaz.
Aşağıdaki PowerShell betiği güvenlik duvarı kuralları oluşturur. Bu betiği deponuzda olarak iade edebilirsiniz SetAzureFirewallRule.ps1 .
ARM
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroup,
[String] $AzureFirewallName = "AzureWebAppFirewall"
)
$agentIP = (New-Object net.webclient).downloadstring("https://api.ipify.org")
New-AzSqlServerFirewallRule -ResourceGroupName $ResourceGroup -ServerName $ServerName -FirewallRuleName $AzureFirewallName -StartIPAddress $agentIp -EndIPAddress $agentIP
Klasik
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $AzureFirewallName = "AzureWebAppFirewall"
)
$ErrorActionPreference = 'Stop'
function New-AzureSQLServerFirewallRule {
$agentIP = (New-Object net.webclient).downloadstring("https://api.ipify.org")
New-AzureSqlDatabaseServerFirewallRule -StartIPAddress $agentIp -EndIPAddress $agentIp -FirewallRuleName $AzureFirewallName -ServerName $ServerName -ResourceGroupName $ResourceGroupName
}
function Update-AzureSQLServerFirewallRule{
$agentIP= (New-Object net.webclient).downloadstring("https://api.ipify.org")
Set-AzureSqlDatabaseServerFirewallRule -StartIPAddress $agentIp -EndIPAddress $agentIp -FirewallRuleName $AzureFirewallName -ServerName $ServerName -ResourceGroupName $ResourceGroupName
}
If ((Get-AzureSqlDatabaseServerFirewallRule -ServerName $ServerName -FirewallRuleName $AzureFirewallName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue) -eq $null)
{
New-AzureSQLServerFirewallRule
}
else
{
Update-AzureSQLServerFirewallRule
}
Aşağıdaki PowerShell betiği güvenlik duvarı kurallarını kaldırır. Bu betiği deponuzda olarak iade edebilirsiniz RemoveAzureFirewall.ps1 .
ARM
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroup,
[String] $AzureFirewallName = "AzureWebAppFirewall"
)
Remove-AzSqlServerFirewallRule -ServerName $ServerName -FirewallRuleName $AzureFirewallName -ResourceGroupName $ResourceGroup
Klasik
[CmdletBinding(DefaultParameterSetName = 'None')]
param
(
[String] [Parameter(Mandatory = $true)] $ServerName,
[String] [Parameter(Mandatory = $true)] $ResourceGroupName,
[String] $AzureFirewallName = "AzureWebAppFirewall"
)
$ErrorActionPreference = 'Stop'
If ((Get-AzureSqlDatabaseServerFirewallRule -ServerName $ServerName -FirewallRuleName $AzureFirewallName -ResourceGroupName $ResourceGroupName -ErrorAction SilentlyContinue))
{
Remove-AzureSqlDatabaseServerFirewallRule -FirewallRuleName $AzureFirewallName -ServerName $ServerName -ResourceGroupName $ResourceGroupName
}
bir SQL betiği çalıştırmak için aşağıdakini azure-pipelines. yıml dosyanıza ekleyin.
variables:
AzureSubscription: '<Azure service connection>'
ServerName: '<Database server name>'
DatabaseName: '<Database name>'
AdminUser: '<SQL user name>'
AdminPassword: '<SQL user password>'
SQLFile: '<Location of SQL file in $(Build.SourcesDirectory)>'
steps:
- task: AzurePowerShell@2
displayName: Azure PowerShell script: FilePath
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptPath: '$(Build.SourcesDirectory)\scripts\SetAzureFirewallRule.ps1'
ScriptArguments: '$(ServerName)'
azurePowerShellVersion: LatestVersion
- task: CmdLine@1
displayName: Run Sqlcmd
inputs:
filename: Sqlcmd
arguments: '-S $(ServerName) -U $(AdminUser) -P $(AdminPassword) -d $(DatabaseName) -i $(SQLFile)'
- task: AzurePowerShell@2
displayName: Azure PowerShell script: FilePath
inputs:
azureSubscription: '$(AzureSubscription)'
ScriptPath: '$(Build.SourcesDirectory)\scripts\RemoveAzureFirewallRule.ps1'
ScriptArguments: '$(ServerName)'
azurePowerShellVersion: LatestVersion
YAML işlem hatları TFS 'de kullanılamaz.
Azure hizmet bağlantısı
Azure SQL Veritabanı dağıtım görevi, Azure 'da bir veritabanını dağıtmaya yönelik birincil mekanizmadır. Bu görev, diğer yerleşik Azure görevlerinde olduğu gibi, giriş olarak bir Azure hizmet bağlantısı gerektirir. azure hizmet bağlantısı, Azure Pipelines veya TFS 'den Azure 'a bağlanmak için kimlik bilgilerini depolar.
bu görevi kullanmaya başlamanın en kolay yolu, hem Azure DevOps kuruluşa hem de Azure aboneliğine sahip olan bir kullanıcı olarak oturum açmadır. Bu durumda, hizmet bağlantısını el ile oluşturmanız gerekmez. Aksi takdirde, Azure hizmet bağlantısı oluşturma hakkında bilgi edinmek için bkz. Azure hizmet bağlantısı oluşturma.
Azure hizmet bağlantısı oluşturma hakkında bilgi edinmek için bkz. Azure hizmet bağlantısı oluşturma.
Koşullu dağıtım
Azure veritabanınıza yalnızca belirli derlemeleri dağıtmayı tercih edebilirsiniz.
Bunu YAML 'de yapmak için şu tekniklerden birini kullanabilirsiniz:
- Dağıtım adımlarını ayrı bir iş olarak yalıtın ve bu işe bir koşul ekleyin.
- Adıma bir koşul ekleyin.
Aşağıdaki örnek, yalnızca ana daldan kaynaklanan derlemeleri dağıtmak için adım koşullarını nasıl kullanacağınızı gösterir.
- 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>'
Koşullar hakkında daha fazla bilgi edinmek için bkz. Koşulları belirtme.
YAML işlem hatları TFS 'de kullanılamaz.
ek SQL eylemleri
SQL Azure dacpac dağıtımı , gerçekleştirmek istediğiniz tüm SQL sunucu eylemlerini desteklemiyor olabilir. Bu gibi durumlarda, ihtiyacınız olan komutları çalıştırmak için PowerShell veya komut satırı komut dosyalarını kullanmanız yeterlidir. Bu bölümde SqlPackage.exe aracınıçağırmaya yönelik bazı yaygın kullanım durumları gösterilmektedir. Bu aracı çalıştırmanın bir önkoşulu olarak, kendi kendine barındırılan bir aracı kullanmanız ve aracının aracıda yüklü olması gerekir.
Not
SqlPackage 'i yüklendiği klasörden çalıştırırsanız, yolu ile Önekleyip çift tırnak içine almanız gerekir.
Temel söz dizimi
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
gerçekleştirmek istediğiniz eyleme bağlı olarak aşağıdaki SQL betiklerinden herhangi birini kullanabilirsiniz
Ayıkla
canlı bir SQL sunucusundan veya Microsoft Azure SQL Veritabanı bir veritabanı anlık görüntüsü (. dacpac) dosyası oluşturur.
Komut sözdizimi:
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
veya
SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"
Örnek:
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Yardım:
sqlpackage.exe /Action:Extract /?
Yayımlama
Bir veritabanı şemasını bir kaynak. dacpac dosyasının şemasıyla eşleşecek şekilde artımlı olarak güncelleştirir. Veritabanı sunucuda yoksa, yayımlama işlemi onu oluşturacaktır. Aksi takdirde, var olan bir veritabanı güncelleştirilir.
Komut sözdizimi:
SqlPackage.exe /SourceFile:"<Dacpac file location>" /Action:Publish /TargetServerName:"<ServerName>.database.windows.net"
/TargetDatabaseName:"<DatabaseName>" /TargetUser:"<Username>" /TargetPassword:"<Password> "
Örnek:
SqlPackage.exe /SourceFile:"E:\dacpac\ajyadb.dacpac" /Action:Publish /TargetServerName:"DemoSqlServer.database.windows.net"
/TargetDatabaseName:"Testdb4" /TargetUser:"ajay" /TargetPassword:"SQLPassword"
Yardım:
sqlpackage.exe /Action:Publish /?
Dışarı Aktarma
veritabanı şeması ve kullanıcı verileri de dahil olmak üzere canlı bir veritabanını SQL Server veya Microsoft Azure SQL Veritabanı bacpac paketine (. bacpac dosyası) aktarır.
Komut sözdizimi:
SqlPackage.exe /TargetFile:"<Target location for bacpac file>" /Action:Export /SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
Örnek:
SqlPackage.exe /TargetFile:"C:\temp\test.bacpac" /Action:Export /SourceServerName:"DemoSqlServer.database.windows.net"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Yardım:
sqlpackage.exe /Action:Export /?
İçeri Aktar
bir bacpac paketinden şema ve tablo verilerini bir SQL Server veya Microsoft Azure SQL Veritabanı örneğindeki yeni bir kullanıcı veritabanına aktarır.
Komut sözdizimi:
SqlPackage.exe /SourceFile:"<Bacpac file location>" /Action:Import /TargetServerName:"<ServerName>.database.windows.net"
/TargetDatabaseName:"<DatabaseName>" /TargetUser:"<Username>" /TargetPassword:"<Password>"
Örnek:
SqlPackage.exe /SourceFile:"C:\temp\test.bacpac" /Action:Import /TargetServerName:"DemoSqlServer.database.windows.net"
/TargetDatabaseName:"Testdb" /TargetUser:"ajay" /TargetPassword:"SQLPassword"
Yardım:
sqlpackage.exe /Action:Import /?
DeployReport
Yayımlama eylemi tarafından yapılacak değişikliklerin BIR XML raporunu oluşturur.
Komut Söz Dizimi:
SqlPackage.exe /SourceFile:"<Dacpac file location>" /Action:DeployReport /TargetServerName:"<ServerName>.database.windows.net"
/TargetDatabaseName:"<DatabaseName>" /TargetUser:"<Username>" /TargetPassword:"<Password>" /OutputPath:"<Output XML file path for deploy report>"
Örnek:
SqlPackage.exe /SourceFile:"E: \dacpac\ajyadb.dacpac" /Action:DeployReport /TargetServerName:"DemoSqlServer.database.windows.net"
/TargetDatabaseName:"Testdb" /TargetUser:"ajay" /TargetPassword:"SQLPassword" /OutputPath:"C:\temp\deployReport.xml"
Yardım:
sqlpackage.exe /Action:DeployReport /?
DriftReport
Kayıtlı bir veritabanında yapılan değişikliklerin en son kaydedildiklerinin bir XML raporunu oluşturur.
Komut Söz Dizimi:
SqlPackage.exe /Action:DriftReport /TargetServerName:"<ServerName>.database.windows.net" /TargetDatabaseName:"<DatabaseName>"
/TargetUser:"<Username>" /TargetPassword:"<Password>" /OutputPath:"<Output XML file path for drift report>"
Örnek:
SqlPackage.exe /Action:DriftReport /TargetServerName:"DemoSqlServer.database.windows.net" /TargetDatabaseName:"Testdb"
/TargetUser:"ajay" /TargetPassword:"SQLPassword" /OutputPath:"C:\temp\driftReport.xml"
Yardım:
sqlpackage.exe /Action:DriftReport /?
Komut Dosyası
Hedefin şemasını bir SQL şemayla eş olacak şekilde güncelleştiren bir Transact-SQL artımlı güncelleştirme betiği oluşturur.
Komut Söz Dizimi:
SqlPackage.exe /SourceFile:"<Dacpac file location>" /Action:Script /TargetServerName:"<ServerName>.database.windows.net"
/TargetDatabaseName:"<DatabaseName>" /TargetUser:"<Username>" /TargetPassword:"<Password>" /OutputPath:"<Output SQL script file path>"
Örnek:
SqlPackage.exe /Action:Script /SourceFile:"E:\dacpac\ajyadb.dacpac" /TargetServerName:"DemoSqlServer.database.windows.net"
/TargetDatabaseName:"Testdb" /TargetUser:"ajay" /TargetPassword:"SQLPassword" /OutputPath:"C:\temp\test.sql"
/Variables:StagingDatabase="Staging DB Variable value"
Yardım:
sqlpackage.exe /Action:Script /?