SmartIDE v1.0.23 一個非常不敏捷的發(fā)布丨IDCF

作者:徐磊 文章首發(fā)地址:https://smartide.cn/zh/blog/2022-0729-sprint23/

SmartIDE是一群開發(fā)者為所有開發(fā)者開發(fā)的開源云原生IDE,我們的使命是“為開發(fā)者賦予云原生的超能力”!
使用SmartIDE你只需要學會一個簡單的指令 smartide start 即可一鍵搭建任何開發(fā)語言的開源環(huán)境,包括:Java, DotNet, JavaScript/前端,Go語言,Python,PHP,C/C++七種主流技術棧;你也可以在 Windows/MacOS/Linux 三種操作系統(tǒng)上使用SmartIDE,你還可以選擇自己喜歡的IDE工具,包括:VSCode/JetBrains全家桶。
SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已經(jīng)發(fā)布,在超過4000 個 Builds 之后,我們終于發(fā)布了v1.0版本。當前的版本已經(jīng)完成了企業(yè)級云原生CloudIDE的特性閉環(huán),允許個人/團隊/企業(yè)用戶在Windows/Mac/Linux上使用VSCode/JetBrains全家桶/OpenSumi三種IDE開發(fā)7種技術棧下的任何項目,并且支持WebIDE和Hybrid混合模式以及WebTerminal的三種工作區(qū)訪問方式。

本次發(fā)布包含Sprint 20-23的內容,包括的特性有:完整的k8s模式支持,團隊管理能力,簡化使用本地IDE(VSCode/JetBrains Gateway)連接SmartIDE工作區(qū)的Hybrid模式,工作區(qū)擴展組件Web Terminal,ARM處理器支持以及Gitlab CI/CD流水線支持。另外,我們也擴展了VMLC的支持范圍,對 node 和 java 兩種技術棧提供了對應的 VMLC 開發(fā)者鏡像。
CLI代碼正式開源
我們已經(jīng)完成 CLI 代碼的開源,相關代碼已經(jīng)推送到我們在GitHub和Gitee上面的代碼倉庫,包括全套CLI代碼(Golang語言編寫,采用GPLv3開源協(xié)議)。這套代碼從2021年10月24日開始迭代,至今已經(jīng)完成了700多次提交并發(fā)布了超過4000個版本,希望我們開源以后能夠有更多社區(qū)小伙伴參與進來。

開源地址:(點擊文末原文鏈接直接獲取地址)
https://github.com/SmartIDE/SmartIDE/tree/main/cli
https://gitee.com/smartide/SmartIDE/tree/main/cli
完整k8s模式
我們已經(jīng)發(fā)了完整的k8s模式支持,獨立開發(fā)者可以使用CLI將SmartIDE工作區(qū)一鍵部署到k8s集群中,團隊管理員則可以通過SmartIDE Server將k8s集群共享給團隊中的開發(fā)者共享使用。當使用SmartIDE Server創(chuàng)建k8s工作區(qū)的時候,會同時創(chuàng)建指向工作區(qū)的動態(tài)二級域名URL以及ssh連接地址,開發(fā)者可以直接通過這個動態(tài)二級域名訪問自己的工作區(qū)。這意味著開發(fā)者可以通過任何設備訪問運行在k8s中的SmartIDE工作區(qū),包括傳統(tǒng)PC,平板電腦/iPad以及手機。
CLI 啟動k8s工作區(qū)
這種方式適合個人開發(fā)者使用自己私有的k8s集群作為開發(fā)調試環(huán)境使用,開發(fā)者只需要在本地配置了k8s訪問密鑰(默認位置 ~/.kube/config),即可通過以下指令將SmartIDE云端工作區(qū)部署到k8s集群中。一旦啟動完畢,cli會通過k8s的kubectl指令自動完成工作區(qū)內容器端口到localhost端口的映射,開發(fā)者即可通過 localhost 上的端口訪問這個運行在k8s中的工作區(qū)。
使用CLI直接部署k8s工作區(qū)示例腳本如下
## cli 一鍵部署k8s工作區(qū)指令smartide start --k8s <當前集群> \--repourl https://github.com/idcf-boat-house/boathouse-calculator.git \--filepath .ide/k8s.ide.yaml## cli 獲取工作區(qū)列表指令,可以用來獲取 工作區(qū)Id 并查看工作區(qū)運行狀態(tài)smartide list## cli 刪除工作區(qū)smartide remove <工作區(qū)Id>
下圖:使用cli啟動完成k8s工作區(qū)效果如下,同時使用VSCode WebIDE,VSCode桌面版和JetBrains Webstorm遠程模式連接k8s工作區(qū)。

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

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

