Eclipse Che全方位
Eclipse下一代IDE,Eclipse Che是为团队和组织而构建的开发者工作空间服务器和云IDE。
- 官网:https://www.eclipse.org/che/
- 文档:https://www.eclipse.org/che/docs/
- 源码:https://github.com/eclipse/che/
- 镜像:https://hub.docker.com/u/eclipse/
- 工作空间:https://github.com/eclipse/che-dockerfiles
概要
核心理念:
- 开发环境容器化 ~ 团队成员在容器中开发;
- 开发工具微服务化 ~ git、编译、运行都是微服务;
- IDE的Web化 ~ 通过浏览器获取全部服务;
核心能力:
- 一键部署工作空间
- 自动化工作空间的创建
- 模拟生产环境
- 在k8s的pod中编码
- 集成你的版本控制
- 瞬间启动项目
- 与任何人共享工作空间
- 控制工作空间的权限
- 使用浏览器IDE或者桌面IDE
- 定义团队的资源上限
- DevOps工作空间平台
- 在云中使用或者在本地安装
- 横向扩展或者纵向扩展
- 将源代码与设备脱离
- 控制你的LDAP/AD
总结:
- Eclipse Che为软件开发者提供按需的、可扩展的开发环境(即工作空间,包括运行时堆栈、工程文件和开发工具)。
- Eclipse Che基于Docker技术(后来扩展到OpenShift、K8s),创建和管理云开发环境。
- Eclipse Che集成了Eclipse Orion(将被Eclipse Theia代替),作为其运行于浏览器的代码编辑器。
所带来的改进:
- 使用Eclipse Che能够快速地搭建并管理开发环境和测试环境,保证开发环境和测试环境的一致性。
- 对于为他人提供工作空间的开发者来说,基于Eclipse Che能够实现DevOps过程。
换言之,使用Docker的优点(相比较于物理机或虚拟机)是免于部署操作系统;使用Eclipse Che的优点(相比较于原生的Docker),对于个人开发者来说,可以使用Dockerfiles定义运行时环境,而不需要学习Docker语法。对于团队开发来说,统一的可定制的开发环境和测试环境,并允许扩展。
基本
核心域
Che提供了什么?
- 包含运行时和IDE的工作空间
- RESTful的工作空间服务
- 基于浏览器的IDE(SaaS)
- 语言、框架和工具插件
- 创建插件和程序集的SDK
以类的形式表示
容器托管 工作空间服务 WebIDEChe Server
- Che是运行于应用服务器(例如Tomcat)的工作空间服务器。
- Che服务器本身是一个Docker容器。
- 开发者通过Web控制台/DashBoard管理工作空间和工程
- Che server控制工作空间的生命周期,向工作空间注入各种服务,例如工程、源码、Che插件。
- Che服务器和工作空间有内置的Restful API,控制台和浏览器IDE所做的事情都是通过Restful API完成。
工作空间/Workspace
工作空间- 工作空间被定义为工程、环境和命令的集合。工作空间以JSON的数据模型定义,包含工程、运行时、IDE的定义等。
- 工作空间(Docker容器)是具有独立的运行时服务器,具有独立的URL,允许多个用户同时访问一个工作空间。
- 由Che注入到Workspace的服务
- Che Plug-ins
- Commands
- Projects
- IntelliSense
- Synchronizer
environments: Map<String, getEnvironments> // Workspace envs. A workspace can have multiple envs
defaultEnv: STRING // A workspace should have a default environment
projects: [] // Projects associated with a workspace
commands: [] // Commands associated with a workspace
name: STRING // Workspace name that has to be unique in a namespace
links: [] //
环境
环境工程
工程命令
命令 命令在项目中运行时
运行时WebIDE
Chedir:可移植的工作空间
Chedir的目的:基于Docker提供一个易于配置、可复制、可移植的开发者空间,由单一的一致的工作流程控制,实现个人和团队效率和灵活性的最大化。
Chedir受到Vagrant的启发,不同之处在于Vagrant使用单个VM作为环境的广义抽象。Chedir将此抽象应用于开发者工作空间,包含多个内部环境、来自于代码库的工程源码、以及构建和调试工程所需的工具和命令。准备好之后,开发者可以使用本地IDE或者Eclipse Che内置的云IDE。
非核心域
- 基础设施:Docker/OpenShift/Kubernets;
- 语言、框架、工具:Java/C#/TS,git/terminal/exec
- SDK:jdk/dotnet-sdk/nodejs
- IDE:Eclipse Theia;
- 用户权限:JBoss Keycloak;
版本控制
Eclipse Che使用JGit来支持Git,在IDE和终端,都支持Git。
私人仓库需要安全的SSH连接,而且大多数的开发者对于将要Push的仓库都会通过SSH拷贝这个仓库,所以需要生成SSH键对。
基础设施
基础设施调试器
Che内置的调试器
- Java
- C/C++(使用GDB)
- PHP(使用Zend debugger等)
- Node.js(使用GDB)
整体结构
Che架构扩展性
Che的四种扩展场景:
- 客户端插件,增加新的菜单、面板和其他UI组件,使用GWT;
- 增加服务端组件和代理,部署到工作空间的机器;
- 支持新的基础设施;
- 通过语言服务器启动语言工具;
详细:
- IDE扩展,采用GWT技术,将被Eclipse Theia代替;
- Che Server扩展,或称其为 Workspace Master扩展。
- Java,JAR文件,增加或修改Che服务器的核心API,用于管理工作空间、环境和机器。
- WS Master扩展作为服务部署在Che服务器。一旦部署,他们会启动新的管理服务,可以控制用户、认证和工作空间。
- Workspace扩展,或称其为Workspace Agent
- 创建或修改与工程相关的扩展,运行于工作空间机器,能够本地访问工程文件。定义机器的行为、代码模板、command instruction、scaffolding command、intelligence
- 工作空间代理扩展和Che核心类库一起编译,部署在嵌入的Che服务器,而这个Che服务器运行在每个工作空间机器上。这个Che服务器由位于中心的WS Master Che服务器所创建和控制,被注入到工作空间机器中。这个嵌入的服务器将承载你的工作空间代理扩展,并提供了一个Che所承载的服务和承载着工程的机器之间的通讯桥梁
REST API
工作空间服务器API
远程与Che master交互,可以做到
- 创建开发者环境:创建、更新和删除工作空间;
- 通过创建和删除runtime来启动工作空间;
- 新增、更新和删除工作空间环境;
- 将命令与工作空间关联。
工作空间代理API
集中于项目类型、项目和与项目相关的,例如Git。使用工程API,可以通过编程使用定制的插件或者第三方客户端来创建/导入工作空间中的项目、更新配置、获取文件内容。
制品库
Assembly:程序集是Maven的组件,可产生一个 build artifact。对于Eclipse Che来说,程序集是包含有jars的.war文件,或者是一个tomcat程序集。
Eclipse che程序集包括:
- assembly-ide-war GWT插件,将会编译为JavaScript的浏览器IDE
- assembly-wsagent-war Java插件,运行于workspace代理之内
- assembly-wsagent-server 将工作空间代理打包放入Tomcat,之后在Machine中启动
- assembly-wsmaster-war Java插件,在Che核心服务(master)中运行
- assembly-main 将所有的Che模块打包,成为最终的Tomcat包。
部署路径:
- Assembly-main 整体打包
- Wamaster -> api.war
- Dashboard -> dashboard.war
- Documentation -> docs.war
- Swagger UI -> swagger.war
- 代理(例如terminal, ws-agent)-> lib目录
- Assembly-ide-war -> ide.war -> ROOT.war
- Assembly-wsagent-war -> ROOT.war
- Assembly-wasgent-war Che平台的核心,包含workspace API、用户profile和设置、运行时基础架构的实现。
应用
Codenvy
Codenvy是Che的企业适配,增加了多节点扩展、用户数据库和安全控制。Codenvy目标是开发团队的云工作环境(SaaS),可以认为是Che的企业版。(2017.5 Red Hat合并)
CodenvyEclipse Che + 团队和组织扩展 + DevOps基础设施 + 企业支持
Codenvy CodenvyRed Hat OpenShift
Docker编排的工具平台
OpenShiftSAP Cloud Platform Web IDE
SAP Cloud Platform Web IDE用于开发和扩展SAP Fiori和SAPUI5。SAP Web IDE使用Eclipse Che工作空间服务器准备和管理所有的开发者工作空间。创建定制的IDE界面,结合自己的技术堆栈、扩展、业务逻辑和集成。UI通过RESTful接口与Che交互。
SAP Web IDESLX.cloud,分析、优化、实现
在Silexica,我们使用最前沿的编译器技术开发SLX,以用于开发异构多核平台。使用Eclipse Che和SLX.Cloud我们增加了一种新的交付模式,这种模式使用即可部署的云工作空间的SaaS模型。不需要下载数个GB大小的二进制文件,新用户可以点击几下就立即可以开始。
SilexicaSLX.cloud是如何扩展Eclipse Che的?
SLX.cloud运用Eclipse Che的栈将其核心技术重新打包为一个工作空间镜像。作为用户,你可以充分访问终端,并使用你在C/C++开发过程中通常使用的所有命令。使用我们运行在轻量级容器的工具,性能和表现能够赶上甚至超过典型的桌面电脑。
UI作为Eclipse Che的扩展而构建,使用了例如D3.js这样的web技术,为你的代码创建令人印象深刻的图像化表示。通过实现用于clangd语言服务器的客户端,SLX.cloud进一步支持C/C++的警告,并在你的浏览器中自动完成。
评价
截至2018.10,Cje存在的问题:
- 工作空间自身为单体应用;
- 扩展性差,采用Che的ISV如果为自己的用户提供定制内容,需要构建Che的制件和镜像;
- WebIDE采用GWT技术,技术堆栈落后,扩展开发难度大;
- 工作空间之间共享数据的支持较差;
- 工作空间之间互操作的支持较差;
2018年改进目标与改进方式:
- 支持大规模的企业级应用:基础设施采用K8S,提高管理的易用性,提高运行的稳定性;
- 保证开发环境与运行环境的一致性:采用新的插件模式提供开发服务,例如git代理、sdk等,以微服务的形式提供给工作空间;
- 提高WebIDE插件开发的灵活性:放弃GWT,采用Eclipse Theia作为WebIDE,并对其改进以支持微服务形式的插件;
关于Eclipse Che新的插件模式:
- 插件以微服务形式发布,插件的发布者要管理容器的全部生命周期;
- 用户的工作空间动态地连接这些服务;
- 插件将从工作空间内部来到工作空间外部;
该插件模式将影响:
- 工作空间的所有开发服务:git代理、sdk、语言服务等将以独立的容器和微服务形式出现;
- WebIDE的插件框架和插件开发将完全改变,完全转向微服务方式;
- Eclipse Che的定制化更加简单,将不要修改Che的源码,也不需要重新构建;
- 今后将出现Eclipse Che开发者社区的插件市场;
Che的开发
Eclipse Che 6路线图
Eclipse Che应当提供与世界一流水平的工具向匹配的开发者体验,例如Eclipse IDE和JetBrains。工作空间应该是可配置的用于各种语言,并且为语言服务协议提供最佳的支持,同时囊括所有指名的语言服务器。用户必须能够使用一个一致的命令面板来完成任何动作。VCS应当简化,并更好地集成在IDE。在多个文件间源码导航、搜索和执行动作应当更加自然,并且高效。这些需求同样涉及到IDE的UI和用户体验。
必须向Eclipse Che引入一个扩展模型。贡献者应该能够使用他们所选择的技术来制作扩展。扩展必须拥有独立于Eclipse Che核心的生命周期来发布。Tunaround开发Che扩展必须更加平滑和快速。必须引入扩展点。在Che中创建Che的扩展必须是最佳的。用户必须能够在每个工作空间中选择扩展。还需要引入扩展市场。
Eclipse Che一定不要依赖于特定的和定制的Stack来提供tooling。Tooling必须成为工作空间机器的相伴的侧车。
Che发布
-
专业开发工具
- 类删除/重命名/移动的可靠的Java工具
- 支持TypeScript(代码补全、错误和语法高亮、格式化、重构和代码导航)
- 提升单元测试支持
- 支持线程、条件断点的调试器(进行中)
-
重新设计用户体验
- 新的IDE设计和体验(进行中)
- 重新设计UD,用于工作空间的创建、细节和crane,以及减少代理启动的输出
- 新的工作空间加载序列(进行中)
-
基础设施和基础
- 工作空间基础设施SPI,以支持Docker和Openshift
- 用于Openshift的SPI补全(进行中)
- GWT高级开发模式支持(最大努力)
Che发布后迭代(进行中)
-
扩展机制
- IDE Javascript扩展点
- Self hosting in Che
- GWT改进
-
结构提升
- 易于部署语言服务
- 更快的工作空间加载
- Consolidation of Chefiles and Factories
- 将Java基础结构切换到JDT LS
-
基础设施支持
- 支持Kubernets
-
专业开发工具
- 将Orion编辑器替换为Monaco
- 通用的测试支持
- Git专用的面板
-
其他特性
- Che的引导的工作流和交叉
- Spike on Teletype
关注
Che自身是如何构建的?
示例:EclipseChe支持JSON
https://github.com/eclipse/che/tree/master/samples/sample-plugin-json
- Archetype: Maven术语,用于生成代码模板;
- Assembly: Code或Codenvy的新包。。。
- Standard Assembly;
- Plugin: 扩展打包,
- Extension
Maven相关:Assembly 开发生命周期
- 生成
- 构建
- 运行
- 定制
- 调试
网友评论