Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
È possibile distribuire automaticamente gli aggiornamenti del database nel database SQL di Azure dopo ogni compilazione completata.
Prerequisiti
Prodotto | Requisiti |
---|---|
Azure DevOps | - Un progetto Azure DevOps. Autorizzazioni - : - Per creare connessioni al servizio, è necessario avere il ruolo di amministratore o creatore per le connessioni al servizio . |
DACPAC
Il modo più semplice per distribuire un database consiste nell'usare un pacchetto livello dati o un pacchetto daCPAC. DACPACs consente di creare un pacchetto e distribuire modifiche e dati dello schema. È possibile creare un pacchetto DACPAC usando il progetto di database SQL in Visual Studio.
L'attività di distribuzione del database SQL di Azure è il meccanismo principale per distribuire un database in Azure. Questa attività, come con altre attività di Azure predefinite, richiede una connessione al servizio di Azure come input. La connessione al servizio di Azure archivia le credenziali per connettersi da Azure Pipelines ad Azure.
Il modo più semplice per iniziare a usare questa attività consiste nell'accedere come utente proprietario sia dell'organizzazione Di Azure DevOps che della sottoscrizione di Azure. In questo caso, non sarà necessario creare manualmente la connessione al servizio. In caso contrario, per informazioni su come creare una connessione al servizio di Azure, vedere Creare una connessione al servizio di Azure.
Per informazioni su come creare una connessione al servizio di Azure, vedere Creare una connessione al servizio di Azure.
- YAML
- Classico
Per distribuire un DACPAC in un database SQL di Azure, usare l'attività di distribuzione del database SQL di Azure. Aggiungere il frammento di codice seguente al file YAML:
- 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>'
Script SQL
In alternativa, è possibile usare script SQL anziché DACPAC per distribuire il database. Di seguito è riportato uno script SQL semplice che crea un database vuoto:
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
Per eseguire script SQL dalla pipeline, è necessario aggiungere e rimuovere regole del firewall in Azure. Senza queste regole, l'agente di Azure Pipelines non può comunicare con il database SQL di Azure.
Impostare le regole del firewall di Azure
Lo script di PowerShell seguente crea regole del firewall. Salvarlo con SetAzureFirewallRule.ps1
nome e aggiungerlo al repository:
[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
Rimuovere le regole del firewall di Azure
Lo script di PowerShell seguente rimuove le regole del firewall. Salvarlo con RemoveAzureFirewallRule.ps1
nome e aggiungerlo al repository:
[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
Distribuire il database con script SQL
L'esempio seguente illustra i passaggi per aggiungere regole del firewall, distribuire il database usando script SQL e quindi rimuovere le regole del firewall:
- YAML
- Classico
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
Distribuire il database in modo condizionale
È possibile scegliere di distribuire solo build specifiche nel database di Azure, offrendo maggiore controllo sulle modifiche applicate in base a criteri come il ramo di origine o lo stato della compilazione.
- YAML
- Classico
Per eseguire questa operazione in YAML, è possibile usare una di queste tecniche:
Isolare i passaggi di distribuzione in un processo separato e applicare una condizione a tale processo.
Aggiungi una condizione direttamente al passaggio.
L'esempio seguente illustra come distribuire solo le compilazioni dal ramo principale usando condizioni:
- 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>'
Altre azioni SQL
L'attività Dicpac Deployment di SQL Azure potrebbe non coprire tutte le azioni di SQL Server da eseguire. In questi casi, è possibile usare PowerShell o script della riga di comando per eseguire i comandi necessari.
Questa sezione illustra i casi d'uso comuni per richiamare lo strumento diSqlPackage.exe. Prima di eseguire questo strumento, assicurarsi che si stia utilizzando un agente self-hosted con lo strumento installato.
Nota
Se si esegue SQLPackage dalla cartella in cui è installato, devi anteporre '&
' al percorso e racchiuderlo tra virgolette doppie.
Sintassi di base
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
È possibile usare uno degli script SQL seguenti in base all'azione da eseguire:
Crea un file di snapshot del database (con estensione dacpac) da un server SQL attivo o da un database SQL di Microsoft Azure.
Sintassi dei comandi:
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
o
SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"
Esempio:
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Aiuto:
sqlpackage.exe /Action:Extract /?