通過k8s工作區(qū)對外暴露的ssh連接地址,開發(fā)者可以直接使用本地終端程序連接到SmartIDE工作區(qū)并通過terminal完成各種操作。同時,開發(fā)者也可以使用VSCode以及JetBrains Gateway的ssh遠程連接能力將本地的VSCode或者JetBrains系列的IDE(包括:IntelliJ IDEA, PyCharm, GoLand, WebStorm等等)連接到SmartIDE的遠程工作,這樣開發(fā)者可以同時兼顧本地IDE的快速操作體驗以及遠程工作區(qū)帶來的各種好處。
下圖:使用Server啟動的k8s工作區(qū),同時通過VSCode WebIDE, VSCode桌面端和IDEA IntelliJ遠程模式連接工作

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

Hybrid混動模式優(yōu)化 - VSCode SSH Remote和 JetBrains Gateway 支持
我們簡化了VSCode SSH Remote連接SmartIDE工作區(qū)的操作步驟,當開發(fā)者使用CLI啟動工作區(qū)的時候,CLI會自動在 .ssh/config 文件中添加遠程連接,這時開發(fā)者只需要打開VSCode的遠程連接插件,即可看到已經(jīng)配置好的遠程連接,直接點擊即可完成連接。在這個過程中,SmartIDE還會自動更新遠程工作區(qū)容器中的 ~/.ssh/authorizedkeys 文件,將本地的ssh公鑰添加進去,這樣開發(fā)者在連接遠程工作區(qū)的時候就不再需要輸入密碼,可以實現(xiàn)一鍵連接。
對于更喜歡使用JetBrains系列IDE的開發(fā)者來說,你仍然需要手工在JetBrains Gateway中創(chuàng)建遠程連接才能使用Hybrid模式,不過以上的authorizedkey設置對JetBrains Gateway同樣有效,因此連接過程也會更加簡單。我們后續(xù)也會繼續(xù)優(yōu)化對JetBrains遠程工作模式的支持,實現(xiàn)一鍵連接能力。
WebTerminal 支持
為了方便開發(fā)者使用terminal訪問SmartIDE工作區(qū),我們提供了一個工作區(qū)擴展(Workspace AddOn),開發(fā)者可以在創(chuàng)建工作區(qū)的時候添加 –addon webterminal 即可在工作區(qū)中添加基于瀏覽器的終端窗口。雖然在VSCode以及JetBrains的WebIDE中都提供了terminal功能,但是提供一個獨立的終端窗口仍然會大幅方便開發(fā)者對工作區(qū)進行管理,比如當你需要運行一個駐守進程,需要訪問工作區(qū)中的其他容器或者希望使用類似Vim編輯器時。
通過添加 –addon webterminal 參數(shù)到本地/主機模式的cli啟動命令中即可在環(huán)境中增加WebTerminal功能,示例指令如下
## 添加 --addon webterminal 啟動工作區(qū)smartide start --host 1 --addon webterminal https://github.com/idcf-boat-house/boathouse-calculator.git
下圖:通過WebTerminal可以訪問當前工作區(qū)中的所有容器,并支持對terminal進行分屏,方便并行操作。

SmartIDE WebTerminal是我們基于開源項目 ysk2014/webshell 改造完成的,因此采用和原項目同樣的MIT開源協(xié)議。WebTerminal也是我們提供的第一個工作區(qū)擴展(Workspace Addon),后續(xù)我們會逐步提供更多的擴展,加強開發(fā)者對遠程工作區(qū)的操作能力。
SmartIDE WebTerminal 的開源地址:
https://github.com/SmartIDE/smartide-web-terminal
https://gitee.com/smartide/smartide-web-terminal
ARM支持
本次迭代我們提供了對ARM處理器的支持,當前ARM處理器已經(jīng)在很多領域得到了大規(guī)模的應用,包括:PC機(蘋果的M系列電腦),移動設備,邊緣計算及IoT以及服務器。SmartIDE與其他CloudIDE不同的是,我們將云端/遠程工作區(qū)的調度能力封裝成了一個獨立的cli程序(已開源),并利用go語言的跨平臺特性支持在多種操作系統(tǒng)上運行cli,這為SmartIDE提供了其他任何CloudIDE都不具備的跨平臺跨設備運行能力。這次我們針對ARM處理器進行的支持進一步將我們的跨端能力進行了大幅的擴展,未來我們將探索將CloudIDE嵌入到移動設備,邊緣計算和IoT領域,為開發(fā)者提供無所不在的開發(fā)環(huán)境管理能力。
我們同時優(yōu)化了安裝腳本,提供了ARM版本對應的安裝通道,包括MacOS和Linux兩種操作系統(tǒng)。
Mac穩(wěn)定版安裝
# 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穩(wěn)定版安裝
# 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運行容器化工作區(qū)

