Verstehen der Datenbankbereitstellungsaufgabe

Abgeschlossen

Die Integration von Datenbankbereitstellungsaufgaben in CI/CD Azure Pipelines und GitHub Actions-Workflows soll die Bereitstellung und Aktualisierung von Datenbanken zusammen mit Anwendungen automatisieren, die diese Daten hosten. Diese Integration erleichtert eine nahtlose Koordination zwischen Anwendungs- und Datenbanklebenszyklus, wodurch das Risiko von Fehlern und Inkonsistenzen verringert wird, die sich aus manuellen Bereitstellungen ergeben können. Die Automatisierung der Datenbankbereitstellung erleichtert schnellere Veröffentlichungszyklen, reduziert die Möglichkeit von menschlichen Fehlern und verbessert die Zusammenarbeit zwischen Entwicklungs-, Betriebs- und Datenbankteams.

Betrachtungen

Das Einschließen von Datenkomponenten in die automatisierte Softwarebereitstellung führt zusätzliche Überlegungen zur Aufrechterhaltung der Datenintegrität und zur Verhinderung potenzieller Datenverluste ein. Berücksichtigen Sie die folgenden Bestimmungen, um diese Risiken zu beheben und zu mindern:

  • Datentrennung: Sorgen Sie für eine klare Trennung zwischen Datenbankschemaänderungen und Datenmanipulationsvorgängen. Datenbankschemaänderungen, z. B. Tabellenänderungen oder Schemaaktualisierungen, sollten getrennt von Datenmanipulationsvorgängen verwaltet werden, z. B. Startdaten oder Importieren und Exportieren von Datasets.
  • Erhaltung von Daten: Implementieren Sie Strategien zum Beibehalten vorhandener Daten während der Pipeline- oder Workflow-Erneutbereitstellung. Dies kann das Sichern kritischer Daten umfassen, bevor Änderungen bereitgestellt oder Datenmigrationsskripts verwendet werden, um Daten zwischen Umgebungen zu übertragen, ohne vorhandene Daten zu überschreiben.
  • Idempotent-Vorgänge: Stellen Sie sicher, dass Datenbankbereitstellungsvorgänge idempotent sind, was bedeutet, dass sie mehrmals erneut ausgeführt werden können, was immer zu demselben Ergebnis führt. Idempotency sollte die Möglichkeit beseitigen, doppelte Schemaobjekte und datensätze zu erstellen.
  • Versionsverwaltung und Rollback: Verwalten Sie die Versionsverwaltung über Datenbankschemaänderungen, Datenmigrationen und Bereitstellungsskripts, um Änderungen nachzuverfolgen und Rollbackprozeduren zu vereinfachen. Verwenden Sie Quellcodeverwaltungsrepositorys, um Datenbankskripts zu verwalten, Versionstags oder Bezeichnungen auf Datenbankänderungen anzuwenden und Rollbackstrategien zu implementieren, die Datenbankänderungen wiederherstellen.
  • Testen und Überprüfen: Durchführen gründlicher Tests und Überprüfungen von Datenbankänderungen in einer Staging- oder Testumgebung vor der Bereitstellung in der Produktion. Verwenden Sie automatisierte Testframeworks, Datenbankeinheitstests und Integrationstests, um die Datenbankbereitstellungen zu überprüfen und die Kompatibilität mit vorhandenen Daten sicherzustellen.
  • Überwachung und Warnung: Implementieren Sie Überwachungs- und Warnungsmechanismen, um Anomalien, Fehler oder Leistungsprobleme während der Datenbankbereitstellungen zu erkennen. Überwachen Sie Datenbankintegritätsmetriken, verfolgen Sie Überwachungsprotokolle, und konfigurieren Sie Warnungen, die durch unerwartete Verhaltensweisen oder Fehler ausgelöst werden.

Die grundlegenden Konzepte und Aktivitäten sind zwischen Azure-Pipelines und GitHub-Aktionen-Workflows ähnlich. Auf hoher Ebene umfasst die Integration von Datenbanken in Azure Pipelines mehrere Implementierungsaufgaben:

  • Erstellen von Datenbankbereitstellungsskripts zum Definieren des Datenbankschemas, seed-Daten und Anwenden zusätzlicher Konfigurationen. Die Skripts sollten sich im Quellcodeverwaltungs-Repository befinden, um die Änderungsnachverfolgung und Versionsverwaltung zu erleichtern.
  • Erstellen von Datenbankverbindungszeichenfolgen und sicheres Speichern als geheime Variablen oder geheime Azure Key Vault-Schlüssel. Dies erfordert auch, den Pipelines Zugriff auf die Geheimnisse zu gewähren.
  • Verwenden von Azure DevOps-Aufgaben oder Erweiterungen von Drittanbietern zum Ausführen von Datenbankbereitstellungsskripts als Teil der Pipeline.
  • Konfigurieren der Pipeline für die Bereitstellung aller erforderlichen Abhängigkeiten, z. B. SQL Server-Instanzen, zusammen mit erforderlichen Tools und Dienstprogrammen.
  • Einschließen von Datenbanktestaufgaben in der Pipeline, um Datenbankänderungen zu überprüfen und sicherzustellen, dass Bereitstellungen erfolgreich sind. Dies umfasst in der Regel das Ausführen von Datenbankeinheitstests, Integrationstests oder Datenüberprüfungsprüfungen.
  • Implementieren von Rollback- und Wiederherstellungsmechanismen in der Pipeline zur Behandlung von Bereitstellungsfehlern oder unerwarteten Fehlern. Dies kann das Erstellen von Datenbankmomentaufnahmen, Sicherungen oder Transaktionsrollbackskripts umfassen, um Änderungen im Falle von Problemen wiederherzustellen.

