Frage

Lassen Sie uns sagen, dass wir eine kontinuierliche Integration Server. Als ich beim Check-in dem Post-Haken zieht den neuesten Code, führt die Tests, die Pakete alles. Was ist der beste Weg, um auch die Datenbankänderungen zu automatisieren?

Idealerweise würde ich einen Installer erstellen, die entweder eine Datenbank von Grund auf neu aufbauen könnte oder aktualisieren Sie eine vorhandene einige automatisierte Synchronisierung Methode.

War es hilfreich?

Lösung

Wenn Sie die Möglichkeit haben, zu definieren und die gesamte Datenbank-Management und db Erstellungsprozess zu steuern, haben einen ernsten Blick auf DB Geist - es ist mehr als nur ein Werkzeug - es ist ein Prozess ist.

Wenn Sie es mögen und es umsetzen können, werden Sie große Erträge auf sie - aber es ist ein bisschen wie ein „Alles-oder-nichts“ Art von Ansatz. Empfohlen.

Andere Tipps

Ich habe vor kurzem in ein Artikel , die von nutzen sein könnte.

Der Autor erklärt einige der besten kontinuierliche Integration Praktiken einschließlich Testung, Verarbeitung und Automatisierung.

Hier sind einige der wichtigsten Imbissbuden:

  • In vielen Geschäften Code-Einheit wird an der Stelle des begehen getestet. Bei Datenbanken ist es bevorzugt, auf einmal alle Unit-Tests läuft und in der Folge gegen eine QA-Datenbank vs Entwicklung, als Teil des Prüfschritt
  • Der Prüfschritt ist ein wichtiger Bestandteil jeder CI / CD-Verfahren. Testskripte, einschließlich Unit-Tests selbst, sollte auch in der Quellcodeverwaltung, an der Stelle des Build-Schritt und ausgeführt
  • extrahiert versioniert
  • Ziehen Daten aus der Produktion ist attraktiv als schnelle zweckmäßig, ist aber nie eine gute Idee
  • Der beste Ansatz ein Tool oder ein Skript verwendet, um schnell, wiederholt und zuverlässig synthetische Testdaten für Ihre transaktionalen Tabellen erstellen
  • Unit-Tests Ausführen manueller Zusammenfassung der Ergebnisse produzieren für den menschlichen Verzehr den Zweck der Automatisierung besiegt. Wir müssen die Ergebnisse lesbare Maschine, dass ein automatisierter Prozess, Zweig abbrechen lassen und / oder fortzusetzen.
  • einen CI-Prozess ausgeführt, die passieren 100% aller Tests erfordert ähnelt nicht CI überhaupt mit, wenn der Workflow-Pipeline atomar eingerichtet ist, bei einem Fehler zu stoppen, was es sein sollte. Um die Nadel einfädeln, haben Tests in Schwellen gebaut sollen, dass ein Fehler erhöhen wird, beruhend auf das% der Tests versagt oder in einigen Fällen, wenn bestimmte hohe Priorität Tests fehlschlagen.
  • Alle Prozesse sollen schließlich ein Boolesches Ergebnis von Pass erzeugen oder nicht, aber einig nicht-automatisierten Prozesse können leicht ihren Weg in die CI-Workflow-Pipeline (z Unit-Tests) finden. Software sollte Plug-n-Play in jede Workflow-Pipeline, bekannt Eingänge nehmen und Herstellung erwartete Ergebnisse -. Wie Passes scheitert
  • CI / CD-Prozess sollte sollte die Pipeline vs weiterhin Zyklus gesendet werden, sofort bei einem Fehler und eine E-Mail-Benachrichtigung abgebrochen werden.
  • Der CI-Prozess wieder nicht Zyklus sollte, bis alle Fehler in der letzten Build ist festgelegt. Bei einem Fehler soll das gesamte Team die Fehlerbenachrichtigung erhalten, darunter so viele Details, was wie möglich ist fehlgeschlagen.
  • Wenn eine Rohrleitung 1 Stunde dauert, von Anfang bis Ende, zu vervollständigen, einschließlich aller Tests, dann werden alle Build-Intervalle sollten nicht weniger als eine Stunde und alle neuen Commits und angewendet werden Warteschlange sollte auf die nächste gesetzt werden bauen.
  • Keine Klartext-Passwörter sollten in Automatisierungsskripts existieren

