在che中增加EMF支持 - Day3:增加增加一个自定义的Workspace Stack
在上一篇中,我们达成了安装Eclipse和定义自定义指令等。虽然这一切很好,但我们希望这个工作是可扩展的,也就是说可以和我们的朋友或者同事分享这个环境。幸运的是,这个可以通过在che里面定义一个Stack
来实现。Stack某种意义上像一个workspace的蓝图。如果你熟悉面向对象技术的话,stack可以比喻为一个java类,而一个类的实例被称为workspace。Che的Dashboard UI支持stack的定义。我们不需要自己写代码来完成这个工作。技术上说,一个Che的stack基于一或多个Docker文件。如果我们想提供一个实现装好Eclipse modeling Edition
的stack,我们需要提供一个实际包含这个stack的docker image。
无论何时,如果你想创建自己的docker image作为Stack的话,最好是使用一个Che的image作为你的base。这样,你不需要维护一些如Java之类的先决条件。在我们的例子中,我们将使用Java stack的base image。这里是我们使用的Docker文件,如你所见它很小。我们加了一些注释,使其可以让人理解。
FROM codenvy/ubuntu_jdk8 MAINTAINER Mathias Hansen [email protected] 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
在你写完这段dockerfile之后,你需要build它。使用如下指令:
docker build -t eclipsesource/emfneon_jdk8
最后,你可以将你的新image推送进注册表或者储存库,比如Docker Hub
。现在我们可以根据新的Docker镜像设置Che stack。通过Che的UI里面的按键添加新的stack。如下图
如你所见,你可以给你的Stack命一个之后方便寻找的名字,定义你想启动的machine(比如default)以及要使用的docker镜像。除此之外,你可以添加命令(比如上一篇的Run EMF Code Generator
)。最后,选择罗列Stack的目录。如果你滑到屏幕低端,你可以用json格式编辑你的Stack的配置。如果,你想将你的Stack的配置分享给好友的话,可以复制发送就行了。我们EMF stack的Json文件如下,你可以复制进去试试看。
{ "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": {} } ] } }
现在,我们就可以和其他的编程者共享我们的开发环境了。我们的工具已经捆绑进了一个Che的工作空间。你唯一需要的就是一个json文件。
将Tooling装进Che的workspace是很简单的,利用强大又轻巧的扩展机制。基本上,每一个在Docker容器里面可以运行的工具都可以使用。通过这个我们可以扩展Che而不需要任何代码。但是,这里我们除了添加命令,还没有扩展过IDE。这将在下一篇中介绍。