Direkt zum Inhalt
Main Image
Bild
Microscope
22. April 2025

Real Drupal Site Dependency Testing - ein strategischer Ansatz

by Jürgen Haas

Das Kernproblem - eine Kaskade von Risiken

Drupal-Agenturen verwalten oft ein komplexes Netz von Drittanbieter-Komponenten - Module, Themes und Bibliotheken - die die Websites ihrer Kunden unterstützen. Während einzelne Komponenten regelmäßig getestet werden (wie in unserer vorherigen Diskussion Detect Upstream Changes: Wöchentliche Modultests mit GitLab CI), werden vollständige Website-Updates in der Regel nur dann ausgelöst, wenn eine Aktualisierung des Drupal-Kerns oder der wichtigsten Module ansteht. Dieses Timing - das sich nur auf das unmittelbare Update konzentriert - schafft eine kritische Schwachstelle.

Die Realität sieht so aus, dass bei einem vollständigen Website-Update oft zum ersten Mal alle interagierenden Abhängigkeiten von Drittanbietern auf den Prüfstand gestellt werden. Dies setzt eine Kaskade potenzieller Probleme in Gang, die von kleinen Unannehmlichkeiten bis hin zu großen Hindernissen reichen.

Stell dir vor, ein aktualisiertes Modul könnte aufgrund einer subtilen Inkompatibilität kaputt gehen. Ein Update-Hook, der Aufgaben automatisieren soll, könnte unerwartet fehlschlagen. Das sorgfältig ausgearbeitete Erscheinungsbild der Website könnte gestört werden. Kritische Patches, die Sicherheitslücken schließen sollen, können plötzlich nicht mehr eingespielt werden. Vielleicht tauchen in der Browserkonsole JavaScript-Fehler auf oder die Logs der Website füllen sich mit Warnungen und Fehlern, die sofortige Aufmerksamkeit erfordern. Noch besorgniserregender ist, dass die Benutzerrechte beschädigt werden können, was den Zugang und die Funktionalität beeinträchtigt.

Jedes dieser Probleme stellt eine Verzögerung dar und erfordert oft umfangreiche Untersuchungen, Nachforschungen und gezielte Korrekturen. Die Notwendigkeit, die Schwachstellen der einzelnen Abhängigkeiten zu beheben, macht die Sache noch komplexer und verlängert den Zeitplan für die Aktualisierung insgesamt erheblich.

Und das ist der entscheidende Punkt: Wenn eine Website-Aktualisierung dringend ist - aufgrund einer kritischen Sicherheitsbedrohung, die sofortige Abhilfe erfordert, oder weil eine neue Funktion für eine wichtige Kampagne eingeführt werden muss - ist eine Verzögerung inakzeptabel. Das Risiko für die Agentur besteht nicht nur in einer verspäteten Aktualisierung, sondern in einem direkten Verstoß gegen die Servicevereinbarung: Das Sicherheitsproblem bleibt ungelöst, die neue Funktion wird nicht geliefert oder, noch schlimmer, etwas anderes auf der Website geht einfach kaputt.

Der seltene Fokus auf umfassende Abhängigkeitstests, die sich nur auf Kern-Updates beziehen, setzt Agenturen einem kontinuierlichen und eskalierenden Risiko aus.

Das Testing Framework - ein proaktiver Ansatz

Ausgehend von dem Problem, das wir identifiziert haben - das Potenzial für kaskadierende Probleme, die sich aus unregelmäßigen Abhängigkeitstests ergeben - haben wir ein proaktives Testsystem entwickelt, um diese Risiken zu mindern. Dieser Rahmen arbeitet in einem kontinuierlichen Zyklus, bei dem Geschwindigkeit und Reaktionsfähigkeit im Vordergrund stehen.

