Eclipse Che全方位
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
以類的形式表示
Che 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的四種擴充套件場景:
- 客戶端外掛,增加新的選單、面板和其他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合併)
Eclipse Che + 團隊和組織擴充套件 + DevOps基礎設施 + 企業支援
Red Hat OpenShift
Docker編排的工具平臺
SAP Cloud Platform Web IDE
SAP Cloud Platform Web IDE用於開發和擴充套件SAP Fiori和SAPUI5。SAP Web IDE使用Eclipse Che工作空間伺服器準備和管理所有的開發者工作空間。建立定製的IDE介面,結合自己的技術堆疊、擴充套件、業務邏輯和整合。UI通過RESTful介面與Che互動。
SLX.cloud,分析、優化、實現
在Silexica,我們使用最前沿的編譯器技術開發SLX,以用於開發異構多核平臺。使用Eclipse Che和SLX.Cloud我們增加了一種新的交付模式,這種模式使用即可部署的雲工作空間的SaaS模型。不需要下載數個GB大小的二進位制檔案,新使用者可以點選幾下就立即可以開始。
SLX.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 開發生命週期
- 生成
- 構建
- 執行
- 定製
- 除錯