Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Vous pouvez déployer automatiquement vos mises à jour de base de données sur la base de données Azure SQL après chaque build réussie.
Conditions préalables
| Produit | Exigences |
|---|---|
| Azure DevOps | - Un projet Azure DevOps . - Autorisations : - Pour créer des connexions de service, vous devez avoir le rôle d'administrateur ou de créateur de connexions de service. |
DACPAC
La façon la plus simple de déployer une base de données consiste à utiliser un package de couche Données ou DACPAC. Les DACPACs vous permettent de empaqueter et de déployer des modifications de schéma et des données. Vous pouvez créer un DACPAC à l’aide du projet SQL Database dans Visual Studio.
La tâche de déploiement d’Azure SQL Database est le mécanisme principal permettant de déployer une base de données sur Azure. Cette tâche, comme avec d’autres tâches Azure intégrées, nécessite une connexion de service Azure en tant qu’entrée. Une connexion de service Azure stocke les informations d’identification pour se connecter à Azure à partir d’Azure Pipelines.
Le moyen le plus simple de commencer à utiliser cette tâche consiste à être connecté en tant qu’utilisateur propriétaire de l’organisation Azure DevOps et de l’abonnement Azure. Dans ce cas, vous n’avez pas besoin de créer manuellement la connexion de service. Sinon, pour savoir comment créer une connexion de service Azure, consultez Créer une connexion de service Azure.
Pour savoir comment créer une connexion de service Azure, consultez Créer une connexion de service Azure.
Pour déployer un DACPAC sur une base de données Azure SQL, utilisez la tâche de déploiement d’Azure SQL Database. Ajoutez l’extrait de code suivant à votre fichier 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>'
Scripts SQL
Vous pouvez également utiliser des scripts SQL au lieu de DACPAC pour déployer votre base de données. Voici un script SQL simple qui crée une base de données vide :
USE [main]
GO
IF NOT EXISTS (SELECT name FROM main.sys.databases WHERE name = N'DatabaseExample')
CREATE DATABASE [DatabaseExample]
GO
Pour exécuter des scripts SQL à partir de votre pipeline, vous devez ajouter et supprimer des règles de pare-feu dans Azure. Sans ces règles, l’agent Azure Pipelines ne peut pas communiquer avec Azure SQL Database.
Définir des règles de pare-feu Azure
Le script PowerShell suivant crée des règles de pare-feu. Enregistrez-le sous SetAzureFirewallRule.ps1 et ajoutez-le à votre dépôt :
[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
Supprimer des règles de pare-feu Azure
Le script PowerShell suivant supprime des règles de pare-feu. Enregistrez-le sous RemoveAzureFirewallRule.ps1 et ajoutez-le à votre dépôt :
[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
Déployer une base de données avec des scripts SQL
L’exemple suivant décrit les étapes à suivre pour ajouter des règles de pare-feu, déployer votre base de données à l’aide de scripts SQL, puis supprimer les règles de pare-feu :
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
Déployer une base de données de manière conditionnelle
Vous pouvez choisir de déployer uniquement des builds spécifiques sur votre base de données Azure, ce qui vous donne plus de contrôle sur les modifications appliquées en fonction de critères tels que la branche source ou l’état de build.
Pour faire cela dans YAML, vous pouvez utiliser l’une des techniques suivantes :
Isolez les étapes de déploiement dans un travail distinct et appliquez une condition à ce travail.
Ajoutez une condition directement à l’étape.
L’exemple ci-dessous montre comment déployer uniquement des builds à partir de la branche principale à l’aide de conditions :
- 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>'
Autres actions SQL
La tâche de déploiement SQL Azure Dacpac peut ne pas couvrir toutes les actions de serveur SQL que vous devez effectuer. Dans ce cas, vous pouvez utiliser PowerShell ou des scripts de ligne de commande pour exécuter les commandes requises.
Cette section traite des cas d’usage courants pour appeler l’outilSqlPackage.exe. Avant d’exécuter cet outil, vérifiez que vous utilisez un agent auto-hébergé avec l’outil installé.
Remarque
Si vous exécutez SQLPackage à partir du dossier où il est installé, vous devez préfixer le chemin d’accès avec & et le mettre entre guillemets doubles.
Syntaxe de base
<Path of SQLPackage.exe> <Arguments to SQLPackage.exe>
Vous pouvez utiliser l’un des scripts SQL suivants en fonction de l’action que vous souhaitez effectuer :
Crée un fichier de capture instantanée de base de données (.dacpac) à partir d’une base de données SQL Server ou Microsoft Azure SQL Database active.
Syntaxe de la commande :
SqlPackage.exe /TargetFile:"<Target location of dacpac file>" /Action:Extract
/SourceServerName:"<ServerName>.database.windows.net"
/SourceDatabaseName:"<DatabaseName>" /SourceUser:"<Username>" /SourcePassword:"<Password>"
ou
SqlPackage.exe /action:Extract /tf:"<Target location of dacpac file>"
/SourceConnectionString:"Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=SSPI;Persist Security Info=False;"
Exemple :
SqlPackage.exe /TargetFile:"C:\temp\test.dacpac" /Action:Extract /SourceServerName:"DemoSqlServer.database.windows.net.placeholder"
/SourceDatabaseName:"Testdb" /SourceUser:"ajay" /SourcePassword:"SQLPassword"
Aide :
sqlpackage.exe /Action:Extract /?