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 Siedotnet buildfü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
.dacpacbereit: Veröffentlichen Sie das.dacpacmithilfe 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.
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,.sqlprojoder.sqlSkripts 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
.dacpacDateien 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;"