Cloudogu Logo

Hallo, wir sind Cloudogu!

Experten für Software-Lifecycle-Management und Prozess­auto­mati­sierung, Förderer von Open-Source-Soft­ware und Entwickler des Cloudogu EcoSystem.

featured image SCM-Manager – Warum Plugins?
07.09.2021 in Technology

SCM-Manager – Warum Plugins?


Eduard Heimbuch
Eduard Heimbuch

SCM-Manager Entwickler


Warum wir beim SCM-Manager Plugins benutzen

Wenn Sie den SCM-Manager schon einmal installiert haben, ist Ihnen vielleicht aufgefallen, wie einfach und klein der SCM-Manager im Vergleich zu anderen Source Control Management Lösungen ist. Der Hauptgrund dafür ist, dass eine Vielzahl von Funktionen von der Standardinstallation ausgeschlossen sind und einfach als Plugins hinzugefügt werden können. Dieser modulare Ansatz ermöglicht es Ihnen außerdem, den SCM-Manager leicht um eigene Funktionen zu erweitern. In dieser kurzen Blogpost-Serie wollen wir Ihnen zeigen, wie Sie eigene Plugins für den SCM-Manager entwickeln können.

Zunächst einige SCM-Manager Grundlagen

Fangen wir mit den Grundlagen an, die Sie kennen sollten, bevor Sie Ihr erstes SCM-Manager Plugin schreiben.

  • Das Backend des SCM-Managers ist fast vollständig in Java geschrieben.
  • Das Frontend ist mit React mit TypeScript-Unterstützung geschrieben.
  • Die Kommunikation zwischen dem Frontend und dem Backend wird über HTTP-Anfragen mit Hilfe einer Level 3 REST API abgewickelt.
  • SCM-Manager bietet eine leistungsfähige Plugin-API, die auf Java-Annotationen basiert, eine große Anzahl öffentlicher Schnittstellen, einen zentralen Event-Bus und verschiedene Arten von Erweiterungspunkten, die in den folgenden Blogbeiträgen erläutert werden.

Die Plugin-Architektur unseres Source-Code-Managements

Was müssen Sie noch über Plugins wissen?

Plugins ermöglichen es Ihnen, die Funktionalität von SCM-Manager auf verschiedene Weise zu erweitern, ohne den Kern von SCM-Manager selbst ändern zu müssen. Durch diese starke Abhängigkeit zu den Plugins ist es besonders wichtig, dass bestehende Core APIs nicht verändert werden, sondern nur erweitert werden dürfen. Ein einzelnes Plugin hängt immer von einer Mindestversion des SCM-Managers ab. Es kann auch von anderen Plugins abhängen, die als erforderlich oder optional markiert werden können. Das Jira Plugin kann beispielsweise nicht ohne das Issue Tracker Plugin funktionieren, da einige grundlegende Funktionen in letzterem implementiert sind. Natürlich sind diese Abhängigkeiten nicht nur bei der Entwicklung wichtig, sondern auch für jeden, der das Plugin verwenden möchte. Wenn Sie ein Plugin auf Ihrem SCM-Manager installieren, aber die erforderlichen Abhängigkeiten nicht erfüllt sind, kann der Server nicht starten. Die Abhängigkeiten eines Plugins werden in dessen build.gradle bzw. die Frontend-Abhängigkeiten in der package.json verwaltet.

Plugin dependencies Figure 1: Plugin-Abhängigkeiten

Um Ihr Plugin während der Entwicklung auszuprobieren, können Sie es einfach mit dem Gradle Run-Task: ./gradlew run starten. Dadurch wird SCM-Manager in der Version, von der Ihr Plugin abhängt, mit Ihrem Plugin gestartet.

Wenn Sie das Plugin auf Ihrem eigenen SCM-Manager verwenden wollen, benutzen Sie stattdessen ./gradlew build. Sie erhalten das Plugin-Artefakt in Form einer .smp Datei. Dieses Dateiformat ist ein gezipptes Paket mit allen Plugin-bezogenen Informationen wie Java-Klassen, Frontend-Bundles und anderen Konfigurationen. Um Ihr scm-example-plugin.smp auf einer beliebigen SCM-Manager-Instanz zu installieren, kopieren Sie diese Datei einfach in Ihr scm-home/plugins Verzeichnis und starten Sie Ihren SCM-Manager neu.

Plugin build directory with the smp file Figure 2: Plugin build Verzeichnis mit smp Datei

Unserer Erfahrung nach haben die meisten Plugins sowohl eine Frontend- als auch eine Backend-Integration, aber es ist auch möglich, dass ein Plugin nur aus einem von beiden besteht. Wenn Sie Erweiterungspunkte oder Kern-APIs für Ihr Plugin vermissen, zögern Sie nicht, das SCM-Manager-Team zu kontaktieren.

Plugin-Community zum SCM-Manager

Nachdem Sie Ihr erstes Plugin erstellt haben, möchten Sie es vielleicht mit der gesamten SCM-Manager Community teilen. Zu diesem Zweck haben wir bereits eine automatische Infrastruktur vorbereitet, die es so einfach wie möglich macht, Ihr Plugin im offiziellen SCM-Manager Plugin-Center und auf der SCM-Manager Website zu veröffentlichen.

Folgen Sie einfach diesen Schritten:

  1. Veröffentlichen Sie Ihren Code auf GitHub als öffentliches Repository.
  2. Informieren Sie das SCM-Manager Team, dass Sie ein Plugin geschrieben haben, das Sie im Plugin Center veröffentlichen möchten.
  3. Das Team wird den Code Ihres Plugins überprüfen und eventuell um einige Änderungen bitten. Wenn Ihr Plugin wie erwartet funktioniert, wird es zur SCM-Manager GitHub Organisation hinzugefügt. Wir generieren einen Jenkins-Build-Job für Ihr Plugin und sobald Ihr Plugin erfolgreich gebaut wurde, wird es automatisch zum SCM-Manager Plugin-Center hinzugefügt.
  4. Das war’s schon. Ihr Plugin ist nun Teil des offiziellen Plugin Centers und wird auf der SCM-Manager Website angezeigt. Plugin-Erweiterungen können in Form von Pull Requests an das SCM-Manager Team geschickt werden. Bei Bedarf kann mit dem SCM-Manager Team eine Art von Maintainer Rolle für dieses Plugin vereinbart werden.

SCM-Manager plugin center Figure 3: SCM-Manager Plugincenter

Nicht das Ende

Dies war ein kurzer Abriss darüber, wie Sie mit dem SCM-Manager Plugin-Ökosystem interagieren können. Wenn Sie bereit sind, mit Ihrer ersten Plugin-Idee zu beginnen, schauen Sie sich unseren simple plugin creator an. Dieser stellt Ihnen ein Plugin-Starterpaket zur Verfügung, mit dem Sie direkt mit der Implementierung beginnen können.

Mit dem nächsten Blogpost dieser Serie werden wir dann gemeinsam ein echtes Plugin entwickeln. Von der Initialisierung über die Frontend/Backend-Integration bis hin zur Freigabe im SCM-Manager Plugin-Center. Zum zweiten Teil der Serie.

SCM-Manager

Der einfachste Weg Ihre Git-, Mercurial- and Subversion-Repositories zu teilen und zu verwalten.

Jetzt kennenlernen
SCM-Manager Logo

Aktuelle Diskussion

Kommentare zu diesem Thema auf der Cloudogu Platform