TYPO3-Update leicht gemacht

In ein paar Stunden ein komplexes TYPO3-Update über 3 Major-Versionen durchführen? Mit dem aktuellen Stand der Website mit ein paar tausend Seiten und vielen Extensions? Geht das?

Geht das wirklich?

Yep, das geht und so machen wir das bei großen TYPO3-Websites eigentlich immer - oft mit einem Redaktionsfreeze von nur ein paar Stunden. 

Das Geheimnis dahinter: unser Update-Bash-Script. Mit diesem Tool sind schnelle und automatisierte TYPO3-Upgrades über mehrere Versionen kein Problem mehr. Einzige Voraussetzung: Eine lokale DDEV-Installation und Git. Naja und vielleicht ein Betriebssystem was nicht mit einem "W" beginnt.
Kleiner Scherz :grinsen:.  Aber ich lass mich da gern eines bessern belehren und natürlich können gern auch Windows Nutzer unser Script testen und ihre Erfahrungen mit uns teilen. Wir nutzen das unter Ubuntu und eigentlich sollten auch Mac Nutzer keine Problem damit haben.

Komplexe TYPO3-Updates – ein mühsamer Prozess

TYPO3-Updates über mehrere Versionen erfordern oft viele, kleine Zwischenschritte in den einzelnen TYPO3-Versionen. Da sind zum einen einzelne Core Upgrade Wizards oder Upgrade Wizards von Extensions. Manche dieser Upgrade-Wizards  erfordern eine spezifische TYPO3-Version. Man kann deshalb oft bei einem Update von TYPO3 Version 9 auf TYPO3 Version 12 nicht einfach die Versionen 10 und 11 überspringen, sondern muss auch diese einmal aufsetzen, um dort bestimmte Aufgaben durchführen.

Oft ändern sich im Update-Prozess auch die Dateistruktur (z.B. via Bash-Befehlen) oder die Datenbank (z.B. mittels SQL-Befehlen) - z.B. wenn man bestimmte Inhalte auf eine neue Extension umstellt. Bei Updates von großen und komplexen TYPO3-Webseiten, kommen so eine Vielzahl kleiner Schritte und Aufgaben zusammen. Bisweilen dauert die Arbeit daran mehrere Wochen.

Natürlich will kein Kunde wochenlang nichts an der Website machen. Also führen wir die hundert kleinen Änderungen kurz vor dem Livegangs-Termin auf Basis des aktuellen Website-Standes noch einmal durch. Jeden Schritt händisch durchzuführen hat entscheidende Nachteile: 1: Jeder Step und die ganaue Reihenfolge müssen gut dokumentiert werden. 2: Man muss sie fehlerfrei wiederholen (können). 3: Man kann sich kaum sicher sein, dass man wirklich alles gemacht hat. 4: Das kann viel Zeit in Anspruch nehmen. 5: Wenn dann doch noch ein kleiner Fehler auffällt, muss man wieder von vorne anfangen 😓.

Das muss doch besser gehen!

Wir haben uns bei undkonsorten schon vor langer Zeit entschieden, alle notwendigen Schritte in einem Update-Bash-Script zusammenzufassen, welches dann das gesamte TYPO3-Update automatisch durchführen kann - wann und so oft man will. Das war natürlich sehr speziell und individuell auf unsere Entwicklungsumgebung angepasst. Damit die TYPO3-Community von solchen Lösungen profitieren kann, musste eine bessere, unabhängigere Lösung her.

Diese Lösung gibt es jetzt!

Ich bin ja des öfteren bei den Treffen der TYPO3 Usergroup Magdeburg anzutreffen. Solch ein Treffen stand mal wieder an und da kam ich auf die glorreiche Idee 💡, dass es doch cool wäre, solch ein allgemein nutzbares Script im Rahmen einer Live Coding Session mal runterzuschreiben. Gesagt, getan. Zusammen mit anderen TYPO3-Enthusiasten haben wir so beim letzten Usergroup Treffen eine wiederverwendbare Version dieses Undkonsorten-Upgrade-Scripts geschrieben. Da DDEV mittlerweile zum Standard bei vielen lokalen Entwicklungsumgebungen geworden ist, haben wir uns diesen zum Vorbild genommen und das Script darauf abgestimmt. Das war mal wieder ein gelungener Abend in Magdeburg der sehr viel Spaß gemacht hat. Und am Ende stand nach Meinung aller, ein nettes kleines Tool was sicher bald hier und da Verwendung bei dem einen oder anderen TYPO3-Update findet.

DDEV-CMS Upgrader

Das Script ist mittlerweile auf Github veröffentlicht und mit einer kleinen Dokumentation versehen, wie man das ganz konkret für ein TYPO3-Upgrade nutzen kann.

Und wie funktioniert das jetzt?

Im Groben läuft das Ganze folgendermaßen. Über eine Angabe der benötigten TYPO3-Versionen (in einer .env Datei), checkt das Bash-Script nacheinander entsprechend vorbereitete Branches aus. Es fährt eine DDEV Umgebung hoch und führt Post-Start-Hooks von DDEV aus. Die Post-Start-Hooks in DDEV erledigen dann die eigentliche Arbeit. Die TYPO3 CommandLine Tools bringen ja alles Nötige dafür mit.

Damit werden Aufrufe für Upgrade Wizards oder auch der DB Import im ersten ausgecheckten Branch ausgeführt. Diese Schritte müssen natürlich für jedes Projekt erst einmal herausgefunden werden und dann individuell angelegt werden. Diese Arbeit kann das Script nicht leisten.

Das Script kümmert sich dann um das Stoppen der DDEV Installation, checkt den nächsten Branch aus und fährt die DDEV Installation wieder hoch. Und so weiter …

Das ist im Grunde recht simpel. Die Komplexität kommt erst mit den Post-Start-Hooks hinzu. Das hat einen riesigen Vorteil: Das Script ist so überhaupt nicht auf TYPO3 beschränkt. Man könnte es so auch für jedes andere CMS benutzen, welches mit DDEV läuft (zum Beispiel WordPress, Drupal uvam.). Einfach Versionsnummer und Bezeichnung in der .env Datei angeben und los geht das Update.

Wer es genauer wissen will, kann einfach in der README zu dem Script nachlesen. Dort habe ich ein TYPO3 Upgrade über mehrere Versionen ausführlich beschrieben.

Ich hoffe, dass dieses Script auch anderen bei ihren TYPO3-Upgrades hilft und freue mich natürlich über Feedback dazu.

Gern hier als Kommentar oder auch im TYPO3 Slack. Wenn ich etwas Luft habe bin ich da auch öfter im "German Channel" unterwegs. Kleine Probleme können wir da unter Umständen schnell und unbürokratisch lösen. Aber auch ein PullRequest im Github Repo ist sehr willkommen. Wenn ihr auch Ideen habt, wie man den Upgrade-Prozess verbessern kann oder ergänzende Hinweise habt für die Dokumentation, immer her damit.

Und nun, fröhliches Upgraden :grinsen:, am Ende mit nur einem Befehl: ./auto-upgrade.sh


Kommentare

Keine Kommentare


Kommentar schreiben

* Diese Felder sind erforderlich