在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。如下图

在che中增加EMF支持 - Day3:增加增加一个自定义的Workspace 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。这将在下一篇中介绍。

相关推荐