ich gegen die Verwendung einen DB-Backup als Entwicklungs Artefakt warnen würde, die meist CI Best Practices vorschlägt, dass Sie das Schema, Prozeduren, Trigger und Views als erstklassiges Entwicklungsartefakte zu verwalten. Die Nebenwirkungen sind, dass man noch einen Schritt nehmen weiter und nutzt sie, um eine neue Datenbank zu erstellen, wann immer Sie wollen, im Idealfall auch einige Daten, die in die Datenbank eingeschoben werden können.

Hier ist eine Klippe Noten Version nasse Füße zu bekommen, aber es gibt viele da draußen in diesem Raum:   http://www.infoq.com/news/2008/02/versioning_databases_series

ich einige der Ideen, wie die Scott Ambler auch hier hat, ist die Website gut, aber das Buch ist überraschend tief für eine solche schwierige Reihe von Problemen. http://www.agiledata.org/ http://www.amazon.com/exec/obidos/ASIN/0321293533/ambysoftinc

Red Gate ist eine ziemlich robuste Lösung und es funktioniert aus dem Kasten heraus. Aber das Beste ist, dass Sie es mit Ihrem kontinuierlichen Integrationsprozess integrieren können. Ich benutze es mit Msbuild und Hudson. schnell zu erklären, wie es funktioniert: http://blog.vincentbrouillet.com/post / 2011/02/10 / Datenbank-Schema-Synchronisation-mit-RedGate

Wenn Sie mehr darüber wissen müssen, fragen Sie sich bitte an

Der Red Gate Ansatz mit SQL Source Control und der SQL-Vergleichen Pro-Befehlszeile wird hier mit Code-Beispielen beschrieben: http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf

Troy Jagd schrieb einen Artikel über einfachen Vortrag mit dem Titel „Continuous Integration für SQL Server-Datenbanken“: http://www.simple-talk.com/content/article.aspx ? article = 1247

Haben Sie sich FluentMigrator ? Der Standard Download enthält Nant Skripts, die zu einem CI hinzuzufügen in wäre leicht. Kostenlos, Open Source und einfach zu bedienen. Arbeitet für eine Vielzahl von Datenbanken.

Die neueste Version (5.0) von DB Geist leidet nicht unter dem „Nicht-ASCII-Zeichen“ Problem (es bedeutet nur, dass die Datei UTF8 codiert) und es sollte genau das tun kann, was Sie brauchen.

Auch können die Werkzeuge tatsächlich eigenständigen die verschiedenen Funktionen (Scripting, Gebäude, zu vergleichen, die Modernisierung und Verpackung) auszuführen verwendet werden, wenn Sie wollen, es ist nur, dass sie alle zusammen mit einem vollen bietet somit End-to-End-Prozess machen der Gesamtwert größer ist als die Summe seiner Teile.

Im Wesentlichen, um Änderungen an das Schema, das Sie einzelne Objekterstellungsskripts aktualisieren und pro-Tabelle einfügen Skripte (für Referenzdaten), die nur unter Quellcodeverwaltung gehalten werden, wie Sie eine „Tag der“ grüne Wiese Datenbank entwickeln. Die DB Ghost-Tools werden verwendet, um die ganze Sache zu ermöglichen, indem diese Skripte in eine brandneue Datenbank Aufbau (mit Continuous Integration falls erforderlich) und dann zu vergleichen und eine Zieldatenbank aktualisieren, die eine Kopie der Produktionsdatenbank sein können. Dieses Verfahren erzeugt ein Delta-Skript, das auf der realen Produktionsdatenbank während der Go-Live verwendet werden kann.

Sie können sogar ein Visual Studio-Datenbank-Projekt erzeugen und fügen Sie es in irgendwelche Lösungen, die Sie im Moment haben.

Malc

Ich weiß, dass dieser Beitrag ist alt, aber wir haben eine neue Lösung, die den folgenden Ansatz nimmt:

  1. Entwickler Skript einzelne SQL-Änderungen und verpflichten sich, diese Quelle Steuerung.
  2. Unser Programm ( OneScript ) zieht die Änderung Skriptdateien aus     Quellensteuerung, filtert und sortiert sie und erzeugt eine einzige     Release-Skriptdatei.
  3. Die Release-Skriptdatei wird dann auf einem         Datenbank Release zu tun.

Unsere Homepage hier diesen Prozess im Detail erklärt und hat einen Link zu einem Beispiel, das diese tut Schritte automatisch von einem Subversion Haken. So bald nach einem Commit, erhält der Entwickler eine E-Mail zu sagen, wenn die Freigabe erfolgreich war oder Fehler aufgetreten ist. Der Powerscript-Code enthalten ist.

Disclaimer -Ich ist in der Firma arbeiten, die OneScript macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top