So synchronisieren Sie Bereitstellungen (insbesondere von Datenbankobjektänderungen) in mehreren Umgebungen [doppelt]


7

Ich bin der DevOps-Ingenieur und ein Software-Ingenieur in einem Team, in dem die Entwickler vor Monaten von einer zentralen Oracle-Datenbank zu einer Datenbank auf einer CentOS-VM auf ihren einzelnen Laptops gewechselt sind. Der Schritt von einer zentralen Datenbank bestand darin, die Abhängigkeit von den Datenbankadministratoren zu verringern und Probleme zu beseitigen, die sich aus inkonsistenten Daten ergaben.

Der Plan für die Freigabe und Sicherstellung der Synchronisierung der Datenbank mit allen im Team war, dass jede Person Änderungsskripte für alle freigegeben wird. Das Problem ist, dass wir Skype für die Kommunikation verwenden (wir richten Slack nur ein, müssen es aber noch vollständig verwenden), und obwohl die Leute manchmal den Text von DB-Änderungsskripten veröffentlichen, könnte er von einigen übersehen werden. Das andere Problem ist, dass einige Entwickler die Änderungen nicht veröffentlichen. Darüber hinaus werden neue Versionen in der Produktion bereitgestellt, ohne in den Test- und Demo-Umgebungen bereitgestellt zu werden.

Dies war eine ernsthafte Herausforderung für uns, insbesondere für mich, der in letzter Zeit dafür verantwortlich war, dass unsere Demo-Bereitstellungen mit den Produktionsbereitstellungen synchronisiert wurden. Die meisten Synchronisierungsprobleme hängen mit der fehlenden Synchronisierung der Datenbank aufgrund fehlender Änderungsskripte oder fehlender DB-Objekte zusammen. Oracle ist unsere bevorzugte Datenbank.

Eine typische Bereitstellung in der Demo-Umgebung ist ein sehr schmerzhafter Prozess, bei dem eine Anwendung getestet wird. Wenn Probleme aufgrund fehlender DB-Tabellenspalten, Funktionen und gespeicherter Prozesse auftreten, müssen wir nach den fehlenden DB-Objekten suchen, sie auf die DB anwenden und dann Fahren Sie fort, bis alle Probleme behoben sind.

Wie kann ich dieses Problem lösen, um reibungslose, schmerzlose und weniger zeitaufwändige Bereitstellungen sicherzustellen? Kann die Migration unserer Anwendungen auf Docker bei den Problemen mit der DB-Synchronisierung und der damit verbundenen mangelnden Disziplin der Entwickler helfen? Welchen Prozess können wir einführen, um uns in diesem Bereich zu verbessern?

Antworten:


9

Ich würde das Schema-Management in die Anwendung selbst (oder zusammen mit ihr) integrieren.

Jede Änderung am Schema sollte entlang des Anwendungscodes festgeschrieben (und daher auch mit Tags versehen) werden.

In dieser Frage sind bereits eine Reihe von Möglichkeiten aufgeführt: Welche Methoden oder Tools ermöglichen die kontinuierliche Bereitstellung von Datenbanken?

Wenn Sie mit dieser Art von Tools eine In-Memory-Datenbank wie h2 oder eine zentrale Datenbank verwenden und die Anwendung beim Start die Schemaversion (in der Datenbank gespeichert) überprüfen lässt, können Sie beim Start der Anwendung ein aktualisiertes Datenbankschema abrufen.

Dies wird Ihr Disziplinproblem nicht lösen und möglicherweise neue Probleme verursachen, da dies normalerweise mit einer strengen Versionierung des Schemas verbunden ist. Die Durchsetzung der Version kann mit Pre-Commit-Hooks erfolgen, aber das ist eine harte Arbeit.


4

In unserem Unternehmen verwalten wir unseren Anwendungscode in einem VCS (Git) und die meisten Anwendungen, mit denen wir arbeiten, installieren ihre Kerndatenbank in den mit der Anwendung gelieferten Setup-Skripten.

Wenn wir eine Anwendung für einen unserer Kunden erweitern oder anpassen müssten, bei der die Datenbank erweitert oder Datenbankanpassungen vorgenommen werden müssen, wird unser Code mit einem Setup-Skript versehen, das die Datenbankoperationen über die Datenbankschicht / den Wrapper der Anwendung ausführt /Treiber.

Auf diese Weise ruft jeder Entwickler, der diesen Code auscheckt, diese Datenbankänderungen ab, sobald der Code in das VCS-Repository eingefügt wurde. Auch nach dem Zusammenführen des Codes werden diese Datenbankänderungen in jeder Umgebung (Test-, UAT- und Produktionsknoten) ausgeführt, und auf diese Weise werden alle Datenbankänderungen reibungslos ausgeführt.

Dies ist eine einfach zu implementierende Methode. Sie können auch in datenbankspezifische Tools zur Quellcodeverwaltung eintauchen, wenn Sie erweiterte Verwaltungsmöglichkeiten benötigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.