README.exe 是的,你看錯是EXE
作為開發者,拿到一個新的程式碼庫的時候一般都會先去看README文件,通過這個文件可以知道這套程式碼所需要安裝的環境,工具和操作方式。這件事情本來應該是一件很愉悅的事情,因為每一套新程式碼其實都是開發者的新玩具,拿到新玩具的心情那肯定是不錯的。但是,當你閱讀玩具說明書之後,發現這份說明書完全不配套的時候,那心裡一定是一萬匹草泥馬在奔騰。當然,這也很容易理解,開發者不愛寫文檔,特別是那些沒有用的文檔。至少,README對寫的人來說其實沒啥用,因為寫的人都已經清楚了文檔中的內容,至於看的人感受如何,那就呵呵吧。
這個問題的根源在於README只能看,不能運行!如果我們能夠讓README活起來,從 README.md 變成 README.exe,那是不是就可以解決這個問題了呢?答案是肯定的!因為寫的人自己也可以用這份文檔來啟動項目。這樣,寫文檔的人有了動力,看(運行)文檔的人也會很爽。
這就是SmartIDE的核心功能: IDE as Code能力。
神奇的IDE配置文件
SmartIDE最初始的設計靈感就是如何能夠讓README活起來?為了做到這一點,我們設計了一個 IDE配置文件 (默認文件名 .ide.yaml)文件格式。這個文件中完整描述了運行當前程式碼所需要的環境配置,包括 基礎環境SDK,應用伺服器,應用埠,配置文件,網路依賴以及所使用的IDE工具。有了這個文件,開發者就可以真正實現一鍵啟動開發調試,而不會再聽到:「在我這裡工作呀,是你的環境問題!」 這種駭人聽聞的抱怨。
有了這個文件,任何人都可以使用一個簡單的指令來一鍵搭建一模一樣的開發環境,指令如下:
smartide start //github.com/idcf-boat-house/boathouse-calculator
這個指令會自動識別程式碼庫中的 IDE配置文件,根據文件中對開發環境的描述完成獲取開發者鏡像、啟動開發容器、克隆程式碼、運行初始化腳本等一系列動作,最終一個 完整可運行的環境 呈現在開發者的面前,下面這段影片展示了整個運行過程:
IDE配置文件詳解
以上示例中所使用的 .ide.yaml 文件如下
version: smartide/v0.3
orchestrator:
type: docker-compose
version: 3
workspace:
dev-container: # 開發者容器設置
service-name: boathouse-calculator
ports: # 申明埠
tools-webide-vscode: 6800
tools-ssh: 6822
apps-application: 3001
ide-type: vscode #sdk-only | vscode | opensumi | jb-projector
volumes: # 本地配置映射,支援映射git-config和ssh密鑰資訊進入容器
git-config: true
ssh-key: true
command: # 環境啟動腳本
- npm config set registry //registry.npmmirror.com
- npm install
services:
boathouse-calculator:
image: registry.cn-hangzhou.aliyuncs.com/smartide/smartide-node-v2-vscode:all-version
restart: always
environment:
ROOT_PASSWORD: root123
LOCAL_USER_PASSWORD: root123
volumes:
- .:/home/project
ports:
- 3001:3001
- 6822:22
- 6800:3000
networks:
- smartide-network
networks:
smartide-network:
external: true
這個文件內容非常通俗易懂,是個程式設計師應該都能看明白,不過我還是簡單說明一下:
orchestrator- 環境調度工具設置,用來制定調度容器環境的底層工具,這裡我們使用的是 docker-composeworkspace- 工作區配置,工作區 是SmartIDE中最重要的概念,包含開發者用來進行開發調試的所有環境資訊dev-container- 開發者容器設置service-name- 開發者容器所對應的 docker-compose 服務名稱ports- 開發者容器對外暴露的埠ide-type- 開發者容器所所用的IDE類型,支援:vscode, sdk-only, jb-projector (Jetbrains系列全家桶)和 opensumivolumes- 配置映射,支援將開發者的git-config和ssh密鑰導入容器commands- 開發環境啟動腳本,對環境進行初始化;比如以上腳本中就完成了2個關鍵操作:1)設置npm中國鏡像源 2)獲取npm依賴。這部分腳本開發者可以根據自己程式碼庫的情況設置,SmartIDE會在環境啟動後自動運行這些腳本,讓程式處於開發者所希望的狀態上。
services- 開發環境內的服務列表- 這裡其實就是一段標準的 docker-compose 配置文件
IDE as Code 重新定義IDE
這種做法稱為 IDE as Code 也就是 「集成開發環境即程式碼」,將你的開發環境配置變成一個 IDE配置文件 的配置文件放置在程式碼庫中,然後根據這個配置文件生成對應的自動化腳本,完成「集成開發環境」 的創建。因此,SmartIDE中的IDE不僅僅是一個開發工具,而是 包含了環境的IDE。
IDE as Code 的做法源自DevOps的核心實踐 Infrastructure as Code ,也就是 「基礎設施即程式碼」 簡稱 IaC。其核心思想是將環境配置程式碼化,常見的k8s的yaml文件其實就是典型的基礎設施即程式碼實現。在運維領域常用的工具比如chef/puppet/ansible,還有 HashiCorp 的 Terraform 也都是 IaC 的經典實現。IaC 的主要價值和目標就是將環境搭建過程標準化,讓任何人在任何環境中都可以獲得 一致、穩定、可靠 的環境搭建體驗。SmartIDE所創造的 IDE配置文件 延續IaC了的使用場景,並將其基本思路應用到了開發測試環境中,這其實就是 SmartIDE 的產品核心能力。
基於 IDE as Code 的實現,SmartIDE在產品實現過程中一直秉承一個原則:能夠讓用戶通過配置文件實現的東西,就不要通過程式碼實現。這個核心原則給予了SmartIDE非常強的靈活性,比如以下這段影片中所演示的 若依管理系統 項目
這個項目包括比較複雜的環境配置,包括:
- JDK 基礎環境
- MAVEN 包管理工具
- MySQL 伺服器
- Redis 伺服器
- 可選:資料庫管理工具 PHPMyAdmin
若依項目的官方文檔用了整整2頁的篇幅描述開發環境的搭建 (參考鏈接:環境部署 | RuoYi) 。使用了 SmartIDE 以後,開發者可以一個統一的指令 smartide start 來啟動這個複雜的項目,不再需要去閱讀這個文檔。無論項目的程式碼是簡單亦或複雜,smartide start 指令都可以進行適配,因為其背後的複雜配置已經全部通過 IDE配置文件 和程式碼保存在一起了。使用 IDE as Code 的另外一個好處是,由於配置和程式碼保存在一起,進行程式碼變更的開發者可以同步更新環境配置,並且一起提交進行評審,也就是說:你的環境也和程式碼一樣是可評審,可審計的。
IDE文件配置就是README活文檔。
當然,SmartIDE能做的絕不僅僅如此,我們已經發布了 SmartIDE Server 版,允許開發者在網頁上即可完成開發環境的搭建和完整的開發調試過程。Server與CLI一樣使用這個 IDE配置文件 來識別和搭建環境,與cli保持一致的體驗。這一切的目的都是讓開發者的日常工作變得簡單,讓開發者體驗 #開發從未如此簡單 的快樂。
如果你對雲原生開發環境感興趣,請掃描以下二維碼加入我們的 SmartIDE社區早鳥計劃
謝謝您對SmartIDE的關注,讓我們一起成為雲原生時代的 Smart開發者, 享受 開發從未如此簡單 的快樂。
