SmartIDE v1.0.23 一個非常不敏捷的釋出

2022-08-07 06:00:36
SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已經發布,在超過4000 個 Builds 之後,我們終於釋出了v1.0版本。當前的版本已經完成了企業級雲原生CloudIDE的特性閉環,允許個人/團隊/企業使用者在Windows/Mac/Linux上使用VSCode/JetBrains全家桶/OpenSumi三種IDE開發7種技術棧下的任何專案,並且支援WebIDE和Hybrid混合模式以及WebTerminal的三種工作區存取方式。

本次釋出包含Sprint 20-23的內容,包括的特性有:完整的k8s模式支援,團隊管理能力,簡化使用本地IDE(VSCode/JetBrains Gateway)連線SmartIDE工作區的Hybrid模式,工作區擴充套件元件Web Terminal,ARM處理器支援以及Gitlab CI/CD流水線支援。另外,我們也擴充套件了VMLC的支援範圍,對 node 和 java 兩種技術棧提供了對應的 VMLC 開發者映象。

CLI程式碼正式開源

我們已經完成 CLI 程式碼的開源,相關程式碼已經推播到我們在GitHub和Gitee上面的程式碼倉庫,包括全套CLI程式碼(Golang語言編寫,採用GPLv3開源協定)。這套程式碼從2021年10月24日開始迭代,至今已經完成了700多次提交併行布了超過4000個版本,希望我們開源以後能夠有更多社群小夥伴參與進來。

Sprint23 Version 1.0

開源地址:

完整k8s模式

我們已經發了完整的k8s模式支援,獨立開發者可以使用CLI將SmartIDE工作區一鍵部署到k8s叢集中,團隊管理員則可以通過SmartIDE Server將k8s叢集共用給團隊中的開發者共用使用。當使用SmartIDE Server建立k8s工作區的時候,會同時建立指向工作區的動態二級域名URL以及ssh連線地址,開發者可以直接通過這個動態二級域名存取自己的工作區。這意味著開發者可以通過任何裝置存取執行在k8s中的SmartIDE工作區,包括傳統PC,平板電腦/iPad以及手機。

CLI 啟動k8s

這種方式適合個人開發者使用自己私有的k8s叢集作為開發偵錯環境使用,開發者只需要在本地設定了k8s存取金鑰(預設位置 ~/.kube/config),即可通過以下指令將SmartIDE雲端工作區部署到k8s叢集中。一旦啟動完畢,cli會通過k8s的kubectl指令自動完成工作區內容器埠到localhost埠的對映,開發者即可通過 localhost 上的埠存取這個執行在k8s中的工作區。

使用CLI直接部署k8s工作區範例指令碼如下

## cli 一鍵部署k8s工作區指令
smartide start --k8s <當前叢集> \
  --repourl https://github.com/idcf-boat-house/boathouse-calculator.git \
  --filepath .ide/k8s.ide.yaml
## cli 獲取工作區列表指令,可以用來獲取 工作區Id 並檢視工作區執行狀態
smartide list
## cli 刪除工作區
smartide remove <工作區Id>

下圖:使用cli啟動完成k8s工作區效果如下,同時使用VSCode WebIDE,VSCode桌面版和JetBrains Webstorm遠端模式連線k8s工作區。

Sprint23 Version 1.0

Server啟動k8s工作區

SmartIDE Server支援一鍵私有部署,你只需要一臺Linux主機即可完成部署,並不依賴k8s叢集。在完成Server的部署之後,管理員可以將一個或者多個k8s叢集繫結在Server上,並將這些k8s叢集分配給不同的團隊使用。

下圖:同時繫結了3個k8s叢集和一臺linux主機的SmartIDE Server環境

Sprint23 Version 1.0

使用Server部署k8s工作區非常簡單,只要在 工作區 | 工作區管理 | 新增工作區 的時候選擇對應的k8s資源即可。

下圖:使用k8s資源新增工作區

Sprint23 Version 1.0

