Was ist die beste Bereitstellungsstrategie?

82

Zum Einrichten eines Magento-Shops müssen nicht nur selbstinstallierbare Erweiterungen entwickelt werden, sondern es sind auch viele manuelle Eingaben erforderlich, z. B. das Erstellen von Attributen, Kategorien, Produkten, CMS-Seiten für Preisregeln usw. die Änderungen an der Systemkonfiguration.

Ich möchte Sie dabei unterstützen, die beste Strategie für die Bereitstellung eines Magento-Stores von der Entwicklung über die Bereitstellung bis hin zur Produktionsumgebung zu skizzieren.

Eine meiner Strategien ist das Schreiben eines "Bereitstellungsmoduls", mit dem die oben genannten Entitäten programmgesteuert erstellt werden. Dies ist jedoch eine sehr zeitaufwendige Aufgabe, und manchmal scheint es mir ein wenig übertrieben zu sein.

Vor kurzem habe ich begonnen, mit Selenium IDE Admin-Aufgaben zu reproduzieren, aber die Zeit, die zum Einrichten aller Testsuiten erforderlich ist, ist nicht weit von der oben genannten Zeit entfernt.

Eine optimale Lösung könnte die Verwendung eines Moduls sein, mit dem Sie einen Schnappschuss eines Magento-Systems erstellen und auswählen können, was Sie bereitstellen möchten.

Damit:

  • Was ist Ihre Strategie für die Bereitstellung?
  • Gibt es ein Modul, das einen Schnappschuss eines Magento-Systems erstellen kann, mit dem Sie auswählen können, was Sie bereitstellen möchten?
  • Wenn es ein solches Modul nicht gibt und es eine vernünftige Lösung darstellt, ist jemand daran interessiert, seinen Beitrag zur Entwicklung dieses Moduls zu leisten?

Danke!

Alessandro Ronchi
quelle
Dies könnte auf die Notwendigkeit eines anderen Tags oder einer anderen Tag-Kategorie hinweisen. Sind Sie ein Einzelhändler oder suchen Sie als Dienstleister allgemeine Anregungen? In letzterem Fall müsste jede Antwort mit "hängt davon ab, wie viel Kontrolle der Client über die Entitätsdaten wünscht" gespickt werden.
Benmarks
Mein Standpunkt ist der eines Entwicklers, der einem Entwicklerteam angehört. Angenommen, ich entwickle einen Abschnitt, für dessen Funktion Daten erforderlich sind, beispielsweise eine Kategoriestruktur. Ich erstelle die Struktur über Admin, mache den Code und pushe meinen Code. Ich frage mich, ob die beste Strategie darin besteht, auch Code zu schreiben und zu pushen, der die erforderliche Kategoriestruktur erzeugt. Was ist, wenn meine Kategoriestruktur oder Einstellungen mit denen anderer Entwickler, die ihre eigenen Einstellungen vorgenommen haben, in Konflikt stehen? Wie gehe ich mit Konflikten um? Das ist mein Punkt.
Alessandro Ronchi
@AlessandroRonchi Dies ist ein strittiger Punkt und ein Konflikt, der niemals auftreten sollte. Ihre Kategoriestruktur sollte sich nicht leichtfertig ändern. Daher sollte ein Entwickler keine wesentlichen Änderungen an Ihrer Struktur vornehmen, ohne dass der / die andere (n) davon Kenntnis hat. In diesem Fall müssen Sie sich mit Ihrer Kommunikation zwischen Entwicklern befassen. Im Allgemeinen muss die Kategoriestruktur für eine Website vom ersten Tag an festgelegt werden und muss nie wieder geändert werden. Sie muss nur ergänzt werden. Wenn Sie es ändern müssen, haben Sie es beim ersten Mal nicht richtig ausgewertet.
ProxiBlue
@dedmeet In der Welt, die ich kenne und in der ich arbeite, ändern sich die Dinge leider jeden Tag. Kunden ändern ihre Meinung, Entwickler ändern ihre Meinung, schwarze Schwäne treten auf. Ich muss auf Veränderungen vorbereitet sein; Selbst wenn die Kategoriestruktur nicht vom ersten Tag an geändert werden muss, handelt es sich nur um einen kleinen Teil des gesamten Teils, und der gesamte Teil ist ein "work in progress" -Projekt, das geändert werden soll, um Dinge zu erledigen.
Alessandro Ronchi
Okay, selbstverständlich arbeiten wir in einem sich ständig verändernden Umfeld, aber ich bin trotzdem der Meinung, dass ein Kategoriestrukturkonflikt nicht auftreten sollte. Es sollten nicht mehrere Zweige existieren, bei denen jeder die Struktur ändert, was nur zu Problemen und zur Verschwendung von Entwicklungszeit führt. Warum verbringt Entwickler Zeit damit, Strukturänderungen vorzunehmen, während Entwickler b das Gleiche tut, eine andere Struktur zu verändern, und beide treiben ihre Arbeit voran? Wenn sich die Struktur ändern muss, müssen alle am Projekt beteiligten Entwickler in den Prozess der Festlegung der neuen Struktur einbezogen werden. Können Sie mir ein Beispiel geben, um zu verstehen, wann dies passieren kann?
ProxiBlue

