Freigeben über


Automatisierung von SQL-Projekten

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-Instanz

Dieser Artikel enthält eine Übersicht über Automatisierungsoptionen für SQL-Projekte auf verschiedenen Softwarebereitstellungsplattformen. Verwenden Sie die Automatisierung, um SQL-Datenbankprojekte in CI/CD-Pipelines zu integrieren und Datenbankänderungen konsistent und wiederholt bereitzustellen.

Was zu automatisieren ist

Die Automatisierung von SQL-Projekten umfasst in der Regel zwei wichtige Aufgaben in einer CI/CD-Pipeline:

  • Erstellen Sie das SQL-Projekt: Überprüfen Sie das Projekt, und erstellen Sie das Bereitstellungsartefakt (.dacpac), indem Sie im SQL-Datenbankprojekt zum Kompilieren ausgeführt dotnet build werden. Führen Sie optional Codeanalyseregeln aus, um die Codequalität während des Projektbuilds zu überprüfen.

  • Stellen Sie folgendes .dacpacbereit: Veröffentlichen Sie die .dacpac Zieldatenbank mithilfe von SqlPackage oder einer plattformspezifischen Aufgabe. Die Bereitstellung kann auf Azure SQL-Datenbank, azure SQL Managed Instance, SQL Server oder SQL-Datenbank in Fabric abzielen.

Diagramm, das den Fluss vom SQL-Projektbuild zum dacpac-Artefakt und zur Bereitstellung in einer Datenbank zeigt.

Wenn Sie diese Schritte in Ihre CI/CD-Pipeline integrieren, werden Datenbankänderungen für jeden Commit überprüft und konsistent in allen Umgebungen bereitgestellt.

Gängige Konzepte

Artefaktfluss: Eine typische Pipeline trennt die Build- und Bereitstellungsphasen. Die Buildstufe kompiliert das SQL-Projekt und erzeugt eine .dacpac Datei, die dann als Pipelineartefakt veröffentlicht wird. In einem nachfolgenden Bereitstellungsauftrag (potenziell nach manueller Genehmigung) wird das Artefakt heruntergeladen und in der Zieldatenbank bereitgestellt. Diese Trennung ermöglicht es Ihnen, einmal zu erstellen und dasselbe Artefakt in mehreren Umgebungen bereitzustellen, um Konsistenz sicherzustellen.

Veröffentlichen oder Skript: Vor der Bereitstellung in sensiblen Umgebungen können Sie den Bereitstellungsplan überprüfen. SqlPackage unterstützt eine Script Aktion, die das T-SQL-Skript generiert, das während der Bereitstellung ausgeführt würde, ohne Änderungen anzuwenden. Mit dem bereitgestellten T-SQL-Skript können Datenbankadministratoren oder Prüfer die genauen Änderungen untersuchen, die erforderlich sind, um die .dacpac Genehmigung anzuwenden. Ebenso erzeugt die DeployReport Aktion einen XML-Bericht der geplanten Änderungen.

Genehmigungen und Gates der Umgebung: Produktionsbereitstellungen erfordern in der Regel Genehmigungsworkflows, um unbeabsichtigte Änderungen zu verhindern. Sowohl GitHub-Aktionen als auch Azure DevOps unterstützen umgebungsbasierte Genehmigungen. In GitHub können Sie Umgebungen mit erforderlichen Prüfern und Wartezeiten konfigurieren. In Azure DevOps unterstützen Umgebungen Genehmigungsgates, Einschränkungen für Geschäftszeiten und andere Bereitstellungssteuerelemente. Mithilfe dieser Steuerelemente können Sie sicherstellen, dass Datenbankänderungen überprüft und genehmigt werden, bevor Sie die Produktion erreichen.

Voraussetzungen

SqlPackage ist plattformübergreifend und wird unter Windows, Linux und macOS ausgeführt. Installieren Sie es als globales .NET-Tool, um ein einheitliches Verhalten in allen Umgebungen sicherzustellen.

  • .NET SDK auf dem Build-Agent installiert.

  • SqlPackage auf dem Build-Agent installiert. Sie können SqlPackage als globales .NET-Tool installieren:

    dotnet tool install --global microsoft.sqlpackage
    