本次我們對ARM處理器所提供的支持包括
Linux和MacOS操作系統(tǒng)版本的cli提供amd64和arm64兩種build,并已經(jīng)發(fā)布至每日構建和穩(wěn)定版通道
SmartIDE Server相關鏡像(smartide-web和smartide-api)的arm版鏡像以及相關依賴鏡像(包括tekton流水線相關的基礎組件鏡像),已經(jīng)推送至阿里云鏡像倉庫和DockerHub
包含 smartide-cli arm64版本的 tekton-task 鏡像,已經(jīng)推送至阿里云鏡像倉庫和DockerHub
開發(fā)者鏡像的arm版本,已經(jīng)推送到阿里云鏡像倉庫和DockerHub
Server一鍵部署腳本提供了內置的arm支持,可以自動識別當前部署環(huán)境,自動使用arm相關資源,具體請參考 Server私有部署操作手冊
具體資源內容和鏈接可以參考
https://github.com/SmartIDE/SmartIDE/issues/29
GitLab CI 流水線支持
我們將SmartIDE的核心功能設計成CLI的一個主要考慮就是允許開發(fā)者以最低的成本,最簡單的方式將 云原生IDE 的能力集成到自己的系統(tǒng)中。在本次迭代中,我們開始進一步踐行這個使命,在 CLI中提供了一個 mode=pipeline 的運行模式,這個模式允許用戶在自己的流水線中使用 SmartIDE CLI 去創(chuàng)建工作區(qū),本次只開放了遠程主機模式,未來也會開放k8s模式。
使用場景:
擴展現(xiàn)有的企業(yè)流水線系統(tǒng)變成一個CloudIDE管理系統(tǒng)
部署帶有對應版本代碼的測試環(huán)境,這將方便開發(fā)者對測試環(huán)境中的問題進行定位并直接在測試環(huán)境中進行調試
針對某一個特定的歷史版本創(chuàng)建開發(fā)調測環(huán)境,當我們收到用戶的缺陷報告時往往發(fā)現(xiàn)自己開發(fā)環(huán)境中的代碼版本已經(jīng)大大超前于用戶使用的版本了。這種情況開發(fā)者可以使用SmartIDE創(chuàng)建一個臨時的環(huán)境,并直接定位于一個特定的歷史版本(直接使用commitId),這樣可以避免污染開發(fā)者本地,也可以避免開發(fā)者在修復問題之后將新版本(未經(jīng)測試)的代碼通過HOTFIX夾帶上線。
使用方法非常簡單,將下面 .gitlab-ci.yml 放置在自己的gitlab代碼庫中即可擴展 gitlab-ci 流水線具備管理 云原生IDE 的能力。
variables:#remote host information which you can deploy your dev workspace and open it in WebIDESMARTIDE_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 eventsSMARTIDE_CALLBACK_API_ADDRESS: <callback api address>stages:setup_dev_envsmartide:stage: setup_dev_envimage:name: registry.cn-hangzhou.aliyuncs.com/smartide/smartide-cli:4475entrypoint: [""]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流水線腳本將會使用當前的代碼庫創(chuàng)建云端工作區(qū),開發(fā)者可以通過定制 .ide.yaml 配置文件在這個云端工作區(qū)中嵌入自己所需要的IDE,中間件或者其他環(huán)境,具體做法請參考 項目適配 和 鏡像和模版。
本次迭代中我們針對 SmartIDE CLI 的現(xiàn)有功能進行了簡單擴展,在現(xiàn)有的 client | server 兩種運行模式之上提供了 pipeline 的運行模式。這種模式其實是一種headless模式,cli不會試圖打開瀏覽器,也不會調用 smartide server 的 api,而是允許用戶自行指定一個 callback 地址 $SMARTIDE_CALLBACK_API_ADDRESS。當CLI完成工作區(qū)創(chuàng)建工作后,會按照既定json格式將工作區(qū)詳情回調通知給這個地址。使用這種方式,開發(fā)者可以非常簡單的將 CloudIDE能力 集成到現(xiàn)有的企業(yè)級DevOps平臺中,需要的僅僅是一個流水線調度工具(gitlab-ci, jenkins, azure pipeline或者其他任何支持命令行調用的工具)和一個接收回調json格式的接口。
本次提供的gitlab-ci集成示例只是一個開始,當前SmartIDE CLI的特性已經(jīng)形成閉環(huán),我們在后續(xù)迭代中會開始探索提供更多的集成方式,讓開發(fā)者可以以最簡單的方式享受到云端開發(fā)的好處。
有關gitlab-ci支持的詳情請參考:
https://github.com/SmartIDE/SmartIDE/issues/30
使用云原生技術賦能開發(fā)者,是我們一貫的使命。

2022年9月17-18日將在北京舉辦,36小時內從0到1打造并發(fā)布一款產(chǎn)品。
企業(yè)組隊參賽&個人參賽均可,趕緊上車~??