Kernprozess

  1. Regelmäßige Dependency Checks: Wir nutzen einige Referenzseiten in sicheren Sandboxen. Diese Websites werden stündlich oder häufiger auf verfügbare Abhängigkeitsupdates innerhalb von Drupal, unseren Agentur-Namespaces und unseren Kunden-Namespaces überwacht. (Wir beschränken uns absichtlich auf die Komponenten, die besonders wichtig sind). Wenn keine Updates gefunden werden, wird der Prozess angehalten.
  2. Sicherheit und Patch-Priorisierung: Wenn Updates gefunden werden, prüfen wir systematisch auf Sicherheitshinweise, kleinere Updates und Patches und bestätigen die Anwendbarkeit. So stellen wir sicher, dass wir immer die neuesten Versionen aller Abhängigkeiten bereitstellen und verhindern, dass es in Zukunft zu Konflikten kommt.
  3. Sandbox Build & Bereitstellung: Nach dem Testen der Abhängigkeiten bauen wir die vollständige Website in der Sandbox auf, wobei wir je nach Projektanforderungen eine Referenzdatenbank verwenden oder die Live-Datenbank von der Drupal-Quellseite abrufen.
  4. Simulation des vollständigen Einsatzes: Anschließend wenden wir alle identifizierten Aktualisierungen an, laden die geänderte Konfiguration und führen alle Standardaufgaben für die Bereitstellung von Aktualisierungen aus - und spiegeln dabei eine Live-Bereitstellung wider, um einen nahtlosen Prozess zu gewährleisten. Jeder Fehler löst eine sofortige Warnung aus.
  5. Umfassende Tests: Zum Schluss führen wir einen mehrstufigen Testansatz durch:
    • End-to-End Cypress Tests: Diese Tests simulieren die Benutzerinteraktionen, einschließlich der Navigation, des Logins (für verschiedene Benutzerrollen) und kritischer Funktionen, um die Stabilität und Funktionalität der Website insgesamt zu überprüfen. Wir überwachen die Browser-Konsolen und den Watchdog von Drupal auf Fehler.
    • Backstop Visuelle Regressionstests: Mit diesen Tests werden visuelle Regressionen aufgespürt, um sicherzustellen, dass die Website bei Aktualisierungen ein einheitliches Erscheinungsbild behält.

Grundprinzipien und Arbeitsabläufe

  • Alle Sicherheitshinweise müssen sofort behoben werden.
  • Verwende immer die neuesten Versionen für alle Komponenten.
  • Akzeptiere keine Fehler in den Protokollen.
  • Akzeptiere keine Fehler in der Browserkonsole.
  • Akzeptiere keine Regressionen.
  • Unterhalte eine umfangreiche End-to-End-Testsuite, die auf der Grundlage der von Kunden gemeldeten Probleme auf Live-Sites ständig verbessert wird, um eine Wiederholung zu verhindern.

Schnelle Reaktion und Problemlösung

Die erfolgreiche Umsetzung dieses Rahmens erfordert die Zuweisung von Ressourcen der Agentur, um ausgelöste Alarme umgehend zu bearbeiten. Dieser mehrschichtige Ansatz geht über das Testen einzelner Module hinaus und bietet einen Kontext für potenzielle Probleme innerhalb des gesamten Systems. Entscheidend ist, dass dieses Framework auch für Drupal-Maintainer von Nutzen ist, die sich oft auf einzelne Module konzentrieren; wir identifizieren und beheben systemische Konflikte und unbeabsichtigte Folgen, ein Bereich, der durch herkömmliche Tests auf Modulebene kaum zugänglich ist.

Bereit für den Einsatz - Der kontinuierliche CI/CD-Standard

Über die Reaktion auf Notfälle hinaus legt unsere Strategie den Schwerpunkt auf die Aufrechterhaltung eines Projektzustands, der für die sofortige Bereitstellung geeignet ist - gemäß dem Grundsatz, dass das Git-Repository eines Projekts immer in einem "ready-to-go"-Stadium sein sollte. Diese grundlegende Praxis unterstützt direkt die Implementierung von Continuous Integration/Continuous Deployment (CI/CD), einem Eckpfeiler der modernen Softwareentwicklung.

Tools und Infrastruktur - eine Grundlage für Stabilität

Der Erfolg unseres proaktiven Testing Frameworks hängt von einer robusten Infrastruktur und einem sorgfältig ausgewählten Tool-Stack ab. Wir haben in eine Kombination aus eigenen Ressourcen und Open-Source-Lösungen investiert, um Skalierbarkeit, Wartungsfreundlichkeit und Zusammenarbeit zu gewährleisten.

Infrastruktur

  • Dedizierte Sandboxen: Wir betreiben mehrere dedizierte Server ausschließlich für den Betrieb unserer Drupal-Sandboxen. Diese isolierten Umgebungen ermöglichen es uns, Updates und Konfigurationen sicher zu testen, ohne die Live-Sites zu beeinträchtigen.
  • Externer Speicher: Um das wachsende Datenvolumen zu verwalten - einschließlich Caches, Downloads von Abhängigkeiten und Docker-Images - nutzen wir externen Speicher. Dies ermöglicht eine effiziente Datenverwaltung und verhindert Engpässe.

Werkzeugstapel

  • Composer: Ein grundlegendes Tool zur Verwaltung von Abhängigkeiten, das konsistente und reproduzierbare Builds gewährleistet.
  • Cypress: Unser wichtigstes End-to-End-Testing-Framework, das realistische Benutzersimulationen und eine gründliche Funktionsvalidierung ermöglicht.
  • Backstop: Wird für visuelle Regressionstests eingesetzt, um ein konsistentes visuelles Erlebnis über alle Updates hinweg zu gewährleisten.
  • GitLab CI/CD: Das Herzstück unseres automatisierten Testprozesses.

