So stellen Sie ein: Datenbank-, Quell- und Binäränderungen in einem Patch?

8

Ich bin Teil eines Entwicklungsteams, das an vielen CMS-basierten Projekten arbeitet und Systeme wie Joomla und Drupal verwendet.

In unserem Entwicklungsprozess werden alle unsere Codeänderungen innerhalb von Git verwaltet. Am Ende eines Sprints erstellen wir einen DIFF , den wir über patch auf die Live-Site anwenden können.

Das Problem ist, dass die Änderungen meistens

sind
  • Datenbankschemaänderungen
  • Datenbankdatenänderungen
  • Quellcode ändert sich
  • Binärdatei ändert sich (wie Bilder)

Git Diff handles Quellcode ändert sich wunderschön. Binäre Dateien sind nur in der Diff enthalten, außer als Hinweis darauf, dass sich die Dateien geändert haben.

Datenbankschema-Änderungen und Datenbankdatenänderungen sind ein Chaos.

Ich war am Wandern, wenn etwas wie ein vereinheitlichtes Flecken-System existiert, das verwendet werden könnte, um alle diese Änderungen in einem Flecken zu deployen.

Die Frage ist also, "Gibt es ein System, mit dem all diese Änderungen in einer Aufnahme umgesetzt werden können?

Idealerweise würde dieses System es ermöglichen, einen Trockenlauf wie ein Patch durchzuführen, aber für alle 4 Datentypen.

Bearbeiten : Ich danke Ihnen allen für das Feedback, das Sie mir gegeben haben, es war ein Ausgangspunkt für meine Forschung auf diesem Gebiet.

Hier ist was ich bis jetzt gefunden habe:

  1. Es ist schwierig, php-basiert zu implementieren Anwendungen mit Linux-Verpackung System, weil die Änderungen an der Projekt passiert eher iterativ dann als Releases.

  2. Es wäre möglich, dbconfig zum Bereitstellen von Änderungen an a zu verwenden Projekt, aber das Problem ist mysql db diffs erzeugen (Schema und Daten)

  3. Was wirklich fehlt für die Bereitstellung von php-basierten Anwendungen ist ein Deployment Manager, der würde auf dem Server installiert werden und würde sei die Schnittstelle für die Bereitstellung der Patches

Ich habe eine Google Wave zu diesem Thema gestartet und daraus eine Menge Informationen generiert. Wenn jemand diese Welle lesen möchte, lass es mich wissen und ich werde dich hinzufügen.

    
Taras Mankovski 24.11.2009, 16:59
quelle

4 Antworten

2

Für die Handhabung der Installation und Aktualisierung unserer Anwendung verwenden wir das Debian-Verpackungssystem . (.deb-Paket)

Kontext: Wir machen J2EE + Flex-Anwendung. Versand und Verwaltung über ein VPN. Also nicht so weit von dir entfernt.

Neuinstallation und Aktualisierung für eine Version zu einer anderen erfolgt über puppet (ein System zur Automatisierung von Systemverwaltungsaufgaben: Er installiert unser .deb)

Im .deb haben wir

  1. unser kompilierter Quellcode
  2. das Schema der Datenbank (behandelt von [db-config] [1])
  3. binäres Zeug
  4. wie installiere ich apt alle anderen Anwendungen benötigt (mysql, tomcat ...)

= Alles für eine neue Installation

Wir fügen auch die Informationen hinzu, um von einer Version zu einer anderen zu gelangen

  1. das Skript zum Aktualisieren der Datenbank (für jede Version)
  2. neue Binärdatei
  3. neue Sachen zum Start am Rechner (zB: vor einigen Wochen haben wir einen activeMQ Server hinzugefügt)

= & gt; Sobald das .deb korrekt erstellt wurde, können wir nahtlos in einem Vorgang installieren oder upgraden. (Es wird automatisch ohne Aufforderung gemacht).

