Umgebungen verwalten
Ich denke, Sie möchten definitiv nicht zu einer einzigen Datenbankversion gezwungen werden. Sie haben genügend Entwickler, sodass Sie zwangsläufig über mehrere Entwicklungsarbeitsabläufe und Anforderungen verfügen, um Patches unabhängig von den Entwicklungsarbeitsabläufen auf die aktuelle Produktionsumgebung anzuwenden.
Sie können Liquibase oder einen manuellen Prozess verwenden, um Patch-Skripts zum Aktualisieren von Versionen zu erstellen. Ich empfehle, mit einem manuellen Prozess zu beginnen und das Schema-Vergleichstool für die Qualitätssicherung der Patches zu verwenden. Eine saubere, automatisierte und transparente Synchronisation einer nicht trivial komplexen Datenbank ist etwas utopisch.
Ihr zentrales Datenmodell kann in jedem beliebigen System gespeichert werden. Ich habe alles von mühsamen Enterprise-Repository-Tools verwendet, um Tabellenskripte zu erstellen. Das Erstellen von Tabellenskripten funktioniert gut mit normalen Versionsverwaltungswerkzeugen wie Subversion, und nicht alle Repository-Werkzeuge leisten gute Arbeit bei der Versionsverwaltung.
Unabhängig davon, was Sie als Stammdatenmodell-Repository verwenden, benötigen Sie einen recht sauberen Mechanismus für die Bereitstellung einer Umgebung aus diesem Modell. Es sollte so strukturiert sein, dass Rollouts in eine Umgebung einfach sind. Sie benötigen auch einen Mechanismus zum Patchen von einer veröffentlichten Version zur nächsten.
Was ich getan habe
Ich habe in der Vergangenheit Folgendes getan, als ich Entwicklungsumgebungen verwaltet habe. Es ist keine besonders hohe Technologie, aber es ist für die Versionskontrolle und automatisierte Builds geeignet, sodass es einfach ist, eine Umgebung auf eine bestimmte Version auszurollen, und es ist sehr praktisch, eine große Anzahl von Umgebungen zu verwalten.
Zentrales Repository verwalten: Dies kann eine Reihe von Skripten zur Datenbankerstellung sein, die in einem Versionskontrollsystem gespeichert sind, oder ein Repository-Modell in einem Datenmodellierungstool. Treffen Sie Ihre Wahl. Dieses Modell sollte über einen Erstellungsmechanismus verfügen, mit dem eine Umgebung aus den Skripten ohne großen manuellen Eingriff bereitgestellt werden kann.
Wenn Sie viele Referenzdaten haben, benötigen Sie einen Lademechanismus dafür. Je nachdem, wie Sie dies tun möchten, können Sie dies in einer Datenbank oder in einer Reihe von Dateien aufbewahren. Der Vorteil von Dateien ist, dass sie auch über dasselbe Versionskontrollsystem wie Ihre Codebasis versioniert und beschriftet werden können. Eine Reihe von CSV-Dateien und Massenladeskripten in einem Quellcodeverwaltungs-Repository können dies problemlos tun.
Eine Möglichkeit zum Bereitstellen von Entwicklungsumgebungen besteht darin, Sicherungen der auf die entsprechende Version gepatchten Produktionsdatenbank zu erstellen und sie für Entwickler zur Wiederherstellung in einer Entwicklungsumgebung verfügbar zu machen.
Einfacheres Rollout: Wie bei jedem CI-Erstellungsprozess sollte die Datenbank über ein einziges Skript bereitgestellt werden können. Richten Sie es so ein, dass Datenbankverbindungen parametrisiert werden können oder das Skript ortsunabhängig ist und nur über die Verbindung ausgeführt werden kann.
Patch-Skripte: Sie benötigen Rollforward- und wahrscheinlich Rollback-Skripte für jede veröffentlichte Version.
Erstellen von Testumgebungen aus dem Repository-Modell: Dadurch wird sichergestellt, dass die Entwicklung in Umgebungen, die nicht mit dem Repository synchron sind, in den Test einbezogen wird.
Testen Sie den Bereitstellungsprozess: Automatisierte Patch-Skripts, die jedoch erstellt wurden, sollten testbar sein. Schemavergleichstools sind dafür recht gut geeignet, auch wenn Sie sie nicht zum Generieren der Patch-Skripte verwenden.
Erstellen Sie eine Referenzumgebung mit dem von Ihnen getesteten Repository-Modellbuild
Erstellen Sie eine Rauchtestumgebung mit einem Backup Ihrer Produktionsversion oder einem Build, der auf der aktuell veröffentlichten Version basiert.
Führen Sie das Patch-Skript für die Rauchtestumgebung aus.
Verwenden Sie das Schema-Vergleichstool, um die Rauchtestumgebung mit der Referenzumgebung zu vergleichen. Das Patch-Skript sollte dazu führen, dass die beiden Datenbanken identisch sind, damit Sie Unterschiede untersuchen können.
Was ich an diesem Prozess mag
Dies ist ein bisschen schwergewichtig und wurde für den Einsatz in recht bürokratischen und undurchsichtigen Produktionsumgebungen entwickelt. Es hat jedoch folgende Stärken:
Entwickler können basteln, wo sie müssen.
Es können mehrere Zweige und Entwicklungsströme untergebracht werden.
Die Bereitstellungsskripte selbst können auf wiederholbare Weise getestet werden. Dies ist sehr hilfreich, um Deployment Bunfights zu beenden, da die Wiederholbarkeit demonstriert werden kann.
Die Schemavergleichstools stellen die Qualitätssicherung für die Bereitstellung selbst bereit.
Die Tests werden immer anhand der erwarteten Veröffentlichungen durchgeführt. Dadurch werden Probleme behoben, die sich aus nicht synchronen Umgebungen ergeben.
Durch die Bereitstellung basierend auf Repository-Modellen und Patch-Skripten wird nicht versehentlich unkontrollierter Müll aus Entwicklungsumgebungen in die Produktion migriert.
Ein Großteil des Prozesses kann automatisiert werden, obwohl es häufig wünschenswert ist, die Bereitstellungs-Patch-Skripts manuell vorzubereiten und zu testen.
Umgebungen sind billig und einfach zu installieren, ohne dass Sie durch die Rahmen springen müssen.
Entwickler sind gezwungen, ein System zu entwickeln, das sich für einen einfachen Build- und Bereitstellungsprozess eignet.
Entwickler sind gezwungen, grundlegende Datenbankverwaltungsaufgaben zu erlernen, aber Test- und Produktionsumgebungen sind vor Fehlern durch Unachtsamkeiten geschützt.
Wie es Ihren Anforderungen entspricht
Entwickler verfügen über lokale Kopien von Daten, mit denen Entwicklungscode ausgeführt werden kann. Mithilfe
der Bereitstellungsskripts oder DB-Images können sie eine Umgebung von jeder verfügbaren Version aus einrichten.
Die Datenbankstruktur kann auf einen vorherigen Änderungssatz zurückgesetzt werden.
Wieder sortiert nach den Bereitstellungsskripten. Entweder durch DDL oder durch Testen von Datenbank-Backup-Images, die über einen kontrollierten Prozess erstellt wurden, können Entwickler eine Umgebung mit einer bestimmten Version aufrufen, die Sie haben.
Kann Änderungen an neuen Feature-Schemas von Änderungen an Schemadesign-Fixes trennen
Patches für eine gemeinsame Version können in einem separaten Zweig im SVN-Baum verwaltet werden. Wenn Datenbanksicherungen als Referenzumgebungen verwendet werden, müssen sie an einem Ort mit der gleichen Ordnerstruktur wie die Verzweigung der Versionsverwaltungsprojekte gespeichert werden.
Kann die Datenbankstruktur zum Testen lokal ändern
Der einfache Bereitstellungsprozess ermöglicht es Entwicklern, einen lokalen Status für eine Umgebung zu erstellen oder eine Referenzumgebung aufzurufen, mit der Vergleiche durchgeführt und Änderungssätze vorgenommen werden können.