通過k8s工作區對外暴露的ssh連線地址,開發者可以直接使用本地終端程式連線到SmartIDE工作區並通過terminal完成各種操作。同時,開發者也可以使用VSCode以及JetBrains Gateway的ssh遠端連線能力將原生的VSCode或者JetBrains系列的IDE(包括:IntelliJ IDEA, PyCharm, GoLand, WebStorm等等)連線到SmartIDE的遠端工作,這樣開發者可以同時兼顧本地IDE的快速操作體驗以及遠端工作區帶來的各種好處。

下圖:使用Server啟動的k8s工作區,同時通過VSCode WebIDE, VSCode桌面端和IDEA IntelliJ遠端模式連線工作

Sprint23 Version 1.0

SmartIDE工作區提供VMLC支援,你可以在自己的k8s叢集上啟用VMLC能力,然後就可以在執行在k8s叢集中的SmartIDE工作區內部巢狀執行docker或者k8s叢集。開發者可以使用VMLC能力非常方便的建立和銷燬屬於自己的k8s叢集,並使用這個個人k8s叢集完成雲原生應用的完整開發測試和部署迭代,這將簡化開發者開發雲原生應用的複雜度,並有效減少在正式叢集上部署出錯的機率,大幅提升雲原生應用的開發效率。

相關檔案參考:

團隊共用資源

SmartIDE Server中新增了團隊管理能力,開發者可以根據需要建立團隊並將其他使用者加入團隊。團隊的建立者會成為當前團隊的管理員,作為管理員可以將主機或者k8s叢集繫結到團隊並允許其他團隊成員使用這些資源來建立工作區。

下圖:團隊資源會顯示所屬團隊

Sprint23 Version 1.0

Hybrid混動模式優化 - VSCode SSH Remote 和 JetBrains Gateway 支援

我們簡化了VSCode SSH Remote連線SmartIDE工作區的操作步驟,當開發者使用CLI啟動工作區的時候,CLI會自動在 .ssh/config 檔案中新增遠端連線,這時開發者只需要開啟VSCode的遠端連線外掛,即可看到已經設定好的遠端連線,直接點選即可完成連線。在這個過程中,SmartIDE還會自動更新遠端工作區容器中的 ~/.ssh/authorizedkeys 檔案,將原生的ssh公鑰新增進去,這樣開發者在連線遠端工作區的時候就不再需要輸入密碼,可以實現一鍵連線。

對於更喜歡使用JetBrains系列IDE的開發者來說,你仍然需要手工在JetBrains Gateway中建立遠端連線才能使用Hybrid模式,不過以上的authorizedkey設定對JetBrains Gateway同樣有效,因此連線過程也會更加簡單。我們後續也會繼續優化對JetBrains遠端工作模式的支援,實現一鍵連線能力。

WebTerminal 支援

為了方便開發者使用terminal存取SmartIDE工作區,我們提供了一個工作區擴充套件(Workspace AddOn),開發者可以在建立工作區的時候新增 –addon webterminal 即可在工作區中新增基於瀏覽器的終端視窗。雖然在VSCode以及JetBrains的WebIDE中都提供了terminal功能,但是提供一個獨立的終端視窗仍然會大幅方便開發者對工作區進行管理,比如當你需要執行一個駐守程序,需要存取工作區中的其他容器或者希望使用類似Vim編輯器時。

通過新增 –addon webterminal 引數到本地/主機模式的cli啟動命令中即可在環境中增加WebTerminal功能,範例指令如下

## 新增 --addon webterminal 啟動工作區
 smartide start --host 1 --addon webterminal https://github.com/idcf-boat-house/boathouse-calculator.git

下圖:通過WebTerminal可以存取當前工作區中的所有容器,並支援對terminal進行分屏,方便並行操作。

Sprint23 Version 1.0

SmartIDE WebTerminal是我們基於開源專案 ysk2014/webshell 改造完成的,因此採用和原專案同樣的MIT開源協定。WebTerminal也是我們提供的第一個工作區擴充套件(Workspace Addon),後續我們會逐步提供更多的擴充套件,加強開發者對遠端工作區的操作能力。