Theire ist ein .deb pro realease, jedes .deb hat eine Versionsnummer und eine Signatur. Sie können ein beliebiges unserer .deb-Dateien auswählen und eine Neuinstallation oder ein Upgrade von der aktuellen Version auf die von Ihnen gehaltene Versionsnummer durchführen.

Das .deb ist in unserem kontinuierlichen Integrationssystem. (Wir bauen jede Stunde ein .deb, als ob wir gerade eine neue Version veröffentlichen würden)

Was sind die Vorteile?

  • Installieren / upgraden automatisch, zuverlässig.
  • Rollback einer Version
  • run dry wird nativ unterstützt

In Ihrem konkreten Fall

%Vor%

Datenbank = & gt; Sie müssen ein Migrationsskript schreiben. Eine für jede Version. (Beispiel: 1.2-update.sql 1.3-update.sql)

Quellcode und binary = & gt; fügen Sie sie hinzu, sagen Sie, in der Version müssen sie kopiert / benutzt werden

Edit: Ich bin mir nicht sicher über den Quellcode. Wir machen das mit kompiliertem Code ...

Einige Links zum Start:

Ссылка

Ссылка (auf Französisch)

[1]: Datei dbconfig

[1]: Ссылка debian

    
Antoine Claval 27.11.2009, 17:00
quelle
1

Ich glaube nicht, dass Sie einen ausfallsicheren Mechanismus finden werden.

Ich empfehle Ihnen, wenn möglich, die Kompatibilität mit der aktuell veröffentlichten Quelle zu berücksichtigen, wenn Sie Schema- / Datenänderungen vornehmen.

Auf diese Weise können Sie ein v. einfaches Tool erstellen, das Datenbankskripte ausführt, die an einen bestimmten svn-Speicherort gebunden sind (Sie möchten keine Änderungen an Datenbankänderungen vornehmen, da Sie bei Bedarf weitere Anweisungen benötigen).

Mit dem oben Gesagten können Sie einen einfachen Befehl haben, der die Datenbankänderungen ausführt, dann die binäre & amp; Quellcodeänderungen.

Für die Datenbank gibt es auch die Option von Schema- und Datenvergleichstools, die zum Vergleichen von Umgebungen & amp; vergewissern Sie sich, dass in den Änderungsskripten nichts Unerwartetes fehlt - Sie könnten auch die Änderungsskripte generieren, aber wie gesagt, Sie möchten wirklich sicherstellen, dass die aktuelle Quelle nicht unterbrochen wird.

    
eglasius 27.11.2009 16:22
quelle
0

Sie können ein Tool erstellen, um die Migrationen schmerzfrei durchzuführen - ähnlich wie PeopleSoft Patch Upgrade Assistant.

Es ist im Grunde eine eigenständige ausführbare Datei, die eine "Upgrade-Vorlage" liest und Aufgaben ausführt. Die Upgrade-Vorlage beschreibt deklarativ die Upgrade-Aufgaben oder "Schritte". Die Schritte könnten - Kopieren (zum Sichern oder Verschieben der vorkompilierten Objekte wie Klassen und andere Binärdateien), Datenbank (zum Ändern von Schemaelementen), SQL-Skripte (zum Laden oder Umwandeln aktueller Daten) sein. Die Schritte werden einige Prädikatenlogik-fähig haben - wenn es das ist, tue dies, sonst überspringe es und gehe zum nächsten usw.

Die Vorlage ist normalerweise eine XML-Datei. Es enthält auch manuelle Schritte mit Anweisungen für manuelle Aktionen. Jeder Schritt gibt auch an, ob es wiederherstellbar ist oder nicht. Es würde auch validieren, ob der Schritt erfolgreich war oder nicht.

Es kann möglich sein, ein Open-Source-Projekt um diese Anforderung herum zu haben, was durchaus üblich ist.

    
srini.venigalla 27.11.2009 17:39
quelle
0

Sie müssen Git-Commit-Objekte in der lokalen Datei speichern und sie dann in einen anderen Repo / Zweig importieren.

    
vitaly.v.ch 01.12.2009 11:12
quelle

Tags und Links