很榮幸在去年加入到 SmartIDE 產品組,從事開發工作,期間產品經歷了無數個迭代,這是一段非常難忘的經歷......
項目之初一位大牛提出了一個哲學問題 —— 先有雞還是有蛋(SmartIDE 如何開發 SmartIDE),藉着這話題,本文將以 Golang 項目 SmartIDE CLI 爲例進行演示。
概述
OpenAI 的解釋是:SmartIDE 是一款軟件開發環境的工具,它使用容器技術來解決軟件運行環境的一致性、標準化、快速獲取、可擴展性和可維護性問題。它將 IDE 的邊界重新定義爲包括代碼編輯器、運行時、SDK、中間件、應用服務器、配置和底層操作系統等內容。
一些適用的場景:
- 開發環境腐化
- 作爲一個工程獅(工程師),底子裏就是喜歡各種嘗試新事物(新工具、新框架...),有時候玩翻車了,然後告訴領導 / 老闆今天我要閉關修煉(重裝系統)
- 程序員就是多核的電腦,項目之間來回切換,新舊不同的項目,甚至不同的技術棧,開發調試環境不能隔離,折騰不說,很容易帶着問題就上了生產
- 自己的電腦開了一堆的軟件,好像這個不能關,那個也得留着,此時再來調試或者壓測,電腦直接嗝屁了
- 程序員到處救火,一個開發環境搞半天,增加了對客戶或者用戶的響應時間,市場壓力山大
- 項目組進了小鮮肉,一個環境要幫忙裝半天
- 教學用途
- 演示一下,不做更深入的開發
問題:
SmartIDE 的本質還是 WebIDE,所以缺點也是很明顯。
- 體驗上沒有桌面IDE流暢,貌似又回來了原來C/S架構的看不中B/S架構,但是大勢所趨現在的B/S架構的市場佔有率是碾壓式的。
- 服務器資源的限制,給每個用戶、每個項目單獨劃分一定的資源
- 受限於網絡傳輸的速度,這個不太好解決,就算是內網也一樣可能出問題
總結:
SmartIDE 對於市場來說還是比較新,還需要時間才能夠推廣開來,易用性 和 流暢度總會找到一個平衡。
架構
簡單來說,按照用戶的需求,比如技術棧、IDE類型,本地或者Server 通過 CLI工具調度 docker、k8s ,按照編排好的鏡像創建獨立的開發環境給到用戶使用。
開發視圖
從開發的角度,有三個重要的組成部分,CLI、Server、Image
- CLI, 通過 Cobra 框架實現對shell命令的支持,比如 command、args、flag 這些元素,在業務上主要是支持在 本地、遠程主機、k8s 三類資源上創建獨立開發環境
- Server,是一個運行在服務器上的調度平臺,基於 Gin Vue Amin 這個框架的插件式開發,即不動核心代碼在單獨的文件夾中開發業務即可
- Image,爲各種語言編排了獨立的鏡像,並根據共性編排了base鏡像
快速開始
安裝 SmartIDE CLI
參考:https://smartide.dev/zh/docs/install/cli/
建議安裝每日構建版,以mac爲例
# Intel芯片
curl -OL "https://smartidedl.blob.core.chinacloudapi.cn/builds/$(curl -L -s https://smartidedl.blob.core.chinacloudapi.cn/builds/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
環境
## 國內安裝包下載
wget https://smartidedl.blob.core.chinacloudapi.cn/hybrid/sysbox/sysbox-ce_0.5.2-0.linux_amd64.deb
## 國際安裝包下載
wget https://downloads.nestybox.com/sysbox/releases/v0.5.2/sysbox-ce_0.5.2-0.linux_amd64.deb
## 刪除現有的所有容器
docker rm $(docker ps -a -q) -f
## 安裝
sudo apt-get install ./sysbox-ce_0.5.2-0.linux_amd64.deb
## 查看運行狀態,注意 active (running) 文本
sudo systemctl status sysbox -n20
啓動
創建環境
通過CLI創建
## 添加 host
smartide host add {vm-host-ip} --password {vm-password} --username {vm-username}
## 在 vm 上新建工作區
smartide start --host {host-id} --repourl https://github.com/SmartIDE/SmartIDE.git
啓動完成後,會自動在默認瀏覽器中打開webide,在terminal中會自動運行一些shell command,讓它們執行完即可
通過 Server 創建
公網測試地址: https://dev.smartide.cn/
創建成功後,可以點擊icon打開WebIDE
安裝工具
手動安裝go插件
工具安裝
全選,等待安裝結束
調試
進入到CLI目錄下,比如 http://localhost:6900/?folder=vscode-remote://localhost:6900/home/project/cli
創建 lauch.json 文件
基本調試
以version命令爲例
{
"name": "Version",
"type": "go",
"request": "launch",
"console": "integratedTerminal",
"mode": "debug",
"apiVersion": 2,
"program": "${workspaceFolder}",
"showLog": true,
"trace": "verbose",
"args": [
"version"
]
},
Start 命令調試
## 創建目錄
mkdir -p /home/smartide/test
## 添加配置到launch.json
{
"name": "Start",
"type": "go",
"request": "launch",
"apiVersion": 2,
"program": "${workspaceFolder}",
"cwd": "/home/smartide/test",
"console": "integratedTerminal",
"mode": "debug",
"args": [
"start",
"--repourl", "https://github.com/idcf-boat-house/boathouse-calculator.git",
"-d"
]
},
進入斷點