Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete 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ührtdotnet buildwerden. 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.dacpacZieldatenbank 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.
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.sqlSkripts.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
.dacpacaus. - 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;"