Antworten:

39

Meine Meinung ist, alles zu schreiben. Normalerweise habe ich ein Basis-Konfigurationsmodul für alles, was funktional nicht direkt mit einem bestimmten Modul zusammenhängt. (Beispiel: Benutzerdefinierte URL wird für die vorherige Site-URL in die neue Site-URL umgeschrieben)

Die Denkweise dahinter ist, dass, wenn die Site mit einer neuen Datenbank neu installiert werden muss, alles so zurückkommt, wie Sie es hatten. Dies hilft auch darin, dass ich die uat-Site regelmäßig mit einer Kopie der Live-Datenbank aktualisiere. Die Module in uat arbeiten dann weiter, während sie sich wieder in ihre Konfiguration einfügen.

Änderungen an Portokosten, Warenkorbregeln usw. (im Grunde genommen Dinge, die Kunden selbst in admin verwalten) gelten als "flüchtige Daten" und werden nicht in Skripten erfasst. Dies beinhaltet Produktdaten. Der Kunde hat die Option und wird aufgefordert, neue Importe zuerst auf der uat-Site zu testen.

Kunden werden angewiesen, keine Attribute zu erstellen, sondern diese über eine Ticketanfrage erstellen zu lassen. Auf diese Weise kann ich auch Informationen darüber sammeln, was der Client für das Attribut beabsichtigt, und manchmal habe ich einen besseren Vorschlag oder kann besseren Code erstellen, da ich weiß, welche Attribute vorhanden sind. Außerdem kann ich anhand auswählbarer Attribute sicherstellen, dass die Daten korrekt sind reinigen.

Ja, Skripterstellung dauert länger, aber es wird viel länger dauern, um die Konfigurationseinstellungen einer ganzen Site später manuell neu zu erstellen. Es kann auch peinlich sein, wenn Sie etwas vergessen und verursachen, dass die Site nicht richtig funktioniert, oder wenn ein neuer Entwickler auf einer lokalen Site arbeitet, auf der einige wichtige Konfigurations-Setups fehlen.

