Partager via


Automatisation des projets SQL

s’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Cet article fournit une vue d’ensemble des options d’automatisation pour les projets SQL sur différentes plateformes de distribution de logiciels. Utilisez l’automatisation pour intégrer des projets de base de données SQL dans des pipelines CI/CD et déployer des modifications de base de données de manière cohérente et répétée.

Qu’est-ce que l’automatisation

L’automatisation des projets SQL implique généralement deux tâches clés dans un pipeline CI/CD :

  • Générez le projet SQL : validez le projet et produisez l’artefact de déploiement (.dacpac) en exécutant dotnet build le projet de base de données SQL à compiler. Si vous le souhaitez, exécutez des règles d’analyse du code pour vérifier la qualité du code pendant la génération du projet.

  • Déployez le .dacpac: publiez sur une base de données cible à l’aide .dacpac de SqlPackage ou d’une tâche spécifique à la plateforme. Le déploiement peut cibler Azure SQL Database, Azure SQL Managed Instance, SQL Server ou sql database dans Fabric.

Diagramme montrant le flux de la génération du projet SQL vers l’artefact dacpac et le déploiement vers une base de données.

Lorsque vous intégrez ces étapes à votre pipeline CI/CD, les modifications de base de données sont validées sur chaque validation et déployées de manière cohérente dans les environnements.

Concepts communs

Flux d’artefact : un pipeline classique sépare les phases de génération et de déploiement. L’étape de génération compile le projet SQL et produit un .dacpac fichier, qui est ensuite publié en tant qu’artefact de pipeline. Dans un travail de déploiement ultérieur (potentiellement après approbation manuelle), l’artefact est téléchargé et déployé sur la base de données cible. Cette séparation vous permet de générer une seule fois et de déployer le même artefact dans plusieurs environnements, ce qui garantit la cohérence.

Publier ou script : avant de déployer dans des environnements sensibles, vous pouvez passer en revue le plan de déploiement. SqlPackage prend en charge une Script action qui génère le script T-SQL qui serait exécuté pendant le déploiement, sans appliquer de modifications. Le script T-SQL fourni permet aux administrateurs de base de données ou aux réviseurs d’examiner les modifications exactes nécessaires pour appliquer l’approbation .dacpac antérieure. De même, l’action DeployReport produit un rapport XML des modifications planifiées.

Approbations et portes d’environnement : les déploiements de production nécessitent généralement des flux de travail d’approbation pour empêcher les modifications involontaires. GitHub Actions et Azure DevOps prennent en charge les approbations basées sur l’environnement. Dans GitHub, vous pouvez configurer des environnements avec des réviseurs et des minuteurs d’attente requis. Dans Azure DevOps, les environnements prennent en charge les portes d’approbation, les restrictions des heures d’ouverture et d’autres contrôles de déploiement. Ces contrôles permettent de s’assurer que les modifications de base de données sont examinées et approuvées avant d’atteindre la production.

Prerequisites

SqlPackage est multiplateforme et s’exécute sur Windows, Linux et macOS. Installez-le en tant qu’outil global .NET pour garantir un comportement cohérent entre les environnements.

Plateformes de distribution de logiciels

Choisissez un environnement qui correspond aux exigences en matière d’outils, de conformité et de connectivité de votre équipe.

Environnements virtuels gérés

Les environnements virtuels gérés par Microsoft pour GitHub Actions hébergés et les agents Azure Pipelines incluent des outils préinstallés :

Environnement Kit de développement logiciel (SDK) .NET SqlPackage
Windows Préinstallé Préinstallé
Linux Préinstallé Non préinstallé
macOS Préinstallé Non préinstallé

Dans les environnements Linux et macOS, installez SqlPackage dans le cadre de votre workflow. Pour plus d’informations sur l’installation et le contrôle de version SqlPackage dans les pipelines, consultez SqlPackage dans les pipelines de développement.

Environnements auto-hébergés

