Hintergrund
Ich arbeite daran, einen neuen Entwicklungsprozess für ein kleines Web-Team von etwa 4 Programmierern und 4 Designern zu entwickeln, mit dem offensichtlichen Potenzial, das Team in Zukunft zu vergrößern. Unser Produkt ist eine zentrale Anwendung, die Kundenwebsites unterstützt, die wir auch entwerfen und hosten.
Bisher haben wir alle über FTP auf einem Dev-Server mit einer einzigen Dev-Datenbank gearbeitet. Es hat eine Weile "funktioniert" * , aber wir bewegen uns in eine neue Richtung, also ist es Zeit, unseren Prozess zu reifen.
Wir verwenden Percona Server 5.5, dies sollte jedoch datenbankunabhängig sein, um die Kosten niedrig zu halten.
Ziele :
Ich möchte einen kontinuierlichen Integrationsprozess (Continuous Integration, CI) für die Datenbankentwicklung erstellen, wobei Folgendes zu beachten ist:
- Entwickler verfügen über lokale Kopien von Daten, mit denen Entwicklungscode ausgeführt werden kann
- Kann die Datenbankstruktur auf einen vorherigen Änderungssatz zurücksetzen
- Kann Änderungen an neuen Feature-Schemas von Änderungen an Schemadesign-Fixes trennen
- Kann die Datenbankstruktur zum Testen lokal ändern
Anfangskonzept
Ich habe unten einen Prozess mit SVN und LiquiBase skizziert, der jedoch vollständig entfernt wurde #4
.
- Erstellen Sie einen Entwicklungszweig aus dem Stamm
- Der zentrale "Development" -DB-Server wird vom "Development" -Zweig ausgeführt
- Lokale Entwickler sind als Slaves für den Entwicklungszweig eingerichtet (siehe
#1
oben).- Liquibase-Changesets werden regelmäßig an den Entwicklungszweig übergeben, der einen Post-Commit-Hook ausführt, um die zentrale Entwicklungsdatenbank zu aktualisieren (die auf die lokalen Computer herunterrinnt, die als Slaves für diesen Entwicklungsserver ausgeführt werden
#2
).- Wenn Features oder Schemakorrekturen für die Qualitätssicherung bereit sind, führt DBA (ich) die entsprechenden Änderungen aus dem Entwicklungszweig in Trunk zusammen. Durch diesen Vorgang wird ein SQL-Skript erstellt, das auf einen Staging-Datenbankserver angewendet wird.
- Der Staging-Server sollte TRUNK widerspiegeln, das dieselbe Struktur wie die Produktion haben sollte, sowie Änderungen, die sich in der Qualitätssicherung befinden
- Führen Sie nach dem Ausführen des SQL-Skripts auf dem Staging-Server eine Qualitätssicherung für die Änderungen durch.
- Wenn alles gut aussieht, markieren Sie die Struktur. Dadurch wird das .sql-Skript generiert, das in der Produktion manuell vom DBA ausgeführt wird (für Zeiten außerhalb der Spitzenzeiten, falls erforderlich).
Dieser Prozess setzt voraus, dass alle Entwickler denselben 'Entwicklungs'-Zweig ausführen, was bedeutet, dass es zu einem bestimmten Zeitpunkt nur eine Version des Datenbankschemas gibt (nicht sicher, ob ich dies möchte).
Dies bedeutet auch, dass Änderungen am Schema nicht lokal getestet werden können und sich auf andere Entwickler auswirken können, wenn sie nicht ordnungsgemäß ausgeführt werden. In unserer Umgebung fügen Entwickler möglicherweise neue Tabellen hinzu, ändern jedoch nur selten die vorhandene Struktur. Als DBA werden Design-Korrekturen von mir vorgenommen. Aber die Unfähigkeit, Fixes lokal zu testen, ist mein größtes Problem.
Wie kann der obige Prozess optimiert werden, um lokale Entwicklung zu ermöglichen, während eine relativ aktuelle Kopie der Daten (wie durch Replikation in meinem vorgeschlagenen Prozess bereitgestellt) beibehalten wird? Ich benötige nicht einmal die letzte Woche, um die Daten aktuell zu halten.
* Mit "gearbeitet" meine ich, es hat gereicht, war aber eine PITA.