Die spezifischen Implementierungsaufgaben variieren je nach Zieldatenbanktechnologie erheblich. Im folgenden Abschnitt werden diese Besonderheiten im Kontext der Bereitstellung von Azure SQL-Diensten untersucht.

SQL Server- und Azure SQL-spezifische Techniken und Tools

Beim Arbeiten mit SQL Server- oder Azure SQL-Datenbank in CI/CD-Pipelines gibt es zahlreiche Tools und Techniken, die Sie nutzen können, einschließlich der folgenden:

  • SQL Server Data Tools (SSDT): ein Entwicklungstoolset, mit dem Datenbankentwickler Datenbankschemas und -objekte in Visual Studio erstellen, debuggen, verwalten und umgestalten können. Sie können SSDT-Projekte verwenden, um Datenbankschemaänderungen zu verwalten und Bereitstellungsskripts für SQL Server oder Azure SQL-Datenbank zu generieren.
  • SQLPackage.exe: ein Befehlszeilenprogramm, das in SSDT enthalten ist und die Automatisierung von Bereitstellungen von SQL Server-Datenbanken mithilfe von DACPAC-Dateien (Data-Tier Application Component) vereinfacht. Sie können SQLPackage.exe in CI/CD-Pipelines verwenden, um Datenbankänderungen in SQL Server- oder Azure SQL-Datenbank bereitzustellen.
  • Azure DevOps-Aufgaben: integrierte Aufgaben wie azure SQL-Datenbankbereitstellung und SqlAzureDacpacDeployment, mit denen Sie Datenbankänderungen direkt aus DACPAC-Dateien in Azure SQL-Datenbank bereitstellen können. Diese Aufgaben integrieren die Datenbankbereitstellung in CI/CD-Pipelines, ohne dass benutzerdefinierte Skripts erforderlich sind.
  • Azure Command-Line Interface (CLI): ein Hilfsprogramm, mit dem Sie über die Befehlszeile mit Azure-Ressourcen, einschließlich Azure SQL-Datenbank, interagieren können. Sie können Azure CLI-Befehle in CI/CD-Pipelines verwenden, um die Datenbankbereitstellung, Konfiguration und Bereitstellungsaufgaben zu automatisieren, z. B. das Erstellen von Datenbankservern, das Bereitstellen von DACPAC-Dateien und das Ausführen von SQL-Skripts.
  • SQL Server Management Studio (SSMS): ein grafisches Tool, das von Microsoft zum Verwalten von SQL Server-Datenbanken bereitgestellt wird. Während SSMS in erster Linie für manuelle Verwaltungsaufgaben verwendet wird, kann SSMS auch Bereitstellungsskripts generieren und Datenbankbereitstellungen mithilfe des Assistenten zum Generieren von Skripts oder dem Feature "Datenbank in Microsoft Azure SQL-Datenbank bereitstellen" automatisieren.
  • Entity Framework (EF): eine programmgesteuerte Technik, die ORM-Funktionalität (Object-Relational Mapper, objektrelationale Zuordnung) unterstützt. Sie können EF-basierte Migrationsfunktionen nutzen, um Datenbankschemaänderungen zu verwalten und Datenbankmigrationen in CI/CD-Pipelines zu automatisieren. EF-Migrationen ermöglichen es Ihnen, Änderungen am Datenbankschema mithilfe von Code-first-Migrationen zu definieren und sie während des Anwendungsstarts automatisch anzuwenden.
  • Benutzerdefinierte Skripts: PowerShell-, Bash- oder SQL-Skripts, die Datenbankbereitstellungsaufgaben in CI/CD-Pipelines automatisieren. Diese Skripts können SQLCMD- oder Azure PowerShell-Module verwenden, um SQL-Skripts auszuführen, DACPAC-Dateien bereitzustellen oder programmgesteuert mit Azure SQL-Datenbank zu interagieren.