ProxiBlue
quelle
1
Ich stimme dedmeet zu. Wenn Sie zum ersten Mal lernen, wie Sie alle Updates skripten, ist dies möglicherweise eine anfängliche Arbeit, aber wenn Sie Konfigurationsupdates für 3-4 Entwickler, Staging, UAT und Live manuell anwenden müssen, wird die Koordination und die eigentliche Arbeit viel länger dauern. Unser Workflow ist ziemlich ähnlich: Wenn die Konfiguration für eine (wiederverwendbare) Erweiterung benötigt wird, legen Sie sie dort ab. Wenn die Konfiguration clientspezifisch ist, legen Sie sie in einer projektspezifischen Erweiterung ab. Eine der wenigen Ausnahmen sind Wagenregeln, deren Aktualisierung / Erstellung keinen Spaß macht.
Matthias Zeis
1
Ich habe gerade ein Modul veröffentlicht, mit dessen Hilfe das erforderliche Konfigurationsskript erstellt werden kann, wodurch die weltliche Arbeit entfällt, die darin besteht, die Installationsskripten manuell zu erstellen. Das Modul verwendet eine Rasteranzeige der Tabelle core_config_data, um die Auswahl der zu exportierenden Konfigurationswerte zu ermöglichen. Machen Sie mein Leben ein bisschen einfacher, und ich hoffe, dass es für andere funktionieren wird. proxiblue.com.au/blog/magento-config-data-generator
ProxiBlue
27

Ich hatte vor einigen Monaten einige Nachforschungen angestellt. Hier sind die Websites, auf die Sie verweisen können.

Magento-Basis-URLs und
Entwicklungs- / Staging-Installationen Magento-Entwicklung und -Bereitstellung
Magento Git-Handbuch und Arbeitsablauf
Schnelleres Dumping einer Magento-MySQL-Datenbank für Branching

Oğuz Çelikdemir
quelle
1
Vielen Dank, ich werde sie alle lesen und mit einigen Überlegungen zurückkommen.
Alessandro Ronchi
Ich habe gelesen, alle geben Ressourcen; Einige kannte ich bereits, andere, die ich nicht kannte, sind sehr interessant. Keiner von ihnen ist die Lösung für mein Problem, und ich habe beschlossen, eine Erweiterung zu entwerfen, die versucht, meine Bedürfnisse zu erfüllen. Vielen Dank an alle, die mir wertvolle Ratschläge gegeben haben. Ich hoffe, dass ich hier mit einigen Ergebnissen zurückkehren kann.
Alessandro Ronchi
Lieber Alessandro, ich würde gerne deinen Weg sehen, bei dem ich auch komfortablere Technik suche!
Oğuz Çelikdemir
18

Ich möchte mich bei Ihnen allen bedanken, da mich Ihre Überlegungen dazu inspiriert haben, eine Erweiterung mit dem Namen "Mageploy" zu entwickeln, mit der das Problem der synchronen Verwaltung verschiedener Umgebungen gelöst werden soll.

http://www.mageploy.com

Mageploy muss noch erweitert, gut dokumentiert und vollständig getestet werden, auch wenn ich es bereits in einigen Projekten mit einigen Vorteilen verwende.

Es ist Open Source und jede Hilfe oder jeder Vorschlag wird geschätzt.

Grüße

Alessandro Ronchi
quelle
7

In Bezug auf das Installieren von Skripten und das Erstellen von Entitäten bin ich der Ansicht, dass ein Modul, wenn es von einem Modul benötigt oder erwartet wird, als Teil eines Installationsskripts erstellt werden sollte.

In letzter Zeit verwenden wir in Bezug auf Entwicklung / Phase / Produktion die Staging-Site als Masterkopie der Datenbank für Inhalte, da dies bedeutet, dass der Client zusammenarbeiten kann. In der Vergangenheit war es wahrscheinlich das größte Problem, den Inhaltseintrag mit dem Kunden zu koordinieren, insbesondere im Hinblick auf das Hochladen von Produkten.

Wie haben Sie gedacht, dass der Schnappschuss funktionieren würde? Ich denke, in einer idealen Welt hätten Sie ein Tool, das den Unterschied zwischen zwei Datenbanken für bestimmte Typen (Produkte, Kategorien, CMS usw.) aufzeigt und es Ihnen ermöglicht, die Änderungen ineinander zu verschmelzen, aber mir ist nichts verfügbares wie Das.

