Kursthemen

  • Starthilfe

    Was erwartet mich in diesem Kurs?

    In diesem Kurs findet Ihr einen technischen Überblick darüber, wie die Ruhr-Universität Bochum ihre Moodle-Instanzen via GIT betreut. Darunter fallen Dinge wie Versionsupdates und Plugin-Management, die vollständig via GIT erfolgen.

  • Wieso? Weshalb? Warum?

    • Moodle an der RUB zum Semesterstart WS 21/22

      • 48.000 individuelle Nutzer*innen Peak / Monat
        • 16.000 aktive Kurse
      • 32.000 individuelle Nutzer*innen Peak / Tag
        • 8.000 aktive Kurse
      • 7.000 individuelle Nutzer*innen Peak / Stunde
        • 2.200 aktive Kurse
      • 4 Produktiv-Instanzen
        • ein Kurs-Moodle
        • zwei E-Assessment-Moodle
        • ein Sprachbildung-Moodle (Einstufungstests)
      • 87 Plugins


      Ziele

      • eine nachvollziehbare "Source of Truth" per Moodle-Instanz
      • Moodle-Updates vereinfachen
        • Updates sollen über das MoodleHQ-Repository abrufbar sein
      • Plugin-Installation vereinfachen
      • Plugin-Updates und -Wartung vereinfachen
        • Updates sollen über das jeweilige Plugin-Repository abrufbar sein
  • I: Vorgehen in Moodle

    • Git-Struktur



      Ablauf: Schritt für Schritt

      • Aktuellen lokalen Stand in lokales Git-Repository einpflegen.

      • Clone des MoodleHQ-Gits in lokales Repository ➡️ bei Bedarf Einbindung als Upstream (bspw. bei Update)

      • Plugin-Einbindung als Submodule

      • Einbindung weiterer Anwendungen (sofern möglich) als Submodule
    • How to ... Moodle Versionsupgrade

      • Remote hinzufügen & Remote-Branches holen:
        • cd <pfad-zum-root>
        • git remote add upstream https://github.com/moodle/moodle.git
        • git fetch upstream

      • Feature-Branch anlegen:
        • git checkout -b <feature-branch-name>
        • git push origin <feature-branch-name>

      • Neue Version in Update-Branch mergen:
        • git branch --set-upstream-to=<name-des-upstream-remote>/<branch-des-upstream-remote> <feature-branch-name>
        • git pull git submodule update --recursive

      • Feature-Branch in Master-Branch mergen:
        • git checkout --recurse-submodules master
        • git pull origin master git merge <feature-branch-name> git push origin master
    • Git Submodule vs. Git Subtree

       Submodule Subtree
       Link eines Repositorys  Kopie eines Repositorys
       Kann auf einen fixen Commit zeigen  Integriert seinen Inhalt in das Haupt-Repository
       Verfügt über Upstream, erleichtert Update            Verfügt über keinen Upstream, kann bei Bedarf nachgezogen werden
  • II: Vorgehen mit Plugins

    • Git-Struktur



      Ablauf: Schritt für Schritt

      • Alle Plugins sollen als Submodules eingebunden werden

      • Plugins in Kategorien sortiert
        • „Vanilla“ / Open Source
        • „Vanilla“ / Closed Source
        • „Angepasst“ / Open Source

      • Zwei Git-Workflows ausdefiniert („Vanilla“ / „Angepasst“)
    • How to ... Plugin Submodules

      • Hinzufügen:
        • cd <pfad-zum-root>
        • git submodule add <git-url-des-plugin-repositorys> <pfad-zum-zielordner>
        • cd <pfad-zum-zielordner>
        • git checkout <tag-oder-commit>

      • Aktualisieren:
        • cd <pfad-zum-zielordner>
        • git checkout <tag-oder-commit>

      • Entfernen:
        • cd <pfad-zum-root>
        • git submodule deinit <pfad-zum-zielordner>
        • git remove <pfad-zum-zielordner>

      Mögliche Stolpersteine

      • in einem anderen Commit wurde die Version eines Submodules geändert
        • nach Pull müssen die Module frisch initialisiert werden
          git pull
          git submodule update --recursive --init

      • unsaubere Plugin-Repositorys
        • bspw. unsaubere / fehlende Branch-Namen bzw. Tags
  • Fazit & Ausblick

    • Git Workflow


    • Fazit
      Basierend auf den Erfahrungen aus dem Wintersemester 2022/23, in dem die Ruhr-Universität Bochum erstmals mit diesem Workflow gearbeitet hat, lässt sich festhalten:
      • erstes Moodle-Versionsupgrade von 3.7 auf 3.9 lief problemlos
      • erste Plugin-Updates liefen problemlos
      • größere Transparenz über Zustand der Instanzen
      • Beschleunigung der Reaktionszeit bei Bugs/Fehlern
      • kollaboratives Arbeiten massiv verbessert

      Ausblick
      • Automatisiertes Deployment (CI/CD)
      • Containerisierung der Moodle-Instanzen