1. 程式人生 > >Eclipse Che全方位

Eclipse Che全方位

Eclipse Che全方位

Eclipse下一代IDE,Eclipse Che是為團隊和組織而構建的開發者工作空間伺服器和雲IDE。

概要

核心理念:

  1. 開發環境容器化 ~ 團隊成員在容器中開發;
  2. 開發工具微服務化 ~ git、編譯、執行都是微服務;
  3. IDE的Web化 ~ 通過瀏覽器獲取全部服務;

核心能力:

  • 一鍵部署工作空間
    • 自動化工作空間的建立
    • 模擬生產環境
    • 在k8s的pod中編碼
    • 整合你的版本控制
  • 瞬間啟動專案
    • 與任何人共享工作空間
    • 控制工作空間的許可權
    • 使用瀏覽器IDE或者桌面IDE
    • 定義團隊的資源上限
  • DevOps工作空間平臺
    • 在雲中使用或者在本地安裝
    • 橫向擴充套件或者縱向擴充套件
    • 將原始碼與裝置脫離
    • 控制你的LDAP/AD

總結:

  1. Eclipse Che為軟體開發者提供按需的、可擴充套件的開發環境(即工作空間,包括執行時堆疊、工程檔案和開發工具)。
  2. Eclipse Che基於Docker技術(後來擴充套件到OpenShift、K8s),建立和管理雲開發環境。
  3. Eclipse Che集成了Eclipse Orion(將被Eclipse Theia代替),作為其運行於瀏覽器的程式碼編輯器。

所帶來的改進:

  • 使用Eclipse Che能夠快速地搭建並管理開發環境和測試環境,保證開發環境和測試環境的一致性。
  • 對於為他人提供工作空間的開發者來說,基於Eclipse Che能夠實現DevOps過程。

換言之,使用Docker的優點(相比較於物理機或虛擬機器)是免於部署作業系統;使用Eclipse Che的優點(相比較於原生的Docker),對於個人開發者來說,可以使用Dockerfiles定義執行時環境,而不需要學習Docker語法。對於團隊開發來說,統一的可定製的開發環境和測試環境,並允許擴充套件。

基本

核心域

Che提供了什麼?

  1. 包含執行時和IDE的工作空間
  2. RESTful的工作空間服務
  3. 基於瀏覽器的IDE(SaaS)
  4. 語言、框架和工具外掛
  5. 建立外掛和程式集的SDK

工作空間模型

工作空間與執行時

專案與執行時

以類的形式表示

容器託管

工作空間服務

WebIDE

Che Server

  1. Che是運行於應用伺服器(例如Tomcat)的工作空間伺服器。
  2. Che伺服器本身是一個Docker容器。
  3. 開發者通過Web控制檯/DashBoard管理工作空間和工程
  4. Che server控制工作空間的生命週期,向工作空間注入各種服務,例如工程、原始碼、Che外掛。
  5. Che伺服器和工作空間有內建的Restful API,控制檯和瀏覽器IDE所做的事情都是通過Restful API完成。

工作空間/Workspace

工作空間

  1. 工作空間被定義為工程、環境和命令的集合。工作空間以JSON的資料模型定義,包含工程、執行時、IDE的定義等。
  2. 工作空間(Docker容器)是具有獨立的執行時伺服器,具有獨立的URL,允許多個使用者同時訪問一個工作空間。
  3. 由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

參考Eclipse Theia

Chedir:可移植的工作空間

Chedir的目的:基於Docker提供一個易於配置、可複製、可移植的開發者空間,由單一的一致的工作流程控制,實現個人和團隊效率和靈活性的最大化。

Chedir受到Vagrant的啟發,不同之處在於Vagrant使用單個VM作為環境的廣義抽象。Chedir將此抽象應用於開發者工作空間,包含多個內部環境、來自於程式碼庫的工程原始碼、以及構建和除錯工程所需的工具和命令。準備好之後,開發者可以使用本地IDE或者Eclipse Che內建的雲IDE。

非核心域

  1. 基礎設施:Docker/OpenShift/Kubernets;
  2. 語言、框架、工具:Java/C#/TS,git/terminal/exec
  3. SDK:jdk/dotnet-sdk/nodejs
  4. IDE:Eclipse Theia;
  5. 使用者許可權:JBoss Keycloak;

Che所整合的

版本控制

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;
  • 增加服務端元件和代理,部署到工作空間的機器;
  • 支援新的基礎設施;
  • 通過語言伺服器啟動語言工具;

詳細:

  1. IDE擴充套件,採用GWT技術,將被Eclipse Theia代替;
  2. Che Server擴充套件,或稱其為 Workspace Master擴充套件。
    • Java,JAR檔案,增加或修改Che伺服器的核心API,用於管理工作空間、環境和機器。
    • WS Master擴充套件作為服務部署在Che伺服器。一旦部署,他們會啟動新的管理服務,可以控制使用者、認證和工作空間。
  3. Workspace擴充套件,或稱其為Workspace Agent
    • 建立或修改與工程相關的擴充套件,運行於工作空間機器,能夠本地訪問工程檔案。定義機器的行為、程式碼模板、command instruction、scaffolding command、intelligence
    • 工作空間代理擴充套件和Che核心類庫一起編譯,部署在嵌入的Che伺服器,而這個Che伺服器執行在每個工作空間機器上。這個Che伺服器由位於中心的WS Master Che伺服器所建立和控制,被注入到工作空間機器中。這個嵌入的伺服器將承載你的工作空間代理擴充套件,並提供了一個Che所承載的服務和承載著工程的機器之間的通訊橋樑

REST API

工作空間伺服器API

原始碼地址

遠端與Che master互動,可以做到

  1. 建立開發者環境:建立、更新和刪除工作空間;
  2. 通過建立和刪除runtime來啟動工作空間;
  3. 新增、更新和刪除工作空間環境;
  4. 將命令與工作空間關聯。

工作空間代理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合併)

Codenvy

Eclipse Che + 團隊和組織擴充套件 + DevOps基礎設施 + 企業支援

Codenvy

Codenvy

Red Hat OpenShift

Docker編排的工具平臺

OpenShift

http://dockone.io/article/564

SAP Cloud Platform Web IDE

SAP Cloud Platform Web IDE用於開發和擴充套件SAP Fiori和SAPUI5。SAP Web IDE使用Eclipse Che工作空間伺服器準備和管理所有的開發者工作空間。建立定製的IDE介面,結合自己的技術堆疊、擴充套件、業務邏輯和整合。UI通過RESTful介面與Che互動。

SAP Web IDE

SLX.cloud,分析、優化、實現

Silexica,我們使用最前沿的編譯器技術開發SLX,以用於開發異構多核平臺。使用Eclipse Che和SLX.Cloud我們增加了一種新的交付模式,這種模式使用即可部署的雲工作空間的SaaS模型。不需要下載數個GB大小的二進位制檔案,新使用者可以點選幾下就立即可以開始。

Silexica

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 開發生命週期

  • 生成
  • 構建
  • 執行
  • 定製
  • 除錯