Softwarebereitstellungsplattformen

Wählen Sie eine Umgebung aus, die den Tool-, Compliance- und Konnektivitätsanforderungen Ihres Teams entspricht.

Verwaltete virtuelle Umgebungen

Von Microsoft verwaltete virtuelle Umgebungen für gehostete GitHub-Aktionen und Azure Pipelines-Agents umfassen vorinstallierte Tools:

Umwelt .NET SDK SqlPackage
Windows Preinstalled Preinstalled
Linux Preinstalled Nicht vorinstalliert
macOS Preinstalled Nicht vorinstalliert

Installieren Sie sqlPackage in Linux- und macOS-Umgebungen als Teil Ihres Workflows. Weitere Informationen zur SqlPackage-Installation und Versionsverwaltung in Pipelines finden Sie in SqlPackage in Entwicklungspipelines.

Selbst gehostete Umgebungen

Stellen Sie von einem selbst gehosteten Runner oder Agent bereit, wenn Sie mehr Kontrolle über die Umgebung benötigen, z. B.:

  • Anforderungen an die Netzwerkisolation (Zugriff auf Datenbanken, die nicht für das öffentliche Internet verfügbar gemacht werden)
  • Benutzerdefinierte Tools oder bestimmte SqlPackage-Versionen
  • Compliance- oder Sicherheitsrichtlinien

Sie können selbst gehostete Läufer als Azure-Container-Apps-Aufträge für ereignisgesteuerte, serverlose Ausführung bereitstellen. Verwenden Sie diesen Ansatz, um die Umgebung in einer Dockerfile-Datei zu definieren und sqlPackage und andere Tools nach Bedarf zu installieren.

GitHub-Aktionen

Die Azure SQL Deploy-Aktion (azure/sql-action) bietet eine integrierte Oberfläche zum Bereitstellen von SQL-Projekten und .dacpac -Dateien in Azure SQL und SQL Server von jedem GitHub Actions runner.

Hauptfunktionen:

  • Stellt bereit, oder .sqlproj.sql Skripts.dacpac.
  • Unterstützt sql-Authentifizierung, Microsoft Entra ID-Authentifizierung und Dienstprinzipalauthentifizierung.
  • Automatisches Hinzufügen und Entfernen temporärer Firewallregeln für Azure SQL-Datenbank in Kombination mit azure/login.
  • Funktioniert sowohl für Windows- als auch für Linux-Läufer.

Beispiel: Bereitstellen eines SQL-Projekts mit GitHub-Aktionen

# .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'

Fügen Sie für Azure SQL-Datenbankbereitstellungen, die eine temporäre Firewallregel erfordern, den azure/login Schritt vor 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'

Sie können SqlPackage auch direkt auf jedem Läufer verwenden. Weitere Informationen finden Sie unter SqlPackage in Entwicklungspipelines.

Azure-Pipelines

Azure DevOps stellt die SqlAzureDacpacDeployment-Aufgabe zum Bereitstellen von .dacpac Dateien und SQL-Skripts in Azure SQL-Datenbank bereit.

Hauptfunktionen:

  • Stellt Dateien bereit oder führt SQL-Skripts .dacpac aus.
  • Unterstützt sql-Authentifizierung, Microsoft Entra ID-Authentifizierung und Dienstprinzipalauthentifizierung.
  • Verwaltet Automatisch Firewallregeln für Azure SQL-Datenbank.
  • Erfordert einen Windows-Agent (verwenden Sie SqlPackage direkt auf Linux-Agents).

Beispiel: Bereitstellen eines .dacpac mit 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'

Verwenden Sie sqlPackage direkt für Linux-Agents oder mehr Kontrolle über den Bereitstellungsprozess:

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'

Andere CI/CD-Plattformen

Verwenden Sie für Plattformen wie GitLab CI/CD, Jenkins, CircleCI oder andere SqlPackage direkt zum Erstellen und Bereitstellen von SQL-Projekten.

Erstellen des Projekts

dotnet build ./Database.sqlproj -c Release

Bereitstellen von .dacpac

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