Einleitung in die Thematik:
Mich beschäftigt der kontinuierliche Deployment Prozess einer Contao Installation.
Ich laufe in die Situation, dass eine bestehende Installation weiterentwickelt wird und sich hierdurch
der Quellcode sowie die Datenbank ändert. Die Datenbank ändert sich jedoch auch durch aktive Arbeit der Redakteure im Live System.
Zu dieser Situation würde ich gerne Erfahrungswerte aus der Community sammeln.
Ich beschreibe mal meine Prozesse:
Eine bestehende Installation wird aktiv von Redakteuren gepflegt, die Inhalte der Datenbank haben eine hohe Änderungsrate.
Module, Templates oder Code werden nur vom Entwickler verändert.
Die eigentliche Entwicklungsumgebung ist eine lokale Vagrant Box.
Zwischen Entwicklung und Live steht ein Staging System mit identischer System Architektur.
Ich halte das Projekt in einem Git Repository und nutze Git ebenfalls als Deploy-Tool.
Hierzu eine kleine Nebenfrage:
Was haltet ihr alles in der VCS? Beispiel von .gitignore Files würden mich sehr interessieren.
Ich nutze den Git Workflow Gitflow.
Der Prozess sieht im wesentlichen so aus:
- Aktive Entwicklung in Feature Branches
- Merge des Feature zurück in den Develop Branch nach abgeschlossener QA
- Nach Abschluss der Entwicklungsphase wird der Develop Branch auf dem Staging System ausgecheckt, es erfolgt erneute QA
- Nach Abschluss der QA wird vom aktuellen Stand des Develop Branches, nach eventuellen Bugfixes, der nächste Release Branch gezogen
- Live gehen: neuen Release Branch auf der Live Maschine auschecken
Nun der Teil der mich aktuell beschäftigt:
Der letzte Schritt kann Änderungen an der Datenbank beinhalten. Wenn z.B. ein Modul installiert wurde, dass die DB aktualisiert.
Inhaltliche Konflikte sollten eigentlich per Prozess-Design nicht vorkommen, da der eigentliche Content nicht vom Entwickler angefasst wird.
Um nun beim Deployment nicht alles an Redaktions-Arbeit seit meinem letzten Release zu überschreiben, möchte ich eine Art Synchronization
duchführen. Zuerst hole ich mir einen Diff von der Live DB, fahre diesen Patch gegen die Dev DB. An dieser Stelle sollte die Redaktion kurz
geblockt werden um die DB nicht weiter zu verändern.
Nun erstelle ich einen neuen Diff von Dev gegen Live DB.
Zusammen mit dem Auschecken des neuen Release Branches auf der Live Maschine, würde ich letzteren Patch auf die DB anwenden.
Die Arbeit an den Datenbanken könnte mit einem Tool wie Liquibase erzielt werden.
Ziel ist es am Ende einen Prozess zu haben der mit einem CI Server wie z.B. Jenkins automatisiert werden kann.
Also Deploy auf Stage, Sync der Datenbanken, Live Deployment, Rollback.
Ich denke, dass die Contao Community von einem solchen Prozess profitieren kann.
Gerade Teams die an solchen Projekten in größeren Kontexten arbeiten sind eine interessante Zielgruppe.
Gibt es zu dieser Thematik Erfahrungswerte?