SmartIDE WebTerminal 的開源地址:

ARM支援

本次迭代我們提供了對ARM處理器的支援,當前ARM處理器已經在很多領域得到了大規模的應用,包括:PC機(蘋果的M系列電腦),移動裝置,邊緣計算及IoT以及伺服器。SmartIDE與其他CloudIDE不同的是,我們將雲端/遠端工作區的排程能力封裝成了一個獨立的cli程式(已開源),並利用go語言的跨平臺特性支援在多種作業系統上執行cli,這為SmartIDE提供了其他任何CloudIDE都不具備的跨平臺跨裝置執行能力。這次我們針對ARM處理器進行的支援進一步將我們的跨端能力進行了大幅的擴充套件,未來我們將探索將CloudIDE嵌入到移動裝置,邊緣計算和IoT領域,為開發者提供無所不在的開發環境管理能力。

我們同時優化了安裝指令碼,提供了ARM版本對應的安裝通道,包括MacOS和Linux兩種作業系統。

Mac穩定版安裝

# MacOS

# Intel晶片
curl -OL  "https://smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s https://smartidedl.blob.core.chinacloudapi.cn/releases/stable.txt)/smartide-osx" \
&& mv -f smartide-osx /usr/local/bin/smartide \
&& ln -s -f /usr/local/bin/smartide /usr/local/bin/se \
&& chmod +x /usr/local/bin/smartide

# Apple晶片(比如M1/M2系列)
curl -OL  "https://smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s https://smartidedl.blob.core.chinacloudapi.cn/releases/stable.txt)/smartide-osx-arm64" \
&& mv -f smartide-osx-arm64 /usr/local/bin/smartide \
&& ln -s -f /usr/local/bin/smartide /usr/local/bin/se \

Linux穩定版安裝

# Linux 
# x86 架構處理器
curl -OL  "https://smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s https://smartidedl.blob.core.chinacloudapi.cn/releases/stable.txt)/smartide-linux-amd64" \
&& sudo mv -f smartide-linux-amd64 /usr/local/bin/smartide \
&& sudo ln -s -f /usr/local/bin/smartide /usr/local/bin/se \
&& sudo chmod +x /usr/local/bin/smartide

# arm 架構處理器
curl -OL  "https://smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s https://smartidedl.blob.core.chinacloudapi.cn/releases/stable.txt)/smartide-linux-arm64" \
&& sudo mv -f smartide-linux-arm64 /usr/local/bin/smartide \
&& sudo ln -s -f /usr/local/bin/smartide /usr/local/bin/se \
&& sudo chmod +x /usr/local/bin/smartide

下圖:在一臺 Apple MacPro M1 上使用ARM原生版本的SmartIDE CLI執行容器化工作區

Sprint23 Version 1.0

本次我們對ARM處理器所提供的支援包括

  • Linux和MacOS作業系統版本的cli提供amd64和arm64兩種build,並已經發布至每日構建和穩定版通道
  • SmartIDE Server相關映象(smartide-web和smartide-api)的arm版映象以及相關依賴映象(包括tekton流水線相關的基礎元件映象),已經推播至阿里雲映象倉庫和DockerHub
  • 包含 smartide-cli arm64版本的 tekton-task 映象,已經推播至阿里雲映象倉庫和DockerHub
  • 開發者映象的arm版本,已經推播到阿里雲映象倉庫和DockerHub
  • Server一鍵部署指令碼提供了內建的arm支援,可以自動識別當前部署環境,自動使用arm相關資源,具體請參考 Server私有部署操作手冊

具體資源內容和連結可以參考

GitLab CI 流水線支援

我們將SmartIDE的核心功能設計成CLI的一個主要考慮就是允許開發者以最低的成本,最簡單的方式將 雲原生IDE 的能力整合到自己的系統中。在本次迭代中,我們開始進一步踐行這個使命,在 CLI中提供了一個 mode=pipeline 的執行模式,這個模式允許使用者在自己的流水線中使用 SmartIDE CLI 去建立工作區,本次只開放了遠端主機模式,未來也會開放k8s模式。