Paul
quelle
1
"In Bezug auf das Installieren von Skripten und das Erstellen von Entitäten bin ich der Ansicht, dass, wenn es von einem Modul benötigt oder erwartet wird, es als Teil eines Installationsskripts erstellt werden sollte." Dies ist der wichtigste zu berücksichtigende Punkt und gilt für Konfigurationseinstellungen. Mein schneller Test: Wenn ich einen neuen Entwickler brauche, um das Repo zu klonen und die Umgebung zu installieren, welche Voraussetzungen müssen erfüllt sein, damit das System funktioniert?
Benmarks
Die gemeinsame Nutzung einer Staging-Site für Clients zur Zusammenarbeit bei der Konfiguration ist theoretisch großartig. In der Praxis erzählen Kunden nicht alles, was sie in 99% der Fälle geändert haben, was es einfach macht, etwas zu vermasseln. Wir können Kunden erlauben, an Sachen wie Wagenregeln, Kategorien, Produkten oder Ähnlichem zu arbeiten, aber wir lassen nicht zu, dass sie die Konfiguration stören.
Matthias Zeis
6

Meiner Meinung nach hat das Erstellen und Bearbeiten von Attributen, Kategorien, Produkten und Preisregeln nichts mit einer "Bereitstellungsstrategie" zu tun. All diese Artikel sind für einen Shop ziemlich einzigartig und erfordern in den meisten Fällen ein angemessenes Maß an Analyse und Recherche der von Ihnen angebotenen Produkte verkaufen werden.

Wenn Sie "one size fits all" -Shops mit einer ähnlichen Konfiguration aller von Ihnen genannten Elemente erstellen, können Sie einfach einen "Snapshot" -Export Ihrer Datenbank durchführen, nachdem Sie alle erforderlichen Einstellungen für jeden Shop vorgenommen haben.

Rutger
quelle
Nein, "one size fits all" ist nicht der Punkt; Es ist dieselbe Situation, in die wir als Entwickler geraten, wenn es an der Zeit ist, unseren Quellcode mit dem eines anderen Mitglieds des Entwicklerteams zusammenzuführen. In diesem Fall verfügen wir über Versionsverwaltungssysteme, die die Magie vollbringen. Meine Frage bezog sich eher auf die Möglichkeit, "Nicht-Entwickler" -Dinge wie Konfigurationseinstellungen und typische Admin-Einstellungen und -Einträge zusammenzuführen.
Alessandro Ronchi
Ah ok, das macht es klarer
Rutger
Nehmen wir an, wir erstellen eine komplett neue Website, damit es keine Probleme mit alten Daten usw. gibt. Fast immer verwenden alle unsere Entwickler dieselbe Datenbank für die Entwicklung. Das löst viele Probleme. Für andere Fälle gibt es (noch) keine bessere Lösung, als alle in einer Art Roadmap / Skript erforderlichen Schritte aufzuschreiben und nach dem Zusammenführen erneut zu wiederholen. Wenn nur eine Person für die Admin-Einstellungen von "magento core" verantwortlich ist, sollten diese nicht zu viele Schritte umfassen. Ich habe dies einmal gefunden, aber noch nie ausprobiert tinybrick.com/magento-modules/admin-tools/…
Rutger
2

Ich möchte zwei hervorragende zeitsparende Tools hinzufügen:

  • Für die Entwicklung: PhpStorm IDE mit dem Magicento- Plugin
  • Für die Bereitstellung: Magentify , ein Capistrano-Rezept für Magento
osondoar
quelle
Vielen Dank, dass Sie uns über Magentify informiert haben. Ich wusste es nicht und werde es versuchen. Mein Fokus lag jedoch mehr auf der Synchronisierung unterschiedlicher Entwicklungsumgebungen als auf der Bereitstellung im Sinne der Veröffentlichung einer Codebasis. Mageploy könnte in Magentify integriert werden, ist jedoch ein anderes Tool, das verwendet wird, um einen Teil der Datenbankänderungen unabhängig von bestimmten IDs, die in verschiedenen Umgebungen unterschiedlich sind, automatisch abzustimmen. Mit freundlichen Grüßen Alessandro
Alessandro Ronchi