TYPO3Camp Mitteldeutschland: Concourse CI, Automated Testing, Static File Cache u. v. m.
Während wir im ersten Teil unserer Review zum TYPO3Camp Mitteldeutschland unsere von der Community gelobte TYPO3 Extension nr_sync vorgestellt haben, wollen wir nun auf meinen Vortrag zum Thema Deployment mit Concourse CI eingehen.
Außerdem konnte ich viel aus den Vorträgen der anderen Teilnehmer mitnehmen, was ich euch nicht vorenthalten möchte.
Netresearch Vortrag: Concourse CI
In meinem Vortrag bin ich auf die Vorteile des Continuous Integration Tools Concourse CI eingegangen und habe an einer Live-Demo gezeigt, wie man Concourse startet und erweitert.
Überblick Continuous Integration
Der Markt für Continuous Integration Systeme wird immer größer. Wo früher Jenkins den Markt anführte gibt es inzwischen ein vielfältiges Angebot. Man kann entscheiden zwischen SaaS-Anbieters wie CircleCI, Travis, GitHub, GitLab und vielen mehr, und möchte man den Buildprozess auf der eigenen Infrastruktur laufen lassen, gibt es auch ein vielfältiges Angebot aus der Open Source Welt.
Vorteile von Concourse CI
Concourse CI kann man auf dem eigenen Server starten. Die Vorteile von Concourse CI gegenüber anderer Lösungen sind:
- Leichte Skalierbarkeit durch Docker
- Leichte Erweiterbarkeit
- Die Möglichkeit auf mehrere Datenquellen wie z.B. GIT Repositories zu lauschen, um ein build auszulösen.
- Die Möglichlichkeit auf verschiedene Typen von Quellen zu lauschen wie z.B. Docker-Registries, Versions Kontroll Systeme (git,svn,mercury), oder andere Quellen wie MQTT, E-Mail oder Slack-Nachrichten.
Concourse auf dem eigenen Rechner starten
Ich habe hierzu ein kleines Beispielprojekt gestartet, damit du Concourse selbst auf eurem Rechner starten könnt: https://github.com/vergissberlin/t3cmd
Die einzige Voraussetzung ist, dass du Docker installiert hast. (Dauer 5 Minuten)
Weitere interessante Themen im Barcamp
Automated Testing
Daniel Siepmann gab einen Einblick ins Unit-Testing von TYPO3 Controllern und Models. Für mich war das Thema aus zweierlei Gesichtspunkten interessant. Zum einen habe ich schon lange kein PHP mehr geschrieben und benötige es in Zukunft wieder des Öfteren, zum anderen hörte ich oft das Argument "Unit Tests nur für relevante Dinge, auf jeden Fall keine Models und Controller“
- Controller laden im besten Fall nur Funktionen aus anderen Klassen und führen diese aus. Selbst stellen sie keine Funktionen zur Verfügung, die es zu testen gilt.
- Models werden oft automatisch generiert, z.B. mit dem Extension-Builder oder Apiman. Daher erübrigt sich das Testen.
Ich habe Daniel (sehr sympathisch) diese Frage gestellt und er meinte, es sei ein guter Einstieg für jeden Extension-Entwickler, denn einen Controller und ein Model hat man auf jeden Fall. Des Weiteren konnte er so gut das Prinzip des Mockings anhand eines Beispiels erläutern.
Nochmal zu Erinnerung: Wozu sind Tests nochmal gut?
- Fehler entdecken, bevor sie jemanden auffallen.
- Man stellt sicher, dass derselbe Fehler nicht ein zweites Mal auftritt.
- Fehler lassen sich mit Tests reproduzieren.
- Entwicklung beschleunigen.
- Dokumentiert, wie man den geschriebenen Code verwendet.
- Ein Pull-Request dokumentiert die Akzeptanzkriterien oder wie man sie verstanden hat.
- Schreiben Sie Code ohne funktionierendes System, indem Sie stattdessen Tests verwenden.
- Tests ermöglichen ein sicheres Refactoring.
- Tests erzwingen das Schreiben von sauberem Code.
Sein Beispiel kann man noch einmal hier nachspielen: https://github.com/DanielSiepmann/testing-talk
Der Vortrag gab mir auf jeden Fall den Anschub, für das aktuelle Projekt Unit-Tests für anstehenden TYPO3 Plugins zu schreiben, um so die Akzeptanzkriterien zu verschriftlichen.
HMENU is bad
TYPO3 ist im Enterprise Bereich in Deutschland sehr beliebt. Bei Universitäten, Krankenhäuser, Institutionen und Länder und Gemeinden werden hier auch Webprojekte mit mehr als 18.000 Seiten umgesetzt. Diese in einem Menü abzubilden ist keine leichte Herausforderung. Oft endet dies in einem Mega-Menü mit vielen Ebenen und Menüpunkten. Was soll an meinem HMENU schlecht sein? Das Problem: Für das Menü muss für wegen dem Active-Status für jede Seite ein separater Cache angelegt werden. Dadurch füllt sich selbst ein 64GB Redis Cache innerhalb von Minuten. Interessant zu wissen ist dabei, dass auch der v:menu Viewhelper unter der Haube das HMENU benutzt.
Benni Mack, seines Zeichens Project-Lead des Content-Management-Systems TYPO3, hat mit seiner Firma b13 abhilfe geschaffen. Mit seinem Anzatz machen MegaMenüs keine Probleme mehr: https://github.com/b13/menus Ob das auch etwas für den TYPO3 Core ist, wird sich erst noch herausstellen.
Static File Cache
Static File Page Generatoren sind seit ein paar Jahren der heiße Scheiß (<2020) in der Welt der High-Performance-Webanwendungen. Dank Tim Lochmüller gibt es so etwas mit staticfilecache für TYPO3 schon seit 2016. Tim hat erzählt, welche neuen Features eingebracht wurden:
- Gzip und Brotli file cache Kompressor
- Cache Control header
- Cache Tags
- HTTP2/Push für Assets
- Fallback middleware
Anschließend gab er noch einen Ausblick auf zukünftige Features. Es sollen Client-seitige Offline Caches verwendet und das Purgen eines Fastly Caches über das Backend ermöglicht werden.
Neu für mich war auch, dass Tim auch der Founder und Maintainer von Sourceopt ist, einer TYPO3 Extension die unnötige Zeichen aus den HTML Dokumenten entfernt und damit auch die Geschwindigkeit erhöht. Hut ab vor Tim Lochmüller, dem Mann mit dem schwarzen TYPO3-Blog!
Semantic Data mit TYPO3
Im Enterprise Bereich haben semantische Daten eine hohe Relevanz. Helfen sie doch den Suchalgorithmen unsere Inhalte zu verstehen. Um seine Inhalte semantisch anzureichern, fügt man dem HTML Dokument ein JSONLD String hinzu, der sich an die Schemas von schema.org hält. Mit der Template-Engine Fluid des TYPO3 Frameworks ist dies aber nicht immer ganz so einfach umzusetzen, da die Template-Engine auch geschweifte Klammern benutzt, in dem Fall um Variableninhalte auszugeben. Um dieses Problem zu beheben, bietet das TYPO3 Extension Repository (kurz TER) derzeit zwei Extensions. Chris Müller hat auf dem TYPO3Camp Mitteldeutschland seinen Lösungsansatz schema vorgestellt.
Besonders smart an seinem Ansatz ist, dass die Erweiterung einen Viewhelper anbietet, an den man die notwendigen Daten übergeben kann. Wir bei Netresearch arbeiten oft für die Reisebranche und ich bin mir ziemlich sicher, dass die Extension schon bald bei uns Anwendung finden wird, denn mit der Auszeichnung von semantischen Daten hat man die Chance, in speziell aufbereiteten Suchergebnissen wie z.B. bei der Hotelsuche aufzutauchen.