SmartIDE v1.0.23 一個非常不敏捷的發佈
本次發佈包含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個版本,希望我們開源以後能夠有更多社區小夥伴參與進來。

開源地址:
完整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 //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工作區。

Server啟動k8s工作區
SmartIDE Server支持一鍵私有部署,你只需要一台Linux主機即可完成部署,並不依賴k8s集群。在完成Server的部署之後,管理員可以將一個或者多個k8s集群綁定在Server上,並將這些k8s集群分配給不同的團隊使用。
下圖:同時綁定了3個k8s集群和一台linux主機的SmartIDE Server環境

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

通過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遠程模式連接工作

SmartIDE工作區提供VMLC支持,你可以在自己的k8s集群上激活VMLC能力,然後就可以在運行在k8s集群中的SmartIDE工作區內部嵌套運行docker或者k8s集群。開發者可以使用VMLC能力非常方便的創建和銷毀屬於自己的k8s集群,並使用這個個人k8s集群完成雲原生應用的完整開發測試和部署迭代,這將簡化開發者開發雲原生應用的複雜度,並有效減少在正式集群上部署出錯的機率,大幅提升雲原生應用的開發效率。
相關文檔參考:
- Server私有部署操作手冊
- 為SmartIDE Server初始化k8s集群
- 【開源雲原生大會】現場演示:k8s套娃開發調試dapr應用
- 為什麼Dapr是比SpringCloud和Istio更優雅的微服務框架?
- SmartIDE Server 快速啟動教程
團隊共享資源
SmartIDE Server中新增了團隊管理能力,開發者可以根據需要創建團隊並將其他用戶加入團隊。團隊的創建者會成為當前團隊的管理員,作為管理員可以將主機或者k8s集群綁定到團隊並允許其他團隊成員使用這些資源來創建工作區。
下圖:團隊資源會顯示所屬團隊

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 //github.com/idcf-boat-house/boathouse-calculator.git
下圖:通過WebTerminal可以訪問當前工作區中的所有容器,並支持對terminal進行分屏,方便並行操作。

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 "//smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s //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 "//smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s //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 "//smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s //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 "//smartidedl.blob.core.chinacloudapi.cn/releases/$(curl -L -s //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運行容器化工作區

本次我們對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支持的詳情請參考:
使用雲原生技術賦能開發者,是我們一貫的使命。