使用場景:

  • 擴充套件現有的企業流水線系統變成一個CloudIDE管理系統
  • 部署帶有對應版本程式碼的測試環境,這將方便開發者對測試環境中的問題進行定位並直接在測試環境中進行偵錯
  • 針對某一個特定的歷史版本建立開發調測環境,當我們收到使用者的缺陷報告時往往發現自己開發環境中的程式碼版本已經大大超前於使用者使用的版本了。這種情況開發者可以使用SmartIDE建立一個臨時的環境,並直接定位於一個特定的歷史版本(直接使用commitId),這樣可以避免汙染開發者本地,也可以避免開發者在修復問題之後將新版本(未經測試)的程式碼通過HOTFIX夾帶上線。

使用方法非常簡單,將下面 .gitlab-ci.yml 放置在自己的gitlab程式碼庫中即可延伸 gitlab-ci 流水線具備管理 雲原生IDE 的能力。

variables:

  #remote host information which you can deploy your dev workspace and open it in WebIDE
  SMARTIDE_REMOTE_HOST: <remote dev/test env>
  SMARTIDE_REMOTE_HOST_USERNAME: <host username>
  SMARTIDE_REMOTE_HOST_PASSWORD: <host password>
  #git repo you want to develop in smartide,  you can use predefined variable  $CI_REPOSITORY_URL 
  #for the URL to clone the current Git repository (the URL already contain token, so you dont need to 
  #consider Authentication problem, for custom git repo url, you need resolve authentication yourself with token or ssh..)
  SMARTIDE_GIT_REPO_ADDRESS: $CI_REPOSITORY_URL
  #callback api address which you want to receive workspace information and trigger other custom events
  SMARTIDE_CALLBACK_API_ADDRESS: <callback api address>

stages:
    - setup_dev_env

smartide:
    stage: setup_dev_env
    image: 
        name: registry.cn-hangzhou.aliyuncs.com/smartide/smartide-cli:4475
        entrypoint: [""]
    script:
        - smartide version
        - smartide start --mode pipeline --isInsightDisabled false --host $SMARTIDE_REMOTE_HOST --username $SMARTIDE_REMOTE_HOST_USERNAME --password $SMARTIDE_REMOTE_HOST_PASSWORD --callback-api-address $SMARTIDE_CALLBACK_API_ADDRESS $SMARTIDE_GIT_REPO_ADDRESS

以上gitlab-ci流水線指令碼將會使用當前的程式碼庫建立雲端工作區,開發者可以通過客製化 .ide.yaml 組態檔在這個雲端工作區中嵌入自己所需要的IDE,中介軟體或者其他環境,具體做法請參考 專案適配 和 映象和模版

本次迭代中我們針對 SmartIDE CLI 的現有功能進行了簡單擴充套件,在現有的 client | server 兩種執行模式之上提供了 pipeline 的執行模式。這種模式其實是一種headless模式,cli不會試圖開啟瀏覽器,也不會呼叫 smartide server 的 api,而是允許使用者自行指定一個 callback 地址 $SMARTIDE_CALLBACK_API_ADDRESS。當CLI完成工作區建立工作後,會按照既定json格式將工作區詳情回撥通知給這個地址。使用這種方式,開發者可以非常簡單的將 CloudIDE能力 整合到現有的企業級DevOps平臺中,需要的僅僅是一個流水線排程工具(gitlab-ci, jenkins, azure pipeline或者其他任何支援命令列呼叫的工具)和一個接收回撥json格式的介面。

本次提供的gitlab-ci整合範例只是一個開始,當前SmartIDE CLI的特性已經形成閉環,我們在後續迭代中會開始探索提供更多的整合方式,讓開發者可以以最簡單的方式享受到雲端開發的好處。

有關gitlab-ci支援的詳情請參考:

使用雲原生技術賦能開發者,是我們一貫的使命。