使用 SmartIDE 開發golang專案

2022-12-14 12:00:40

很榮幸在去年加入到 SmartIDE 產品組,從事開發工作,期間產品經歷了無數個迭代,這是一段非常難忘的經歷......

專案之初一位大牛提出了一個哲學問題 —— 先有雞還是有蛋(SmartIDE 如何開發 SmartIDE),藉著這話題,本文將以 Golang 專案 SmartIDE CLI 為例進行演示。

概述

官網概述:https://smartide.cn/zh/docs/overview/

OpenAI 的解釋是:SmartIDE 是一款軟體開發環境的工具,它使用容器技術來解決軟體執行環境的一致性、標準化、快速獲取、可延伸性和可維護性問題。它將 IDE 的邊界重新定義為包括程式碼編輯器、執行時、SDK、中介軟體、應用伺服器、設定和底層作業系統等內容。

一些適用的場景:

  1. 開發環境腐化
  • 作為一個工程獅(工程師),底子裡就是喜歡各種嘗試新事物(新工具、新框架...),有時候玩翻車了,然後告訴領導 / 老闆今天我要閉關修煉(重灌系統)
  • 程式設計師就是多核的電腦,專案之間來回切換,新舊不同的專案,甚至不同的技術棧,開發偵錯環境不能隔離,折騰不說,很容易帶著問題就上了生產
  • 自己的電腦開了一堆的軟體,好像這個不能關,那個也得留著,此時再來偵錯或者壓測,電腦直接嗝屁了
  • 程式設計師到處救火,一個開發環境搞半天,增加了對客戶或者使用者的響應時間,市場壓力山大
  • 專案組進了小鮮肉,一個環境要幫忙裝半天
  1. 教學用途
  • 演示一下,不做更深入的開發

問題:
SmartIDE 的本質還是 WebIDE,所以缺點也是很明顯。

  • 體驗上沒有桌面IDE流暢,貌似又回來了原來C/S架構的看不中B/S架構,但是大勢所趨現在的B/S架構的市場佔有率是碾壓式的。
  • 伺服器資源的限制,給每個使用者、每個專案單獨劃分一定的資源
  • 受限於網路傳輸的速度,這個不太好解決,就算是內網也一樣可能出問題

總結:
SmartIDE 對於市場來說還是比較新,還需要時間才能夠推廣開來,易用性 和 流暢度總會找到一個平衡。

架構

簡單來說,按照使用者的需求,比如技術棧、IDE型別,本地或者Server 通過 CLI工具排程 docker、k8s ,按照編排好的映象建立獨立的開發環境給到使用者使用。

畫圖工具:https://app.diagrams.net/

開發檢視

從開發的角度,有三個重要的組成部分,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

環境

參考 https://smartide.dev/zh/docs/install/docker/linux/

## 國內安裝包下載
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"
            ]
        },

進入斷點