Unser CI/CD-Pipeline-Ansatz

  • Geplante Pipelines: Wir nutzen GitLab CI/CD, um unsere automatisierten Tests zu orchestrieren. Geplante Pipelines laufen kontinuierlich auf unseren Drupal-Referenzseiten, um potenzielle Probleme proaktiv zu erkennen.
  • Open-Source CI-Vorlagen: Da wir den Wert von gemeinsamem Wissen erkannt haben, veröffentlichen wir unsere CI-Vorlagen als Open-Source. Diese Vorlagen sind auf LakeDrops GitLab Instance verfügbar und können von der gesamten Drupal-Community erforscht, angepasst und wiederverwendet werden.

Sieh es in Aktion - eine Demo-Site

Wir stellen eine öffentliche Referenzseite mit minimaler Komplexität zur Verfügung, um die geplanten Pipelines zu demonstrieren. Die Drupal 10 Seite wird nur einmal am Tag aktualisiert. Du kannst die Zeitpläne und die Pipeline im Abschnitt "Build" dieses Projekts sehen, auch als anonymer Benutzer. In diesem Beispiel gibt es die Datei .gitlab-ci.yml nicht. Dies geschieht aus Sicherheitsgründen, da Nutzer/innen Push-Zugriff auf dieses Projekt erhalten können, um damit zu experimentieren. Deshalb wird die CI-Konfiguration in einem separaten Projekt gespeichert und die Projektkonfiguration verweist auf diese externe Datei, die unveränderlich ist.

Fazit - Risiko reduzieren, Wert steigern

In diesem Dokument haben wir eine kritische Herausforderung in der Drupal-Entwicklung hervorgehoben: das Potenzial für kaskadierende Probleme, die aus reaktiven, unregelmäßigen Abhängigkeitstests entstehen. Herkömmliche Ansätze, die sich auf isolierte Modul-Updates und manuelle Überprüfungen verlassen, schaffen ein unsicheres Umfeld, das das Risiko erhöht, dass die laufenden Websites destabilisiert und die langfristige Wartung behindert werden. Zu diesen Risiken gehören:

  • Verspätete Fehlererkennung: Probleme tauchen oft erst nach dem Einsatz der Module auf, was zu erheblichen Nacharbeiten und Frustration beim Kunden führt.
  • Erhöhtes Bereitstellungsrisiko: Das Patchen von Abhängigkeiten ohne umfassende Tests führt zu Instabilität und birgt das Potenzial für unerwartete Konflikte.
  • Geringere Produktivität der Agentur: Manuelle Überprüfungen und Fehlerbehebungen fressen wertvolle Zeit der Entwickler.

Unser proaktiver Testrahmen wirkt diesen Risiken direkt entgegen. Durch die Etablierung eines kontinuierlichen Zyklus von Abhängigkeitsvalidierung, automatisierten Tests und proaktiver Problemerkennung bieten wir Drupal-Agenturen einen spürbaren Return on Investment. Im Einzelnen bietet dieses Framework Folgendes

  • Geringeres Einsatzrisiko: Minimierte Instabilität durch kontinuierliche Validierung und sofortige Fehlererkennung.
  • Gesteigerte Produktivität der Agentur: Die Automatisierung reduziert den manuellen Aufwand, sodass sich die Entwickler auf die strategische Entwicklung konzentrieren können.
  • Erhöhte Kundenzufriedenheit: Stabile Einsätze, weniger Überraschungen und eine schnellere Lösung von Problemen führen zu zufriedeneren Kunden.

Neben dem Nutzen für die Agenturen trägt dieses Framework auch zur Drupal-Community bei. Der strategische Ansatz bietet eine wiederverwendbare Grundlage für Tests und Automatisierung, die es anderen Drupal-Teams ermöglicht, ihre Standards zu verbessern. Dies fördert die Verbreitung von Best Practices und sorgt für ein stabileres und widerstandsfähigeres Drupal-Ökosystem.

Letztlich ist dies nicht nur eine technische Lösung, sondern ein Bekenntnis zu einer verantwortungsvollen Drupal-Entwicklung, bei der Stabilität, Zuverlässigkeit und Zusammenarbeit im Vordergrund stehen.

Offenlegung: Ich habe das Gemma3 LLM in Ollama genutzt, um die Struktur aufzubauen und einige Inhaltsvorschläge zu erstellen, die auf meinem eigenen Verständnis des Problemfeldes und der von uns implementierten Lösungen basieren. Außerdem habe ich Deepl und LanguageTools verwendet, um Rechtschreibung und Grammatik zu verbessern. Das Schreiben des Artikels selbst betrachte ich als meine eigene Arbeit, und die KI war lediglich ein unterstützendes Werkzeug.

Neuen Kommentar hinzufügen

Klartext

  • Keine HTML-Tags erlaubt.
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.
CAPTCHA
Diese Sicherheitsfrage überprüft, ob Sie ein menschlicher Besucher sind und verhindert automatisches Spamming.