Déployez à partir d’un exécuteur ou d’un agent auto-hébergé lorsque vous avez besoin d’un contrôle supplémentaire sur l’environnement, par exemple :

  • Configuration requise pour l’isolation réseau (accès aux bases de données non exposées à l’Internet public)
  • Outils personnalisés ou versions sqlPackage spécifiques
  • Stratégies de conformité ou de sécurité

Vous pouvez déployer des exécuteurs auto-hébergés en tant que travaux Azure Container Apps pour une exécution serverless pilotée par les événements. Utilisez cette approche pour définir l’environnement dans un fichier Dockerfile et installer SqlPackage et d’autres outils si nécessaire.

GitHub Actions

L’action Azure SQL Deploy (azure/sql-action) offre une expérience intégrée pour le déploiement de projets et .dacpac de fichiers SQL sur Azure SQL et SQL Server à partir de n’importe quel exécuteur GitHub Actions.

Fonctionnalités clés :

  • .dacpacDéploie , .sqlprojou .sql scripts.
  • Prend en charge l’authentification SQL, l’authentification Microsoft Entra ID et l’authentification du principal de service.
  • Ajoute et supprime automatiquement des règles de pare-feu temporaires pour Azure SQL Database lorsqu’elles sont combinées avec azure/login.
  • Fonctionne sur les exécuteurs Windows et Linux.

Exemple : Déployer un projet SQL avec GitHub Actions

# .github/workflows/sql-deploy.yml
on: [push]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.sqlproj'
        action: 'publish'

Pour les déploiements Azure SQL Database qui nécessitent une règle de pare-feu temporaire, ajoutez l’étape azure/login avant sql-action:

    - uses: azure/login@v2
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - uses: azure/sql-action@v2
      with:
        connection-string: ${{ secrets.AZURE_SQL_CONNECTION_STRING }}
        path: './Database.dacpac'
        action: 'publish'

Vous pouvez également utiliser SqlPackage directement sur n’importe quel exécuteur. Pour plus d’informations, consultez SqlPackage dans les pipelines de développement.

Azure Pipelines

Azure DevOps fournit la tâche SqlAzureDacpacDeployment pour le déploiement de .dacpac fichiers et de scripts SQL sur Azure SQL Database.

Fonctionnalités clés :

  • Déploie des .dacpac fichiers ou exécute des scripts SQL.
  • Prend en charge l’authentification SQL, l’authentification Microsoft Entra ID et l’authentification du principal de service.
  • Gère automatiquement les règles de pare-feu pour Azure SQL Database.
  • Nécessite un agent Windows (utilisez SqlPackage directement sur les agents Linux).

Exemple : Déployer un .dacpac avec Azure DevOps

# azure-pipelines.yml
trigger:
  - main

pool:
  vmImage: 'windows-latest'

steps:
- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: 'your-service-connection'
    AuthenticationType: 'server'
    ServerName: 'your-server.database.windows.net'
    DatabaseName: 'your-database'
    SqlUsername: '$(SqlUser)'
    SqlPassword: '$(SqlPassword)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/Database.dacpac'

Pour les agents Linux ou plus de contrôle sur le processus de déploiement, utilisez directement SqlPackage :

steps:
- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '8.x'

- script: dotnet tool install --global microsoft.sqlpackage
  displayName: 'Install SqlPackage'

- script: |
    sqlpackage /Action:Publish \
      /SourceFile:$(Build.ArtifactStagingDirectory)/Database.dacpac \
      /TargetConnectionString:"$(ConnectionString)"
  displayName: 'Deploy database'

Autres plateformes CI/CD

Pour les plateformes telles que GitLab CI/CD, Jenkins, CircleCI ou d’autres, utilisez SqlPackage directement pour générer et déployer des projets SQL.

Créer le projet

dotnet build ./Database.sqlproj -c Release

Déployez le .dacpac

sqlpackage /Action:Publish \
  /SourceFile:./bin/Release/Database.dacpac \
  /TargetConnectionString:"Server=your-server;Database=your-db;User Id=user;Password=password;"