Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Veritabanı güncelleştirmelerinizi her başarılı derlemeden sonra Azure SQL veritabanına otomatik olarak dağıtabilirsiniz.
Önkoşullar
ürün | Gereksinimler |
---|---|
Azure DevOps | - Bir Azure DevOps projesi. - İzinleri: - Hizmet bağlantıları oluşturmak için |
DACPAC
Veritabanını dağıtmanın en basit yolu , veri katmanı paketi veya DACPAC kullanmaktır. DACPACs şema değişikliklerini ve verilerini paketleyip dağıtmanızı sağlar. Visual Studio'daki SQL Veritabanı Projesi'ni kullanarak bir DACPAC oluşturabilirsiniz.
Azure SQL Veritabanı dağıtım görevi, veritabanını Azure'a dağıtmaya ilişkin 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'tan Azure'a bağlanmak için kimlik bilgilerini depolar.
Bu görevi kullanmaya başlamanın en kolay yolu, hem Azure DevOps kuruluşuna hem de Azure aboneliğine sahip bir kullanıcı olarak oturum açmaktır. Bu durumda hizmet bağlantısını el ile oluşturmanız gerekmez. Aksi takdirde, Azure hizmet bağlantısı oluşturmayı öğrenmek için bkz . Azure hizmet bağlantısı oluşturma.
Azure hizmet bağlantısı oluşturmayı öğrenmek için bkz . Azure hizmet bağlantısı oluşturma.
DaCPAC'yi bir Azure SQL veritabanına dağıtmak için Azure SQL Veritabanı dağıtım görevini kullanın. YAML 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>'
SQL betikleri
Alternatif olarak veritabanınızı dağıtmak için DACPAC yerine SQL betikleri kullanabilirsiniz. Aşağıda boş bir veritabanı oluşturan basit bir SQL betiği yer almaktadır:
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
İşlem hattınızdan SQL betiklerini çalıştırmak için Azure'da güvenlik duvarı kuralları eklemeniz ve kaldırmanız gerekir. Bu kurallar olmadan Azure Pipelines aracısı Azure SQL Veritabanı ile iletişim kuramaz.
Azure güvenlik duvarı kurallarını ayarlama
Aşağıdaki PowerShell betiği güvenlik duvarı kuralları oluşturur. Olarak SetAzureFirewallRule.ps1
kaydedin ve deponuza ekleyin.
[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 güvenlik duvarı kurallarını kaldırma
Aşağıdaki PowerShell betiği güvenlik duvarı kurallarını kaldırır. Olarak RemoveAzureFirewallRule.ps1
kaydedin ve deponuza ekleyin.
[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
VERITABANıNı SQL betikleriyle dağıtma
Aşağıdaki örnekte güvenlik duvarı kuralları ekleme, SQL betiklerini kullanarak veritabanınızı dağıtma ve ardından güvenlik duvarı kurallarını kaldırma adımları özetlenmiştir:
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
Veritabanını koşullu olarak dağıtma
Kaynak dal veya derleme durumu gibi ölçütlere göre hangi değişikliklerin uygulanacağı konusunda daha fazla denetim sahibi olmanız için Azure veritabanınıza yalnızca belirli derlemeleri dağıtmayı seçebilirsiniz.
Bunu YAML'de yapmak için şu tekniklerden birini kullanabilirsiniz:
Dağıtım adımlarını ayrı bir işte yalıtın ve bu işe bir koşul uygulayın.
Doğrudan adıma bir koşul ekleyin.
Aşağıdaki örnekte , koşulları kullanarak yalnızca ana daldan derlemelerin nasıl dağıtılacağı gösterilmektedir:
- 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>'
Diğer SQL eylemleri
SQL Azure Dacpac Dağıtımı görevi, gerçekleştirmeniz gereken tüm SQL sunucusu eylemlerini kapsamayabilir. Böyle durumlarda, gerekli komutları yürütmek için PowerShell veya komut satırı betiklerini kullanabilirsiniz.
Bu bölüm, SqlPackage.exe aracını çağırmaya yönelik yaygın kullanım örneklerini kapsar. Bu aracı çalıştırmadan önce, aracı yüklemiş olduğunuz kendi barındırdığınız bir aracıyı kullandığınızdan emin olun.
Not
SQLPackage'i yüklendiği klasörden yürütüyorsanız, yolun başına &
eklemeli ve çift tırnak içine almalısınız.
Temel Söz Dizimi
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
Gerçekleştirmek istediğiniz eyleme göre aşağıdaki SQL betiklerinden herhangi birini kullanabilirsiniz:
- Ayıklama
- Yayınla
- Dışa Aktar
- İthalat
- DeployReport
- DriftReport
- Senaryo
Canlı bir SQL sunucusundan veya Microsoft Azure SQL Veritabanı'ndan 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.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Yardım:
sqlpackage.exe /Action:Extract /?