在上一篇中,我们达成了安装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 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
在你写完这段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。这将在下一篇中介绍。