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 dotnet build für das SQL-Datenbankprojekt ausführen, um es zu kompilieren. Führen Sie optional Codeanalyseregeln aus, um die Codequalität während des Projektbuilds zu überprüfen.

  • Stellen Sie das .dacpac bereit: Veröffentlichen Sie das .dacpac mithilfe von SqlPackage oder einem plattformspezifischen Task in einer Zieldatenbank. 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

Artefaktablauf: Eine typische Pipeline trennt die Erstellungs- und Bereitstellungsphasen. Die Buildstufe kompiliert das SQL-Projekt und erzeugt eine .dacpac Datei, die dann als Pipelineartefakt veröffentlicht wird. In einem nachfolgenden Bereitstellungsauftrag (möglicherweise nach manueller Freigabe) wird das Artefakt heruntergeladen und auf 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 skripten: 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 prüfen, die erforderlich sind, um .dacpac vor der Genehmigung anzuwenden. Ebenso erzeugt die DeployReport Aktion einen XML-Bericht der geplanten Änderungen.

Genehmigungen und Gates für Umgebungen: 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 Genehmigungs-Gates, Beschränkungen auf Geschäftszeiten und andere Bereitstellungssteuerungen. 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

Microsoft-verwaltete virtuelle Umgebungen für gehostete Runner für GitHub Actions und Azure Pipelines-Agents enthalten 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 selbstgehostete Runner als Azure Container Apps-Jobs zur ereignisgesteuerten serverlosen 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 .dacpac, .sqlproj oder .sql Skripts bereit.
  • 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 auf Windows- als auch auf Linux-Runnern.

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 Runner 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 .dacpac Dateien bereit oder führt SQL-Skripte 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'

Für Linux-Agents oder für mehr Kontrolle über den Bereitstellungsprozess verwenden Sie SqlPackage direkt:

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

Stellen Sie das .dacpac bereit.

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