Eclipse Che Tutorial: Tag 3 – Einen Custom Workspace Stack hinzufügen

In dieser Artikel-Serie beschreiben wir unsere Erfahrung mit der Entwicklung von Erweiterungen (Plug-ins) für Eclipse Che. Als durchgängiges Beispiel dient eine erste Version für EMF-Support in Che, welche wir prototypisch entwickelt haben.
Im ersten Teil der Serie haben wir zunächst einen Überblick über unsere Ziele gegeben. Im zweiten Artikel beschreiben wir, wie sich der bereits existierende EMF-Codegenerator in Che wiederverwenden lässt. Um das zu ermöglichen, haben wir eine Eclipse Modeling Tools Edition zu unserem Che Workspace hinzugefügt. Damit konnten wir die Eclipse Modeling Tools über die Befehlszeile auszuführen, um so den EMF-Codegenerator zu starten.
Bisher mussten wir die Eclipse Desktop IDE manuell in unseren Che-Workspace installieren. Weiterhin haben wir manuell einen Befehl in unserer Che-IDE definiert, um die Code-Generierung ganz bequem mit einem Klick auf einen Button durchzuführen.
Während das alles bereits gut funktioniert, möchten wir die notwendigen Schritte automatisieren, so dass wir die Umgebung mit anderen Entwicklern teilen können. Dies kann einfach umgesetzt werden, indem ein so genannter „Stack“ in Che definiert wird. Ein Stack ist wie eine Vorlage für einen laufenden Workspace. In Objekt-orientierter Terminologie ist ein Stack eine Klasse, während eine laufende Instanz (ein Objekt) Workspace genannt wird.
Stacks lassen sich direkt im Che Dashboard UI definieren, somit müssen wir keinen Code schreiben. Technisch gesehen basiert ein Che-Stack auf einem oder mehreren Docker-Containern. Wenn wir einen Stack zur Verfügung stellen wollen, der mit einer vorinstallierten Eclipse Modeling Edition ausgeliefert wird, wird also zuvor ein entsprechender Docker Container benötigt.
Ein neuer Docker Container wird am einfachsten von einem bereits existierenden abgeleitet. Folgendes Listing zeigt das erstellte Dockerfile, welches die Eclipse Modeling Edition zusätzlich installiert. Die enthaltenen Kommentare sollten das Beispiel selbsterklärend machen.
FROM codenvy/ubuntu_jdk8 MAINTAINER Mathias Hansen mhansen@eclipsesource.com USER root # Install Eclipse Modeling Tools RUN echo "Installing eclipse..." cd / wget -q -O - https://ftp.fau.de/eclipse/technology/epp/downloads/release/neon/1/eclipse-modeling-neon-1-linux-gtk-x86_64.tar.gz | tar zx # Reset to the default user USER user
Anschließend muss der Docker Container gebaut werden:
docker build -t eclipsesource/emfneon_jdk8
Zu guter Letzt kann man das neue Image zu einer Registry oder einem Repository pushen, beispielsweise zu Docker Hub.
Basierend auf dem Docker Container kann man nun einen Che Stack aufsetzen. Um einen neuen Stack zu erzeugen, navigiert man zu der „Stacks“-Sektion in der Che-Sidebar und wählt „Add Stack“. Ein Wizard führt durch die notwendige Konfiguration:
Hier lässt sich das eben erstellte Docker Image auswählen. Zusätzlich kann man Befehle hinzufügen (z.B. unser „Run EMF Code Generator“-Befehl, der im letzten Teil dieser Serie manuell erstellt wurde). Im letzten Schritt, wählt man die Kategorie, unter welcher der Stack aufgeführt wird. Wenn man zu dem Ende der Seite scrollt, kann man außerdem die Stack-Konfiguration im JSON-Format editieren. Das ist praktisch, wenn man beispielsweise seine Stack Konfiguration mit Kollegen teilen will. Um das zu tun, kann man einfach das JSON kopieren und verschicken. Das JSON für unseren EMF Stack sieht wie folgt aus. Sie können das Beispiel direkt kopieren und in die Raw-Ansicht einfügen, um die Stack-Definition selbst auszuprobieren:
{ "name": "EMF", "description": "EMF Stack", "scope": "advanced", "tags": [ "Java 1.8", "EMF" ], "components": [ { "name": "Eclipse Modeling Edition", "version": "Neon.2" } ], "source": { "type": "image", "origin": "codenvy/ubuntu_jdk8" }, "workspaceConfig": { "environments": { "EMF": { "machines": { "dev-machine": { "agents": [ "org.eclipse.che.terminal", "org.eclipse.che.ws-agent", "org.eclipse.che.ssh" ], "servers": {}, "attributes": { "memoryLimitBytes": "2147483648" } }, "EMF": { "agents": [ "org.eclipse.che.terminal", "org.eclipse.che.ssh" ], "servers": {}, "attributes": {} } }, "recipe": { "content": "services:\n dev-machine:\n image: codenvy/ubuntu_jdk8\n EMF:\n image: eclipsesource/emfneon_jdk8\n mem_limit: 2147483648\n", "contentType": "application/x-yaml", "type": "compose" } } }, "name": "default", "defaultEnv": "EMF", "description": null, "commands": [ { "name": "Run EMF Code Generator", "type": "custom", "commandLine": "/eclipse/eclipse -noSplash -data ${current.project.path} -application org.eclipse.emf.codegen.ecore.Generator -model -edit ${current.project.path}/org.eclipse.emf.ecp.makeithappen.model/model/task.genmodel ", "attributes": {} } ] } }
Mit dem definierten Stack lässt sich die EMF-Entwicklungsumgebung bereits mit anderen Programmierern teilen. Der EMF-Codegenerator ist direkt im Che-Workspace enthalten. Dazu muss lediglich eine JSON-Datei importiert werden.
Die Installation von Tooling per Stack in einen Che Workspace ist ein simpler, leichtgewichtiger und trotzdem mächtiger Mechanismus für Extensions. Eigentlich kann jedes Tool, das in einem Docker Container laufen kann, genutzt werden. Dadurch sind wir in der Lage, Che zu erweitern, ohne Code schreiben zu müssen. Daher haben wir die Browser-IDE selbst bisher noch nicht erweitert (abgesehen von dem hinzugefügten Befehl), sondern lediglich den Workspace. Um die IDE selbst anzupassen, muss allerdings doch etwas Code geschrieben sowie eine eigene Version von Che gebaut werden. Diesen Workflow werden wir in unserem nächsten Artikel beschreiben.
Tag 2: Code Generation
Tag 3: Einen Custom Workspace Stack hinzufügen
Hinterlasse einen Kommentar