Skip to content

Deploy: entfallende Module vor dem Image-Wechsel deinstallieren

Thomas Schnitzler requested to merge development into staging

Drupal kann ein Modul nur deinstallieren, solange dessen Code vorhanden ist. Wird ein Modul gleichzeitig aus core.extension.yml und composer.json geworfen, findet der config:import im neuen Image die Extension nicht mehr und bricht ab ("The module X does not exist") — so geschehen bei form_mode_control.

Der offizielle Weg dagegen sind zwei Deploys: erst deinstallieren, waehrend der Code noch im Repo liegt, dann den Code entfernen. Das laesst sich in einem Feature-Branch-Workflow schlecht durchhalten, deshalb verlegt scripts/pre-deploy.sh die Deinstallation dorthin, wo der alte Code noch existiert: in den noch laufenden Container, bevor docker stack deploy ihn ersetzt.

  • Soll-Zustand kommt als core.extension.yml des neuen Release vom Runner, Ist-Zustand aus der Datenbank; die Differenz nach unten wird ueber den module_installer regulaer deinstalliert (inkl. hook_uninstall).
  • Zugaenge bleiben unberuehrt, die installiert der config:import wie bisher.
  • Best effort: der Schritt bricht den Deploy nie ab. Was er nicht regeln kann, faellt dem config:import zu — also demselben Verhalten wie ohne ihn.
  • Jeder Stack befragt sein eigenes laufendes Image, staging und prod bleiben getrennt.

Merge request reports