SmartIDE v1.0.25 统一配置文件和Codespaces for Azure DevOps插件

统一配置文件、链接一键启动、Azure DevOps插件、工作区策略改进。

SmartIDE v1.0.25 (CLI build 5383, Server Build 5503) 已经发布,这个版本中我们针对一些关键特性进行了重要重构,比如 统一配置文件 和 工作区策略;同时我们还发布了一键启动链接和 SmartIDE Codespaces for Azure DevOps 插件,允许开发者在Azure DevOps上直接启动SmartIDE工作区;具体列表如下:

  • 统一配置文件:开发者可以使用一个.ide.yaml 文件同时支持本地/远程/k8s三种模式的工作区配置
  • 一键启动链接:允许开发者将这个链接放置在README文件,博客或者任何网页上,直接点击即可启动工作区
  • Azure DevOps插件:允许开发者在Azure DevOps的代码库,流水线和工作项上一键启动SmartIDE工作区
  • 工作区策略改进:增加了credential策略,方便开发者为k8s工作区设置密码,同时允许开发者使用这个密码通过SSH登录工作区

统一配置文件

这个版本中我们开始允许使用一个 .ide.yaml 同时支持本地,远程和k8s三种工作区模式的配置。由于我们使用了 docker-composek8s manifest 两种环境编排,在之前的版本中用户需要针对2种编排模式提供至少2个不同的 .ide.yaml 文件,并且需要在启动的时候特意指定不同的配置文件,才能在不同类型的资源上启动工作区。现在开始,我们支持使用一个统一的.ide.yaml作为多种环境资源的入口,比如以下配置文件:

version: smartide/v0.3
orchestrator:
  type: allinone
  version: 3
workspace:
  dev-container:
    service-name: boathouse-calculator-dev
    webide-port: 6800
    ports: 
      tools-webide-vscode: 6800
      tools-ssh: 6822
      apps-application: 3001
    ide-type: vscode  
    volumes: 
      git-config: true
      ssh-key: true
    command:
      - npm config set registry https://registry.npmmirror.com
      - npm install
  kube-deploy-files: "k8s-deployment.yaml" 
  docker-compose-file: "docker-compose.yaml"

几个关键点:

  • Line 3 - orchestrator 的类型指定为 allinone,之前的选项是 docker-compose 或者 k8s
  • Line 20 - 指定k8s环境的编排文件
  • Line 21 - 指定本地和主机环境的编排文件

使用统一配置文件之后,开发者可以使用统一的指令格式在三种不同资源上启动工作区,比如以下指令

## 本地启动 (windows/mac/linux)
smartide start https://github.com/idcf-boat-house/boathouse-calculator.git
## 远程主机启动
smartide start --host <hostId> https://github.com/idcf-boat-house/boathouse-calculator.git
## k8s启动
smartide start --k8s <context> https://github.com/idcf-boat-house/boathouse-calculator.git

可以看到,以上启动指令中只是增加了 --host 或者 --k8s 参数,其他部分完全一致。 另外,使用了统一配置文件之后,开发者也可以直接使用现有的 docker-compose 文件 或者 k8s 配置文件,不再需要复制这些文件的内容放入到我们的 .ide.yaml 中,这将简化开发者使用SmartIDE的准备工作。

网页链接一键启动

开发者现在可以使用类似以下的链接格式直接触发工作区的创建

https://dev.smartide.cn/#<Git代码库URL>

比如,以下就是一个可以直接触发工作区创建的链接,点击这个链接将会自动为boathouse-calculator库创建工作区

你也可以在自己的README.md上放置一个 smartide start 的徽章,并在徽章上使用这个链接

以下视频展示了使用 网页链接一键启动 Github代码库的场景

SmartIDE Codespaces for Azure DevOps 插件

基于以上 一键启动链接 能力 ,我们为 Azure DevOps 平台提供了一个插件,允许用户在不同的位置按照当前的上下文启动工作区,自动获取代码库地址,分支名称等参数,简化开发者创建开发环境的准备工作。这些自动化操作可以简化开发者从日常任务中进入编码环境的操作,并实现全线上化操作。

以下视频是在早鸟用户姚圣伟访谈过程中对这个插件的演示过程:

这个插件和已经发布到了 Azure DevOps 的插件市场,链接如下

这个插件提供了4类入口,分别是

1. 代码库: 用户可以在任何分支或者提交记录上启动工作区,插件会自动识别当前代码库地址和分支名称,并使用这些参数启动一个与当前代码版本一致的开发环境。

2. 拉取请求: 使用拉取请求(PR)进行代码评审是非常普遍的开发实践,但是评审者往往会因为无法看到软件的运行情况而无法对当前正在评审的内容进行有效和完整的判断。此时,评审者就可以直接点击 Open in SmartIDE 按钮,即可获取一个和当前被评审代码完全一致的,可运行的环境来辅助进行代码评审,这会让评审工作变得更加简单和高效。评审者在整个过程中也无需安装任何开发工具,SDK和中间件环境,所有的环境都通过SmartIDE自动创建完成。评审结束后这个环境就可以直接销毁。

3. 流水线: 一次流水线执行代表一个软件版本,测试人员一般是需要围绕这样的版本来进行测试的。传统模式下,测试人员需要准备几套测试环境来轮流测试不同的版本,如果出现多个版本并行的情况就很难管理这些测试环境。使用了SmartIDE之后,测试人员可以随时在任何版本(流水线运行记录)上点击 Open in SmartIDE 按钮,即可获取一个和当前流水线运行版本一致的环境进行测试;并且,这个环境中还包含了可供开发人员直接进行调试的IDE工具。测试过程中如果发现问题,测试人员可以将这个环境直接共享给开发者进行问题定位和调试。这种随用随起的测试环境将极大简化测试人员获取可用测试环境,以及在测试环境中定位问题的复杂度,提高开发测试迭代速度。

4. 看板工作项: 使用特性分支对应到具体工作任务是大型软件开发团队中常用的分支策略,也是一种高效团队协作模式。以往开发者需要手工创建分支,并在本地开发环境拉取代码并手工切换到这个分支上才能开发工作。如果遇到同时在2个特性上工作的情况,繁琐的分支操作很容易造成操作失误。现在,开发者可以在工作任务上直接点击 Open in SmartIDE 按钮并根据需要创建或者使用已有分支,SmartIDE会自动使用指定分支创建开发环境。对于多特性并行情况,开发者只需要打开2个不同的浏览器窗口即可同时在2个分支上互不影响的进行工作。

SmartIDE Codespaces for Azure DevOps 插件只是我们计划提供的各种插件的一个示例,未来我们还将为常用的DevOps工具提供类似的入口,比如:Jira, Confluence, GitLab, Jenkins等等。这些扩展将帮助现有的DevOps工具与开发环境及编码过程实现更加紧密的集成,为开发人员提供一体化的工作体验。

工作区策略改进

工作区策略是SmartIDE中针对工作区进行各种控制的通用能力,之前我们已经提供了 Git Config 和 SSH Key 两种策略分别用来控制工作区中的git配置和ssh密钥。这个版本中我们增加了统一设定工作区访问密码的credential策略,一旦设定,开发者就可以使用一个统一的密码来控制对自己工作区的访问,包括SSH访问。

对于原有的SSH Key策略,我们进一步完善了密钥的推送过程,帮助开发者在使用SSH远程连接的时候实现免密登录。

下图:开发者获取SSH登陆指令并直接进入工作控制台终端。

开发者也可以使用这个指令将本地VSCode或者JetBrains IDE连接到工作区,整个过程无需输入密码。

下图:使用VSCode远程模式免密进入SmartIDE云端工作区

感谢你对SmartIDE的关注,欢迎从SmartIDE官网下载体验我们的产品,获取加入我们的早鸟群,及时了解SmartIDE的开发进展。

SmartIDE v1.0.23 一个非常不敏捷的发布

SmartIDE v1.0版本(CLI Build v1.0.23.4650,Server Build v1.0.23.4646)已经发布,在超过4000 个 Builds 之后,我们终于发布了v1.0版本。当前的版本已经完成了企业级云原生CloudIDE的特性闭环,允许个人/团队/企业用户在Windows/Mac/Linux上使用VSCode/JetBrains全家桶/OpenSumi三种IDE开发7种技术栈下的任何项目,并且支持WebIDE和Hybrid混合模式以及WebTerminal的三种工作区访问方式。

Sprint23 Version 1.0

本次发布包含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个版本,希望我们开源以后能够有更多社区小伙伴参与进来。

Sprint23 Version 1.0

开源地址:

完整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 https://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工作区。

Sprint23 Version 1.0

Server启动k8s工作区

SmartIDE Server支持一键私有部署,你只需要一台Linux主机即可完成部署,并不依赖k8s集群。在完成Server的部署之后,管理员可以将一个或者多个k8s集群绑定在Server上,并将这些k8s集群分配给不同的团队使用。

下图:同时绑定了3个k8s集群和一台linux主机的SmartIDE Server环境

Sprint23 Version 1.0

使用Server部署k8s工作区非常简单,只要在 工作区 | 工作区管理 | 新增工作区 的时候选择对应的k8s资源即可。

下图:使用k8s资源新增工作区

Sprint23 Version 1.0

通过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远程模式连接工作

Sprint23 Version 1.0

SmartIDE工作区提供VMLC支持,你可以在自己的k8s集群上激活VMLC能力,然后就可以在运行在k8s集群中的SmartIDE工作区内部嵌套运行docker或者k8s集群。开发者可以使用VMLC能力非常方便的创建和销毁属于自己的k8s集群,并使用这个个人k8s集群完成云原生应用的完整开发测试和部署迭代,这将简化开发者开发云原生应用的复杂度,并有效减少在正式集群上部署出错的机率,大幅提升云原生应用的开发效率。

相关文档参考:

团队共享资源

SmartIDE Server中新增了团队管理能力,开发者可以根据需要创建团队并将其他用户加入团队。团队的创建者会成为当前团队的管理员,作为管理员可以将主机或者k8s集群绑定到团队并允许其他团队成员使用这些资源来创建工作区。

下图:团队资源会显示所属团队

Sprint23 Version 1.0

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 https://github.com/idcf-boat-house/boathouse-calculator.git

下图:通过WebTerminal可以访问当前工作区中的所有容器,并支持对terminal进行分屏,方便并行操作。

Sprint23 Version 1.0

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  "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稳定版安装

# 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运行容器化工作区

Sprint23 Version 1.0

本次我们对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支持的详情请参考:

使用云原生技术赋能开发者,是我们一贯的使命。

SmartIDE v0.1.19 - Gitee GVP、工作区策略、类虚拟机镜像VMLC、Server安装手册

SmartIDE v0.1.19 (CLI Build 3909, Server Build 3890) 已经发布,本次Sprint主要完成2个重要特性,工作区策略和类虚拟机容器(VM Like Container - VMLC)的开发工作。工作区策略特性的目标是为远程工作区提供统一的配置管理机制,在这个sprint中主要实现了git-config和ssh-key两个常用的策略。类虚拟机容器(VMLC)是一项非常重要的特性,目标是要为开发者提供与虚拟机非常类似的容器化环境。这个Sprint中我们也首次发布了SmartIDE Server版的私有化部署安装手册,希望自行完成部署的小伙伴现在就可以开始尝试了。

码云(Gitee.com)最有价值开源项目奖项

SmartIDE在上周获得了码云(Gitee.com) 的最有价值开源项目奖项。码云(Gitee.com)是国内最大的开源代码托管平台,当前有800万开发者用户。GVP - Gitee最有价值开源项目奖项需要开源项目采用OSI认可的License (SmartIDE采用GPL3.0协议),通过Gitee专家组的认可,开发活跃度(SmartIDE至今已经完成了488次代码提交),积极响应用户反馈,提供完整的文档以及用户评价(当前Gitee Star 125, Github Star 229)。

SmartIDE非常荣幸获得码云的认可,我们将继续为开发者提供最好的开发工具和技术支持。

Gitee GVP

Server 私有部署手册

SmartIDE Server 是面向团队和企业的云原生容器化远程工作区管理平台,可以为开发团队提供统一的开发测试资源管理,基于浏览器的开发环境访问以及团队协作能力。SmartIDE Server 的 团队基础版 功能是开源而且免费的,任何人都可以按照本手册所提供的方式完成部署并免费使用,没有使用期限限制,没有用户数限制,也没有资源数量限制。

下图是Server版的部署架构图:

SmartIDE Server Architecture

图中可见,SmartIDE Server 采用了非常灵活并且可扩展的分布式架构,每个服务组件都可以进行独立的横向扩展以便确保可以应对不同规模的部署模式需求。既可以在单台Linux主机上完成完整的部署,也可以在k8s集群上支持高可用,高性能的可横向扩展部署,对于不同规模的团队都可以提供支持。

我们已经完成了 SmartIDE Server 私有化部署的文档验证,包括公网部署和隔离网络部署均已经可以投入使用。希望尝试自行部署的小伙伴现在就可以参考以下完成完成部署和功能验证:

类虚拟机容器 VMLC

在2022年6月11日刚刚结束的 开源云原生开发者日 大会上,我进行了名为 【寻找云原生时代的开发者效能原力 - 使用AKS实现云原生IDE开发调试环境】的主题演讲,并在演讲中首次展示了 SmartIDE 对 VMLC 的支持。

VMLC

类虚拟机容器 VMLC 是 VM Like Container 的缩写,其设计目标是为开发者在容器中提供类似虚拟机的环境,包括:systemd服务管理能力,sshd远程登录能力,docker/k8s嵌套能力等。容器化技术出现以后,绝大多数的使用场景都是生产环境,因此对容器的优化目标都是围绕精简,单一进程,不可变状态的目标来实现的;对于开发人员来说,按这种目标设计的容器并不适合作为开发环境来使用。相对于生产环境中已经预先确定的配置,开发环境的配置需要由开发人员根据当前应用的不同需求进行持续的调整,并且持续的进行内迭代过程(Inner Cycle),这个过程包含了编码,编译打包,部署,测试,修复的过程。只有为开发人员提供完整的内迭代能力才能最大限度确保开发人员提交的代码质量,降低后续环节(包括生产环境)中出现问题和缺陷的几率。

为了达到以上目标,SmartIDE产品团队在过程的Sprint 18-19两个迭代中完成了VMLC容器标准的设计,验证和实现,并且已经通过 dapr-traffic-control 示例应用展示了 VMLC 的完整能力,包括:

  • 在Linux主机和k8s集群中部署 VMLC 远程工作区容器的能力
  • 使用 smartide start指令或者 smartide new 指令启动基于 VMLC 的远程工作区的能力
  • 使用 SmartIDE Server 管理基于 VMLC的远程工作区的能力
  • 在VMLC容器中运行docker能力
  • 在VMLC容器中运行多节点k8s的能力,包括使用LoadBalancer, Ingress提供外部访问的能力
  • 使用SSH链接VMLC容器,并使用终端进行操作的能力
  • 使用VSCode远程开发插件 / JetBrains Gateways 链接 VMLC 容器进行 Hybird 模式开发的能力 当前,我们已经提供了以下基于 VMLC 的开发者镜像,其他类型的开发者镜像会在后续的 Sprint 中完成适配
开发语言镜像类型tagPull命令new指令备注
baseSDKlatestdocker pull registry.cn-hangzhou.aliyuncs.com/smartide/smartide-base-v2-vmlc:latestse new base -T vmlc支持VMLC的基础镜像,使用ubuntu:20.04作为基础 VMLC容器只支持linux操作系统
baseWebIDElatestdocker pull registry.cn-hangzhou.aliyuncs.com/smartide/smartide-base-v2-vscode-vmlc:latestse new base -T vscode-vmlc支持VMLC的基础镜像,使用ubuntu:20.04作为基础, 增加VSCode WebIDE VMLC容器只支持linux操作系统
dotnetWebIDElatestdocker pull registry.cn-hangzhou.aliyuncs.com/smartide/smartide-dotnet-v2-vmlc:latestse new dotnet -T vmlc支持VMLC的基础镜像,使用ubuntu:20.04作为基础, .net 6.0 sdk 增加VSCode WebIDE VMLC容器只支持linux操作系统

有关基于 VMLC 的 SmartIDE 远程工作区详情,请参考以下博客

工作区策略

工作区策略是为远程工作区提供配置管理能力的一个通用特性,通过运行于远程工作区中的代理程序,SmartIDE可以针对特定工作区内部的环境进行所需要的各种配置。其架构如下

SmartIDE Server Workspace Policy

如上图,工作区策略的实现通过agent来实现,agent和server之间是单向通信(pull)的模式,因此工作区并不需要为sever开放网路服务端口,agent会按照一定的周期从server获取为当前工作区所准备的策略,并按照策略的需要在工作区内部完成实施。当前SmartIDE已经实现了3个基础策略:

  • 心跳策略:这是agent的默认策略,所有工作区都会实施这个策略,其功能非常简单,就是为server提供当前工作区的健康状态检查。工作区健康状态会显示在工作区详情页的右上角,如下图

SmartIDE Server Workspace Policy

  • git-config策略:远程工作区需要与当前用户的身份进行绑定,在使用Git作为源代码管理工具的过程中,我们需要将用户的git配置注入到属于用户的工作区中,这样用户就可以在server上统一配置自己的git-config内容,确保自己所使用的所有的工作区均使用统一的git-config配置项。

  • ssh-key策略:ssh-key作为一种通用的身份认证机制,广泛用于各种git服务或者服务器之间的认证。通过ssh-key策略,我们可以确保用户的工作区均使用统一管理的密钥进行服务间的授权,包括:SSH-GitUrl,SSH 远程登录等场景。本次ssh-key策略上线之后,SmartIDE也可以开始支持Git 私有仓库的常见操作。

工作区策略可以通过server管理界面进行配置,如下图

SmartIDE Server Workspace Policy

社区早鸟计划

如果你对云原生开发环境感兴趣,请扫描以下二维码加入我们的 SmartIDE社区早鸟计划

谢谢您对SmartIDE的关注,让我们一起成为云原生时代的 Smart开发者, 享受 开发从未如此简单 的快乐。

让我们一起成为 Smart开发者,享受开发如此简单的乐趣。

SmartIDE v0.1.18 已经发布 - 阿里OpenSumi采用SmartIDE插件市场提速10倍、Dapr和Jupyter支持、CLI k8s支持

SmartIDE v0.1.18 (cli build 3538) 已经发布,在过去的Sprint 18中,我们集中精力推进对 k8s 远程工作区 的支持,同时继续扩展SmartIDE对不同技术栈的支持,我们适配了针对分布式应用运行时Dapr以及数据科学计算分析工具Juypter的环境支持。在这个过程中,我们探索了VM-Like-Container的能力,为提供开发者优化的容器环境又迈进了一步。最后,我SmartIDE插件市场也迎来了它的第一个开源社区支持者,阿里蚂蚁开源的国产IDE OpenSumi已经将 SmartIDE作为自己的默认插件源。

阿里蚂蚁OpenSumi采用SmartIDE插件市场提速10倍

在 Sprint 16中,我们开始支持阿里蚂蚁开源的国产IDE开发框架 OpenSumi,并且在 Sprint 17 发布了 基于 Eclipse OpenVSX RegistrySmartIDE插件市场。OpenSumi的开发团队在测试了 SmartIDE插件市场之后发现速度提升可以达到10倍以上,并将其设置为OpenSumi内默认的插件市场来源。

下图来自:https://github.com/opensumi/core/pull/1045 ,是 OpenSumi 团队的测试结果。

OpenSumi PR

SmartIDE插件市场 是我们针对国内使用类 VSCode IDE 的开发者提供的开源插件市场镜像服务,我们将 open-vsx.org 的国外站点通过 Github Action 自动同步到了部署在国内的站点中,经我们自己测试速度提升2-5倍。此次经阿里蚂蚁OpenSumi团队的测试结果提升10倍的原因可能是因为他们采用了批量插件安装的方式。这个结果对于国内使用类 VSCode IDE 的团队来说是一个好消息,说明我们提供的 SmartIDE插件市场 开始发挥它应有的作用了。

在 Sprint 18 中,我们还对插件同步机制进行了改进,增加了按周期自动同步和历史版本同步机制,这样就可以确保国内的小伙伴及时获取到最新的VSCode插件。

相关修改可以参考 https://github.com/SmartIDE/eclipse-openvsx/issues/2

以上PR已经在2022年5月18日合并进入OpenSumi的主分支,安装 OpenSumi 的最新版就已经可以体验插件极速安装的快感了。

Dapr 微服务开发环境支持 VM-Like-Container验证通过

Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到正式发布 V1.0 版本的不到一年的时间内,github star 数达到了 1.2万(现在已经超过1.7万星),超过同期的 kubernetes、istio、knative 等,发展势头迅猛,业界关注度非常高。

Dapr 这个词是是 「Distributed Application runtime」的首字母缩写,非常精炼的解释了 dapr 是什么:dapr 是一个为应用提供分布式能力的运行时

Dapr官网 https://dapr.io

Dapr

SmartIDE 团队 Sprint14 开源了包括 .net6 环境在内的开发者镜像相关代码,在那个时间点对于 .net6 技术栈的支持已经完整。这个迭代中,我们针对 .net6 的开发者镜像进行了改进,增加了 VM-Like-Container 的能力,以便可以完美支持 dapr 环境的搭建和调试。

所谓 VM-Like-Container,其实就是将容器当成虚拟机来使用。大家可能会觉得有点奇怪,既然我们都容器化了,为什么还要开倒车,回到VM呢?这个其实和开发者的需求有关,一般的容器都是为了运维环境优化,并没有考虑开发者的诉求,或者说这两者的诉求的相互冲突的,运维要的是稳定,因此极尽所能剥夺一切容器内不必要组件,而开发者需要灵活,需要能够在容器内按需构建自己的所需要的各种组件。比较典型的场景就是在容器中运行docker,也即是大家所说的 DIND (Docker in Docker) 的场景。对于开发者来说,确保应用可以用容器发布的最好方式就是在自己的开发环境中可以直接执行 docker builddocker run,这样才能确保自己所交付的代码是经过容器化环境测试的,不至于等到流水线打包并部署完成以后才发现自己的代码其实在容器中无法正确运行。

对于开发环境而言,提供内置的Docker环境意味这开发者有更加灵活的能力构建自己专属的定制化环境,比如运行各种类型的中间件、同时运行和调试应用的多个版本,临时组网进行测试等等。对于Dapr而言,dapr的开发工具需要使用docker环境来模拟微服务边车 (sidecar) 的很多能力,比如最常见的服务发现和消息队列,都需要dapr运行一些中间件来提供相关的服务。以下就是在 SmartIDE 的 .net6(vscode) 开发环境中,运行一个机遇dapr的示例应用的截图:

示例代码库地址:https://github.com/SmartIDE/sample-dapr-traffic-control

Dapr Traffice Control Sample

在这个示例中,我们使用了 dapr init 来初始化 dapr 开发环境,运行 dapr 的基础服务,然后启动 Mosquitto 作为 MQTT brokerRabbitMQ 作为消息队列以及其他的基础服务。应用本身需要至少4个微服务组件才能正常工作:

  • TrafficControlService 是交通控制服务,也是主服务,其业务逻辑是根据公路上的2个固定位置摄像头反馈的数据,计算车辆通过摄像头的车速,以便判断是否存在超速行为。
  • FineCollectionService 是罚单处理服务,根据 TrafficControlService 发送过来的车牌数据,查询车辆注册数据库(VehicleRegistrationService)获取联系人信息,并发送邮件
  • VehicleRegistrationService 是车辆注册数据库,提供车辆信息查询,可以通过车牌号码获取车主信息,比如邮件地址。
  • Simulation/VisualSimuation 是一个模拟器应用,用于模拟车辆行为,以便可以测试以上服务的工作情况,在上图中展示的是 VisualSimulation 的画面。

Dapr Traffice Control Sample

下面这个视频完整演示了如何使用 SmartIDE开发调试 经典的Dapr示例 dapr-traffice-control,相关的启动命令如下

smartide start https://github.com/SmartIDE/sample-dapr-traffic-control

Jupyter Notebook 环境支持

远程工作区 的一个重要优势就是可以帮助开发者更好的利用远程主机的强大算力和数据处理能力,在这个领域中 Jupyter Notebook 无疑是非常典型的应用类型。我们在 Sprint 18 中增加了对 Jupyter Notebook 的远程工作区支持,现在开发者可以使用一个简单的指令就可以启动预装 Jupyter Notebook 的远程工作区,并且通过 --host 参数将这个 工作区漫游 到任意主机或者k8s环境中。相关指令如下:

## 启动使用 Jupyter Notebook 的数据科学处理开发者容器
smartide new anaconda -T jupyter 
## 在远程主机上启动
### 首先将自己的主机添加到 SmartIDE工具中,并获取hostId
smartide host add <Ip-Address> --username <user> --password <pwd>
### 使用 --host 参数再次启动
smartide new --host <hostId> anaconda -T jupyter 

使用以上方式启动的 Jupyter Notebook 环境还会内置一个 VSCode WebIDE,这样可以利用内置的Git管理工具将制作好的 Notebook 提交到Git代码仓库中进行版本管理。 其他开发者就可以使用 smartide start <代码库地址> 指令一键将同样的环境漫游到自己的本地开发机,主机或者k8s上。

为了让大家更容易体验,我们为大家提供了一个预置了示例 Notebook 的代码库,这个示例中内置了一个新冠疫情数据分析Notebook。

示例地址 https://github.com/SmartIDE/sample-anaconda-jupyter

使用这个 Notebook 对上海和北京最近的疫情数据的分析结果如下:

Juypter Covid19 Analysis

备注:以上数据分析仅为展示SmartIDE的产品特性,数据处理的非常粗糙。欢迎对 Juypter Notebook 开发有兴趣的小伙伴提交PR改进我们的分析算法。

大家可以使用以下指令一键启动上面这个示例

## 在本地开发机上启动
smartide start https://github.com/SmartIDE/sample-anaconda-jupyter.git
## 在远程主机上启动
smartide start --host <hostId> https://github.com/SmartIDE/sample-anaconda-jupyter.git

启动以后的效果如下,图中:

  1. SmartIDE简化指令方式 se = smartide
  2. 内置在远程工作区中的 VSCode WebIDE,这个远程工作区中还预置了 Python 环境,开发者可以直接在VSCode中使用Python语言进行编程。
  3. 内置在工作区中的 Jupyter Notebook,加载了 “新冠疫情分析” 示例数据,这个 Notebook 通过读取微信疫情小程序的API接口获取实时数据,并利用图表展示了上海过去60天疫情变化趋势

Juypter Covid19 Analysis

在适配 Jupyter Notebook 的过程中,SmartIDE没有修改一行产品代码,完全利用我们所提供的 IDE配置文件开发者镜像模版库 的能力完成。SmartIDE作为一款面向企业的B端产品,对于可扩展性能力的要求是根植于产品的设计核心。利用这种能力,企业在部署了SmartIDE之后无需进行二次开发就可以自助适配各种开发语言,工具和环境,大幅降低企业采纳远程工作区的技术门槛和实施成本。

下面的视频展示了在 SmartIDE 中使用 Jupyter Notebook 分析上海和北京疫情数据的过程:

CLI k8s 模式支持(特性预览)

SmartIDE CLI中已经增加了k8s相关指令,用户现在可以使用 smartide start --k8s 来完成在k8s集群中启动 远程工作区 的操作,基于 计算器示例应用 的启动命令如下:

smartide start --k8s SmartIDEAKS --namespace default --repourl https://github.com/idcf-boat-house/boathouse-calculator.git --filepath .ide/k8s.ide.yaml

使用这个指令之前用户需要完成2个准备工作:

  1. 在k8s集群上安装 smartide-file-storageclass,这个配置的目的是为了能够让 SmartIDE 可以支持各种类型的k8s服务。Storage Class (存储类定义)是k8s上适配不同提供商的底层存储driver而提供了一层隔离机制,在远程工作区场景下,我们需要允许工作区中的多个开发容器共享的访问同一份代码/配置/环境变量/工具等资源,因此需要使用具备 ReadWriteMany 能力的存储 driver。
  2. 在本地的 .kube 目录中导入你的k8s集群的 kube-config 文件,这个步骤是为了允许 SmartIDE CLI 可以连接k8s进行操作的权限。

以下是导入 storageclass 的相关指令,当前只提供Azure微软云的配置文件,使用其他云平台或者自建k8s平台的小伙伴可以自行查找适合自己平台的StorageClass配置文件,后续我们也会统一提供。

kubectl apply -f https://smartidedl.blob.core.chinacloudapi.cn/kubectl/resources/smartide-file-storageclass.yaml

另外,如果使用 azure-cli,可以直接使用以下指令快速创建k8s集群(测试用途)并获取集群的 kube-config 配置

az login
az account set -s <订阅ID>
az group create --name <资源组名称> --location southeastasia
az aks create -g <资源组名称> -n <集群名称> --location southeastasia --node-vm-size Standard_DS2_v2 --node-count 1 --disable-rbac --generate-ssh-keys
az aks get-credentials -g <资源组名称> -n <集群名称>

CLI k8s 模式现在已经支持一键启动工作区和清除工作区操作,我们正在将这个cli能力集成到server中;在后续的迭代中大家会陆续获得 server k8s 模式的更新。

社区早鸟计划

如果你对云原生开发环境感兴趣,请扫描以下二维码加入我们的 SmartIDE社区早鸟计划

谢谢您对SmartIDE的关注,让我们一起成为云原生时代的 Smart开发者, 享受 开发从未如此简单 的快乐。

2022年5月19日

SmartIDE v0.1.17 已经发布 - 模版库远程模式和插件市场公测

模版库支持远程模式并添加到Server版中,SmartIDE插件市场公测

SmartIDE v0.1.17 已经发布,本次同步更新了CLI (Build 3332) 的稳定版通道和Server (Build 3333) 生产环境(内测中)。请参考对应的 安装说明 获取最新版。在刚刚完成的Sprint 17中,我们主要完成以下特性。

  • 模板库:对cli现有的 smartide new 指令进行了增强,支持针对远程主机使用 new 指令,用户只需要在 new 指令中增加host 参数即可在远程主机上使用模板库创建工作区。同时,我们已经将模版库集成到server中,用户可以使用网页的方式选择模版并创建工作区。

  • 插件市场:针对开源项目Eclipse OpenVSX进行了中文汉化和中国本地部署,用户可以通过 https://marketplace.smartide.cn/ 访问位于北京数据中心的插件市场。这个插件市场支持VSCode, VSCodium, Code-Server, OpenVSCode Server, OpenSumi以及Eclipse Theia 使用。SmartIDE插件市场可以大幅提升以上IDE的插件安装速度(根据你自己的网络情况,提高2-5X),并且支持企业内网本地部署,为研发企业内部针对类VSCode的IDE提供安全可控的插件管理机制提供可能。

模板库

SmartIDE CLI 原有的模板库功能允许用户通过一个简单的指令 smartide new 就可以一键创建基于7种技术栈和4种IDE的容器化 工作区,这个功能原来只能在开发者本机使用,无法支持远程服务器。在Sprint 17 中我们针对这个功能进行了增强。允许用户直接在指定的远程服务器上新建工作区,同时将这个功能集成到了 Server 中,允许用户通过网页完成基于模版的工作区创建。

在Server中使用模版库

SmartIDE Server 是一款开源的容器化工作区管理工具,你可以在任何可以运行Docker和Kubernetes的环境中自行部署。在Sprint 17中,我们将模板库功能引入到Server中,允许用户通过网页选择模版并一键完成部署。

Server模版库

以下是使用Server版模板库功能创建 若依微服务版本 快速开发框架的演示视频,若依微服务版的模版包含 vue.js 的前端应用,一系列 Java Spring 后端服务,Nacos 服务注册中心,redis 缓存和 mysql 数据库(配置phpMyAdmin 管理工具)以及 SonaQube 代码检查工具;这是一个相对复杂的工作区,使用server版的模板库开发者可以一键创建以上所有环境,无需关心这些组件之间的配置,所有这些配置都已经预先设置好并保存在 IDE配置文件 中了。

使用new指令创建远程工作区

使用远程new指令创建工作区的操作如下

## 首先使用 smartide host 指令添加主机
smartide host add <主机IP或者域名> --username <用户名> --password <密码> [--port <SSH端口号,默认22>]
## 使用 smartide new 指令在指定的主机上创建工作区
smartide new --host <HostId> <模版名称> --type <子类型名称> --workspacename <工作名称>
## 如果在本地的当前目录中创建工作,则可以省略host和workspaceName参数
## type参数也可以省略,则可以使用当前默认模版
smartide new <模版名称> --type <子类型名称>

当前支持的模版列表如下,列表中的所有组合都可以通过以上指令用于在远程主机上创建工作区

Templatetype说明
node默认不带有任何WebIDE的node/JavaScript前段开发环境,内置nvm,可以切换node 12,14,16
vscode使用vscode WebIDE
webstorm使用JetBrains WebStorm WebIDE (Projector)
opensumi使用阿里的OpenSumi WebIDE
Java默认不带有任何WebIDE的Java开发环境 + Node/JavaScript前段开发环境,内置OpenJDK 11
vscode使用vscode WebIDE
idea使用JetBrains IntelliJ IDEA WebIDE (社区版,免授权,Projector)
python默认不带有任何WebIDE的python开发环境 + Node/JavaScript前段开发环境, 内置 Python 2 和 Python 3
vscode使用vscode WebIDE
pycharm使用JetBrains PyCharm WebIDE (Projector)
dotnet默认不带有任何WebIDE的.NET 6开发环境 + Node/JavaScript前段开发环境
vscode使用vscode WebIDE (自动安装.net调试插件)
rider使用JetBrains Rider WebIDE (Projector)
golang默认不带有任何WebIDE的 go语言 开发环境 + Node/JavaScript前段开发环境,内置 1.17.5 和 1.16.12
vscode使用vscode WebIDE
goland使用JetBrains GoLand WebIDE (Projector)
php默认不带有任何WebIDE的 php 开发环境 + Node/JavaScript前段开发环境,内置 php7.4 和 apache2
vscode使用vscode WebIDE
phpstorm使用JetBrains PHPStorm WebIDE (Projector)
cpp默认不带有任何WebIDE的 C/C++ 开发环境 + Node/JavaScript前段开发环境,内置 clang 和 cmake
vscode使用vscode WebIDE
clion使用JetBrains CLion WebIDE (Projector)

以上所有模版以及模版所使用的开发者镜像(Dockerfile和相关代码、脚本)均开源提供给社区,具体可以参考以下链接

插件市场

VSCode以及类VSCode IDE(包括:VSCodium, Code-Server, OpenSumi 和 Eclipse Theia)都使用国外的插件市场 open-vsx.org 作为数据来源。对于国内的开发者来说,因为网络原因造成插件安装缓慢或者安装失败的情况经常出现。同时,在很多企业内部,开发者也在大量使用VSCode作为自己的主力开发工具,由于安全管控的原因,企业内部的开发者往往无法访问外部互联网,开发者为了绕过企业的安全性管控会自行下载、复制和导入未经企业审核的VSCode插件进入企业受管控网络使用,这些做法会对企业的信息安全造成很大威胁。

为了解决以上这些痛点问题,SmartIDE针对 open-vsx.org 进行了汉化并进行了中国本地化部署。现在开始,开发者可以访问位于国内数据中心的 SmartIDE插件市场 ,并按我们官网文档中的方式修改自己 VSCode 中的 product.js 配置文件,即可使用 SmartIDE插件市场 安装插件,根据我们的测试,通过我们提供的插件市场安装插件可以获取至少2-5X的速度提升。

SmartIDE 插件市场地址 https://marketplace.smartide.cn/

SmartIDE插件市场

product.js 文件配置如下,具体请见 SmartIDE 插件市场文档

"extensionsGallery": {
    "serviceUrl": "https://marketplace.smartide.cn/vscode/gallery",
    "itemUrl": "https://marketplace.smartide.cn/vscode/item"
}

"linkProtectionTrustedDomains": [
    "https://marketplace.smartide.cn"
]

以下视频是使用VSCodium分别从 Eclipse OpenVSXSmartIDE插件市场 下载插件的速度比较,根据网络状况不同,可以提速2-5倍甚至更多。

SmartIDE插件市场的代码以及部署文档开源免费(EPL-2.0)提供给社区,并且我们为其企业提供私有部署技术支持服务。相关文档如下:

说明:Eclipse OpenVSX 是Eclipse基金会旗下的一款采用EPL-2.0开源授权的开源软件,按照 Github官网 上的说法:OpenVSX提供了一个 Visual Studio Marketplace 的替代品,包括可用于管理VSCode插件的数据库以及对应的Web应用,同时提供了一个cli工具用于后台管理。Eclipse OpenVSX出现的原因是微软并不允许类 VSCode IDE (VSCode的Fork) 使用官方的插件市场,因此社区需要一个类似的基础设施服务,具体可以参考这个 Issue

SmartIDE插件市场是OpenVSX的一个fork,我们在OpenVSX的基础上进行一些修改以便适合中国开发者使用,包括:界面的中文汉化,插件自动同步到国内(使用GitHub Action),针对国内部署进行验证,测试以及服务托管。因此,SmartIDE插件市场是 Eclipse OpenVSX 的一个代理服务,目的是方便国内的开发者安装和管理VSCode的插件。同时,也支持企业使用SmartIDE插件市场进行私有部署。当然,我们也欢迎国内的开发者直接将自己的插件发布到我们所运行的 SmartIDE插件市场,如果你有类似的需求,请和我们联系。

社区早鸟计划

如果你对云原生开发环境感兴趣,请扫描以下二维码加入我们的 SmartIDE社区早鸟计划

谢谢您对SmartIDE的关注,让我们一起成为云原生时代的 Smart开发者, 享受 开发从未如此简单 的快乐。

2022年5月7日

SmartIDE v0.1.16 已经发布 - 支持阿里&蚂蚁开源的国产 IDE OpenSumi

支持自阿里&蚂蚁开源的国产 IDE OpenSumi

SmartIDE v0.1.16 (Build 3137) 已经在2022年4月19日发布到稳定版通道,我们在这个版本中增加了阿里和蚂蚁发布的国产IDE OpenSumi的支持,以及其他一些改进。SmartIDE 从 Sprint 11 (v0.1.11) 开始已经将重心转向 Server版 的开发,并且已经针对社区开放了server的内测。但是对于 CLI 的改进和增强一直没有停止,因为 CLI 是 SmartIDE 的核心,实际上我们的 Server 版对于 工作区 的管理也是通过云原生开源流水线框架 Tekton 调度 CLI 实现的。

我们将在近期发布更加完善的 Server 版安装部署手册和文档,同时 Server 版 和 CLI 核心代码也将在近期开源。SmartIDE 的核心代码将采用GPL协议开源,允许任何组织和个人免费使用我们的代码搭建自己的云原生IDE环境。

OpenSumi 简介

OpenSumi官网

严格来说,阿里的 OpenSumi 并不是一个IDE产品,而是一个IDE二次开发框架。这个定位与 Eclipse Cheia 的定位相同。SmartIDE 的早期版本也支持 Eclipse Theia,但是由于其操作体验与VSCode还是存在一定的差距,后续我们将重心转向类VSCode的IDE支持,比如对 OpenVSCode Server 的支持,以及 JetBrains 系列IDE全家桶的支持。阿里&蚂蚁的开发团队在2022年3月3日发布了OpenSumi以后,SmartIDE团队对这款IDE进行了研究,认为可以替代Eclipse Theia 作为未来提供 “定制化IDE” 解决方案的基座,因此将重心转向了对 OpenSumi的支持,按照阿里&蚂蚁相关文章的说明:

“OpenSumi 是一款面向垂直领域,低门槛、高性能、高定制性的双端(Web 及 Electron)IDE 研发框架,基于 TypeScript+React 进行编码,实现了包含资源管理器、编辑器、调试、Git 面板、搜索⾯板等核新功能模块。开发者只要基于起步项目进行简单配置,就可以快速搭建属于自己的本地或云端 IDE 产品。”原文链接

OpenSumi 当前已经在阿里内部广泛应用在很多场景,具这篇 云原生架构下蚂蚁 Cloud IDE 的应用实践 的文章显示,阿里内部的的很多研发相关的方案都有在IDE中的落地场景,比如:

云测平台集成在IDE中的手机测试环境

云测平台集成在IDE中的手机测试环境

代码平台中直接在IDE中提交PR进行代码评审

代码平台中直接在IDE中提交PR进行代码评审

新人培训和入职测试场景

新人培训和入职测试场景

定制化IDE解决方案

随着软件在我们日常生活中的广泛应用,软件开发不再会是一个特定的职业而会变成一种生存技能。就如同驾驶汽车的技能一样,在汽车刚刚出现的时候,驾驶汽车一度都是一项专业技能,司机也是一个专门的职业,而随着汽车逐步演变成了我们的生活交通的普遍手段,司机也从一个职业变成一种特定的生活技能。

对于软件开发工具而言,它也会从一个只有专业人员才能掌握的工具变成每个人都需要的日常工具。但是软件和汽车还有一个本质区别,就是汽车仅仅是一种交通工具、是单一行业;而软件则是各行各业都需要的基本组成部分,这个特性必将推进软件开发工具(IDE)向着专业化定制化的方向发展,需要根据不同行业的特点提供针对性的快速开发特性,以便降低软件提供者的门槛,提高交付效率和质量。这一点上,在很多的大型软件开发团队中早已有所体现,比如很多大型银行都在Eclipse的基础上定制开发了自己的开发框架和工具集,并在企业内部作为开发规范进行推广,因为这样可以帮助他们的开发人员提高工作效率,减少重复劳动,规范交付过程;再比如微软内部的DevDiv,就是专门定位于帮助微软的软件开发团队(比如:Windows, Office, XBox等)提供开发工具的专业化团队,其产品Visual Studio, Visual Studio Code 和 Azure DevOps 都是专业化IDE的业界天花板。这些案例都说明,专业的软件开发团队需要定制化的专业工具才能保证交付效率。

IDE 产品的研发一直以来都是一件门槛高、费时费力的事情,OpenSumi 通过开源 OpenSumi 帮助对 IDE 有兴趣的开发者更好地了解并掌握 IDE 研发这项技术,让更多的开发者可以以一种低门槛的方式去研发自己的 IDE 产品。OpenSumi 也从几个方面提供了很好发展路线图,比如:高度可定制的UI,完全开放的插件体系,对VSCode API适配的完整计划以及兼容VSCode Extension的特性。这些都将为定制化IDE解决方案提供必要的支撑,比如可以开发出类似下图这样的可视化开发场景。

SmartIDE专注于云原生容器化工作区的管理和调度,我们的目标就是支持各类开发者使用的IDE,OpenSumi符合SmartIDE的IDE生态定位。相信随着SmartIDE和OpenSumi的进一步成熟,会为开发者,特别是中国开发者带来更高效的云原生开发新体验!

定制化IDE

使用 SmartIDE 启动 OpenSumi WebIDE

OpenSumi的定位非常符合SmartIDE对IDE定制化解决方案的需求,因此我们针对OpenSumi进行了适配和集成,开发者可以使用一个非常简单的指令即可在浏览器中启动一个基于OpenSumi WebIDE 的 node.js 开发环境,具体请参考 Node快速启动 文档。SmartIDE支持7种主流技术栈,包括:JavaScript/Node.js,Java ,DotNet,Python ,PHP,Go语言和C/C++,并且支持在Windows/MacOS/Linux上跨平台使用,此次扩展了IDE支持后,将我们所支持的IDE也扩展到3大体系,分别是:VSCode,JetBrains和OpenSumi。

快速启动OpenSumi的Node.js开发环境指令如下

## 使用OpenSumi WebIDE开启Node开发环境
smartide new node -T opensumi

以下是处于单步调试状态的 OpenSumi WebIDE

OpenSumi调试状态

或者也可以通过我们的 计算器 示例应用体验使用OpenSumi开发调试Node.js应用的过程:

## 使用OpenSumi调试计算器示例
smartide start https://gitee.com/idcf-boat-house/boathouse-calculator.git --filepath .ide/opensumi.ide.yaml

以下是正在单步调试 计算器示例应用 的OpenSumi WebIDE,B站视频

相关链接:

社区早鸟计划

如果你对云原生开发环境感兴趣,请扫描一下二维码加入我们的 SmartIDE社区早鸟计划

谢谢您对SmartIDE的关注,让我们一起成为云原生时代的 Smart开发者, 享受 开发从未如此简单 的快乐。

2022年4月19日

SmartIDE Sprint 14 Server版内测 (v0.1.14)

Server版内测,cli发布linux版本,开发者镜像开源。

在过去的3个迭代中,SmartIDE开发团队完成了Server内测版本的开发,当前的Server版已经可以支持开发者自助添加Linux主机并使用这些主机资源作为自己的开发环境进行应用开发调试,所有的环境通过开发者镜像提供并全部采用容器的方式运行。为了配合以上场景的实现,我们这次终于发布了Linux版本的cli工具,因为Server版的主机调度就是通过这个linux版本的cli进行的,因此我们可以确保这个cli是经过测试并且可以在常见场景下可靠运行。同时,我们还完成了全部 SmartIDE开发者镜像 的构建工作,当前已经发布了 node/javascript/前端、java、python、dotNet、golang、php、c/c++ 这7个主流技术栈的相关镜像的构建和发布,而且每一种技术栈都提供了SDK-Only、VSCode WebIDE 和 JetBrains WebIDE 3类不同用途的镜像方便开发者选择使用。

Server内测

2021年12月3日,SmartIDE 发布了第一个社区可用的版本,那个时候的SmartIDE是以一款命令行工具(cli)的形式出现的。我们之所以先以命令行工具的方式提供SmartIDE的功能,是因为cli本身承载了SmartIDE的核心功能:工作区调度。cli的发布让开发者可以在不了解容器技术,无需学习docker指令以及k8s的工作机制的前提下,一键完成 SmartIDE工作区 的部署,而且在工作区中可以内嵌自己喜欢的WebIDE(VSCode或者JetBrains全家桶)。cli的发布给开发者提供了极大的便利,使得以前必须要专业运维人员才能完成的复杂环境搭建工作都可以非常方便地自助完成。

当然,cli也有它的缺点,就是用户体验不好,操作门槛高。用户必须充分了解cli的各种指令和参数才能顺利地完成工作区的创建和管理;因此我们在cli的功能相对稳定之后便开始着手进行Server版的开发。

SmartIDE Server 作为 SmartIDE 企业版功能的基座,为用户提供简单直观的操作界面,进一步降低SmartIDE/云原生开发的门槛。

下图:使用Server一键创建工作区

下图:工作区启动后的详情页以及正在使用中的JetBrains IntelliJ IDEA WebIDE (Projector),同时打开的还有集成在工作区中的 phpMyAdmin 工具。

内测邀请方式

如果您对 SmartIDE Server 有兴趣,可以扫描以下二维码,添加“小S”微信,加入SmartIDE早鸟计划后即可获得内测机会。

Linux 版 SmartIDE CLI 工具

从SmartIDE发布以来,一直都有小伙伴希望直接在Linux主机上运行我们的 cli 工具,在这次的发布中我们已经将 Linux 版本的安装脚本更新在了官网上,大家可以通过 安装文档 获取安装脚本

请注意:在获取安装脚本的时候注意选择 Linux 标签页,Linux版本同样提供稳定版和每日构建版两个通道。

Linux版本安装和运行效果如下

开发者镜像和模版库开源

为了能够让大多数开发者都可以享受到SmartIDE带来的便捷,SmartIDE 提供了 主流开发语言的SDK 的容器镜像,包括 node/javascript、java、golang、python、dotnet/C#、php、C/C++,并且集成了VSCode和JetBrains两大主流IDE体系。开发者可以直接使用这些镜像作为自己的通用开发环境,或者以这些镜像为基础来构建自己专属的开发镜像。

SmartIDE所提供的开发者容器镜像中已经针对开发调试和测试场景进行了一系列的优化,使用SmartIDE的开发者镜像会有一系列的好处,比如:非root用户运行内置SSH服务支持

为了同时兼顾国内和国外开发者使用,所有SmartIDE的镜像同时托管至阿里云和Docker Hub,方便开发者根据自己的地理位置选择最快速的拉取地址:

  • 国内阿里云地址:registry.cn-hangzhou.aliyuncs.com/smartide/<镜像名称:TAG>
  • 国外 Docker Hub 地址:registry.hub.docker.com/smartide/<镜像名称:TAG>

我们在 SmartIDE CLI 中内置了IDE模版功能,开发者可以使用 smartide new 指令获取所有可用的模版,这些模版与以上的开发者镜像一一对应,可以用来一键创建标准化的开发环境。

SmartIDE模版库本身是开源的,地址为

使用模版库开发者可以一键创建自己需要的IDE开发环境,比如:

#########################################
# Node/JavaScript 前端技术栈
#########################################

## 创建带有node全版本sdk的开发容器,无IDE,可通过VSCode SSH Remote或者JetBrains Gateway接入
smartide new node
## 创建带有node全版本sdk的开发容器,使用VSCode WebIDE
smartide new node -T vscode
## 创建带有node全版本sdk的开发容器,使用JetBrains WebStorm WebIDE
smartide new node -T webstorm

我们这次发布了覆盖7个主流技术栈的SDK-Only, VSCode 和 JetBrains IDE开发者镜像一共22个,您可以通过 镜像和模版 文档获取详细列表,包括其对应的 docker pull指令和smartide new指令。

SmartIDE Sprint 9 (v0.1.9)

smartide-cli进行稳定性和体验性加强,k8s Start, Image V2 体系开发,JetBrain体系WebIDE支持。

在过去的Sprint 8 和 Spring 9 中,我们进一步加强了当前的SmartIDE CLI组件的稳定性和易用性,同时启动了k8s环境部署能力的开发和SmartIDE Server的总体架构设计以及调度引擎的核心能力开发。另外,我们也在本次迭代中发布了对JetBrain全家桶系列中的IntelliJ IDEA, Rider和Goland三种c

关键特性说明

稳定性和体验增强

  • 环境变量注入逻辑优化
    • #622 修复环境变量注入过程中互相覆盖的问题,确保所有环境变量均可以正常注入
  • Vol映射逻辑优化:
    • #644 动态监测本地路径并替换成绝对路径,避免某些情况下因为相对路经造成的vol映射失败问题
    • #647 Windows远程模式下因为路径拼接问题启动失败
  • 状态管理优化:
    • #641 改进了在用户手工删除工作区目录后再执行remove/reset操作无法删除记录的问题(Github Issue #18)
    • #636 reset -ya 命令中文字提示问题
  • 体验增强
    • #649 提供短小命令集 ls | rm | v
    • #645 启动指令简化, 提供 smartide start 一键启动方式,自动完成git clone动作然后自动执行 smartide start

k8s start

  • k8s start 个人开发者版
    • #616 允许用户使用 smartide start –k8s 的方式完成 dev-container 在所指定的K8s集群中的部署,代码拉取和端口转发动作;开发者仍然可以通过类似 http://localhost:6800 的方式访问部署在k8s pod中的WebIDE

SmartIDE Images 体系

  • JetBrain Projector 可用镜像
    • #612 制作 JetBrain IDEA, Rider 和 Goland 镜像
  • Image V2 体系开发
    • #567 Image V2 镜像体系开发,完成V2镜像体系规划,采用三层镜像体系:base-sdk-IDE;本迭代完成了 smartide-base-v2, smartide-node-v2, smartide-node-v2-vscode 的镜像交付

Smart IDE Server 架构设计和基础能力开发

  • #618 使用tekton流水线任务封装smartide-cli,为Server核心调度引擎提供基础

SmartIDE Image V2

SmartIDE的核心能力是容器化开发环境,因此对容器镜像的优化是我们一直努力的方向。虽然Docker技术从2013年就开始在全球普及,Docker Hub上也有数亿的镜像可供大家使用,但是绝大多数镜像都没有为开发调试环境进行优化,当然这和容器化技术在之前主要被用于运维领域有很大关系,换句话说,容器化技术对于开发者的潜能其实并没有被充分挖掘。SmartIDE Image 的设计就是为了让容器化技术为开发者服务,解决我们在开发调试过程中的各种痛点和难题。

因此,SmartIDE Image 的设计目标是:通过合理利用容器化技术,为开发者提供统一、标准化、满足开发调试测试需求的镜像,在这个目标之下,我们将镜像分成3个层次

  • L0 - Base镜像提供基础能力,比如:认证,权限,SSH;使用Ubuntu满足日常开发基础组件的需求
  • L1 - SDK镜像提供开发语言环境支持能力,同时提供SDK Only的使用方式,允许本地IDE将SDK镜像作为开发环境直接使用,不嵌入WebIDE
  • L2 - WebIDE镜像,在SDK镜像的基础上嵌入常用的IDE,主要支持3大体系
    • VSCode
    • JetBrain Projector
    • Eclipse Theia

这些容器镜像不仅SmartIDE可以使用,开发者如果对Docker的操作比较熟悉,也可以直接使用Docker和Docker-Compose工具来直接使用这些镜像,榆次你我们未来会在GitHub/Gitee上开源这些镜像,支持开发者在不使用SmartIDE的情况下直接使用镜像作为自己的开发环境。

SmartIDE Server 设计目标

SmartIDE产品的核心理念就是让开发者具备云原生的超能力,同时又不必学习复杂的云原生知识。”把复杂留给自己,把简单给到开发者“ 就是这个理念最好的总结,也因此我们的口号就是 【Be a Smart Developer 开发从未如此简单】。未来我们即将发布的SmartIDE Server也将延续这个理念,确保以下设计目标得一体现:

  • 基本能力
    • 允许开发者自行注册资源作为SmartIDE的调度目标,包括:主机和k8s集群
  • 独立开发者/团队版
    • 允许开发者自行一键部署:smartide server install 指令集
    • 支持单机、VM集群、k8s集群三种部署模式;最大化降低开发者自行部署SmartIDE Server的难度,做到任何人都能部署(无需专业运维人员,无需专业运维知识也能部署)
  • 企业版
    • 认证体系集成
    • 支持多团队,多集群管理
    • 私有模板库
    • 私有镜像仓库,企业定制版SmartIDE Images

我们相信,具备了这些能力的SmartIDE一定可以助力开发者最大化利用云的价值,成为具备超能力的开发者,一个人搞定以往需要一队人才能搞定的工作。

2021.1.4 徐磊于北京

SmartIDE 产品发布 (v0.1.7)

SmartIDE v0.1.7 发布说明。增加状态管理功能,引入工作区(Workspace)概念,支持快速重新启动工作区,增加smartide new命令并提供项目模板支持,远程主机模式稳定性加强,完整适配Boathouse前后端调试场景。正式对外发布。

在经过了7个迭代以后,SmartIDE终于对外正式发布了,我们在2021年12月2日通过【冬哥有话说】栏目进行了一场产品发布会,正式对外公布了SmartIDE当前的功能、产品规划路线图以及后期推广计划。发布会本身非常成功,有超过2000人通过B站直播间直接参与了整个直播,整个直播持续了2个小时,有超过1500人坚持到最后。我们在发布会之前1周投放在B站上的产品介绍视频【SmartIDE - 开发从未如此简单】获得了超过1.4万的点击率并为我们的B站渠道收获了超过200名粉丝。

以下是这次发布会的视频录制

SmartIDE的三种模式

在发布会上,我们公布了SmartIDE的三种主要形态,包括:本地模式,远程主机模式和k8s模式。

  • 本地模式: 本地模式通过一个简单的 smartide start 命令,根据嵌入在代码库中的环境说明文件(.ide.yaml)完成环境的启动,让开发者可以无需搭建任何开发环境,即可通过容器的方式开始编码调试以及基本的源代码管理(Git)操作,同时在这个环境中还嵌入了一个WebIDE。
  • 远程主机模式: 远程主机模式允许用户在 smartide start 命令中增加 –host 参数直接调度一台远程Linux完成开发环境的启动。相对于本地模式,远程主机模式更能够体现SmartIDE的能力,开发者可以利用远程主机更为强大的算力,更庞大的存储以及更高速的网络获取更好的开发体验,还可以完成一些本地模式下无法完成的开发操作,比如:AI和大数据开发,大型微服务项目的开发等等。SmartIDE对于开发者使用的远程主机没有任何限制,只需要开发者可以通过SSH方式访问主机即可,远程主机可以位于任何位置,包括:公有云,私有云,企业数据中心甚至开发者自己家里。
  • k8s模式: 将远程主机模式命令中的 –host 替换成 –k8s,开发者即可将开发环境一键部署到 Kubernetes (k8s) 集群中。与远程主机模式一样,SmartIDE对于开发者所使用的k8s集群没有任何限制,无论是公有云托管式集群,还是自行部署的集群均可。只要开发者对于某个namespace具备部署权限,即可通过SmartIDE完成开发环境的一键部署。k8s模式将为开发者开辟一个全新的天地,借助k8s所提供的高度灵活高效的环境调度能力,我们可以为开发者提供更加丰富的使用场景和更为强大的开发环境支持。

路线图

在发布会上,我们同时公布了SmartIDE未来发展的路线图,从当前我们所提供的 smartide-cli(命令行工具) 应用将贯穿未来的整个路线图,作为开发者与开发工作区(Workspace)之间进行交互的主要桥梁,在此基础上我们也将为开发者提供更加易于使用的图形化工具,包括桌面版SmartIDE工具和Web开发者门户。这些全新的能力将协助开发者完成更为复杂的环境调度和团队协作场景。SmartIDE针对独立开发者和中小团队的功能将采用开源免费的方式提供,针对企业的版本则会提供企业授权和更为完善的产品技术支持。

SmartIDE路线图

社区推广计划

同时我们还公布了后续的2项社区推广计划:

  • Smart Meetup: 我们将通过【冬哥有话说】每周推介一款好用的开源代码库给到大家,整个推介过程控制在15分钟内,全程通过演示的方式完成,期间将使用SmartIDE来启动开源代码库的编码调试,让开发者在了解了开源项目本身的价值的同时了解SmartIDE带来的快速便捷开发体验。
  • Smart早鸟计划: 我们将持续的在社区中招募希望提前体验SmartIDE的开发者,加入我们的微信群。作为一款由开发者为开发者打造的开发工具,我们希望听取真正使用者的意见,持续改进我们的产品,和开发者一起将这个产品打造成开发者手中的利剑。

v0.1.7发布说明

我们本次还同时发布了了v0.1.7版本的 smartide-cli 工具,其中包括了以下主要能力和功能改进:

状态管理能力

开发者的工都不是连续的,我们经常需要在受到打扰之后快速恢复工作状态或者在多个项目中进行切换。为此,我们提供了以下命令为开发者提供快速恢复工作状态的能力。

# 获取所有启动过的环境列表
smartide list
# 使用以上列表中的工作区Id(WorkspaceId)一键恢复现有工作区状态
smartide start <WorkspaceId>
# 停止/删除/清理现有工作区
smartide stop|remove <WorksapceId>

smartide new 模板库

为了方便开发者从零开始SmartIDE进行项目,我们提供了以下命令帮助开发者一键启动空白项目或者已经初始化好的项目模板

# 获取当前所有可用的项目模板
smartide new
v0.1.7.1456
SmartIDE工作区模板
TemplateType TypeName
node         _default
node         express
node         base
java         _default
golang       _default
php          _default

选项:
  -d, --debug         是否开启Debug模式,在该模式下将显示更多的日志信息
  -h, --help          help for new
  -T, --type string   类型

# 示例,一键创建 node express 项目
smartide new node -T express

SmartIDE所使用的项目模板全部采用开源方式公布在GitHub上,同时为了方便开发者使用,我们还提供了gitee的镜像。

更加详细的smartide new模板操作方式请参考:node.js快速启动手册

Linux的Docker一件安装脚本

为了方便开发者快速初始化自己的远程linux主机为SmartIDE使用,我们提供了安装脚本可以一键完成 docker 和 docker-compose 的安装配置,确保开发者可以顺利使用SmartIDE调度这台Linux主机,具体内容请参考:Docker & Docker-Compose 安装手册 (Linux服务器)

以上就是v0.1.7的主要功能,我们下个版本见。

SmartIDE v0.1.5 发布说明

SmartIDE v0.1.3 发布说明。远程主机模式完善,支持Git认证。

首先说明一下版本号的变更,你也许注意到了我们的版本号从v0.1.2直接跳到了v0.1.5,这是因为我们决定使用第三位代表我们的迭代号,所以 v0.1.5 代表这是 sprint 5 的交付版本。我们在 sprint 4 中完善了 SmartIDE 的分支策略和流水线,为了能够更为直观,我们决定将第三位版本号用来跟踪迭代。后续我也会专门提供一篇博客来说明 SmartIDE 团队是如何管理我们自己的敏捷开发流程和环境的。

在刚刚结束的Sprint 5中,我们着重对 SmartIDE 的远程主机模式进行了一系列的改进,让远程主机模式进入可用状态,以下是Sprint 5所交付特性的列表:

  • 完善远程主机连接方式:允许用户选择用户名密码或者SSH密钥两种方式连接到远程主机
  • SSH密钥同步:允许用户将本地的SSH密钥同步到远程主机上,省去用户重新设置SSH密钥的步骤
  • Git URL改进:允许用户通过https/SSH两种GitURL连接到自己的Git仓库,同时完善了私有Git库的支持(用户名密码和SSH两种认证方式都已经得到支持)
  • CLI日志输出格式优化:添加时间戳并且优化英文输出内容
  • 支持独立的docker-compose文件:允许用户使用独立的docker-compose.yaml文件,让.ide.yaml文件更加干净清晰

关键特性说明

完善远程主机模式使用场景

远程主机方式(smartide vm start)方式允许用户使用任何的远程Linux主机作为IDE运行环境,通过一个命令(smartide vm start)完成IDE在远程主机上的启动。远程主机方式可以让开发者不必受限于本地开发机的资源,使用位于数据中心,私有云或者公有云上的任何远程主机作为自己的开发环境;这种开发模式有以下优势:

  • 远程资源本地化:开发人员不必受限于本地开发机的资源(CPU,内存,网络),可以利用任何网络主机作为自己的开发环境。
  • 本地开发体验:在远程主机上运行的开发环境如果有任何端口需要被访问,开发人员都可以通过 localhost:port 方式访问到,smartide会在后台处理所有复杂的端口转发动作,开发人员无需关心中间的网络设置,也无需在远程主机上关闭防火墙或者设置云平台的网络设置。
  • 配置简单:开发人员只需要对远程主机具备SSH访问权限(密码或者公私钥方式均可),就可以将远程主机编程自己的开发机
  • 无需安装开发环境:所有开发环境全部通过容器镜像获取,开发人员不必再远程主机上安装任何环境(唯一需要的是docker和docker-compose工具需要安装好)

在Sprint 5中,我们针对远程主机模式进行了以下改进;

  1. 支持使用用户名密码和ssh公私钥两种方式登录远程主机
##用户名密码认证方式
smartide vm start --host <主机IP或者域名> --username <SSH用户名> --password <SSH密码> --repourl <Git Repo 地址>
##SSH公私钥方式
### 这种方式需要开发人员首先将远程主机设置为可以使用本地默认SSH私钥(~/.ssh/目录)登录的方式
smartide vm start --host <主机IP或者域名> --username <SSH用户名> --repourl <Git Repo 地址>
  1. repoURL 支持 http/https/ssh 3种方式
## Http/https 方式
--repoURL https://github.com/idcf-boat-house/boathouse-calculator.git
## SSH方式
### 这种方式需要首先在你的git服务上登记自己本地的默认SSH密钥(~/.ssh/目录)
--repoURL git@github.com:idcf-boat-house/boathouse-calculator.git
  1. 以上登录方式和repourl格式可以混用

比如你可以使用用户名密码登录的同时使用ssh的GitURL,或者在使用ssh登录远程主机的同时使用http/https格式的GitURL。

  1. 同步本地~/.ssh/目录内容到远程主机

为了避免在远程主机上再次设置自己的ssh密钥,我们会在提示用户之后将本地~/.ssh/目录内容同步到远程主机的~/.ssh/目录。开发者在使用远程主机的时候就不必再次生成SSH密钥并到git服务器上去进行登记。

  1. 自动端口转发

下图所展示的是我正在使用SmartIDE编写本文档的现场截图,图中所标注的几个关键点解释如下:

  • 1)在远程主机的开发环境中启动了 hugo server 并且运行在 1313 端口上
  • 2)SmartIDE 本地驻守程序自动完成远程主机上的1313端口到本地1313端口的转发动作,同时转发的还有WebIDE所使用的3000端口,被转发到了本地的6800端口
  • 3)通过 http://localhost:6800 可以直接访问远程主机上的 WebIDE
  • 4)通过 http://localhost:1313 可以直接访问远程主机上的 hugo server

说明Hugo 是一个用Go语言实现的静态站点生成器,你当前所浏览的 smartide.dev 站点所使用的就是hugo。我在使用hugo进行 smartide.dev 开发的过程中遇到了一个很麻烦的问题:git submodule恢复的问题,因为hugo通过git submodule的方式引入了大量GitHub代码库,在我本地环境中获取这些资源非常的缓慢。通过SmartIDE的远程主机模式,我可以使用一台云中的主机,这样我的git submodule获取时间可以从20-30分钟(本地模式)减少到2分钟(远程主机模式)。

以上就是Sprint5所发布版本的特性描述,我们2周后再见。

徐磊 2021.11.05于北京

SmartIDE v0.1.2 发布说明

SmartIDE的第一次版本发布。

各位开发者,大家好。在2021年10月24日程序员节这一天,SmartIDE的第一个公开发行版 v0.1.2 终于对外发布,我们并没有特意选择这个日子,但是冥冥之中我们的代码就把我们推送到了这个日子和大家见面,难道SmartIDE的代码是有生命的?

既然SmartIDE的代码是如此的懂得开发者,那么就让我们来认识一下这位新朋友。到底SmartIDE是谁?她能做些什么?

“人如其名”,SmartIDE是一个Smart的IDE(智能化集成开发环境)。你可能在想:好吧,又是一个新的IDE,我已经有了vscode/jetbrain全家桶,为什么我还需要另外一个IDE?

我们为什么要开发SmartIDE?

在当今这个软件吞噬世界的时代,每一家公司都是一家软件公司 … …

如今,软件确实已经深入我们生活的方方面面,没有软件你甚至无法点餐,无法购物,无法交水电费;我们生活的每一个环节都已经被软件包裹。在这些软件的背后是云计算,大数据和人工智能等等各种高新科技;这些现代IT基础设施在过去的5年左右获得了非常显著的发展,我们每个人都是这些高科技成果的受益者 … … 但是,为你提供这些高科技成果的开发者们自己所使用的软件(开发工具)却仍然像 “刀耕火种” 一般落后。

你可能会觉得这是危言耸听,那么让我来举一个简单的例子:大家一定都通过微信给自己的朋友发送过图片,这个过程非常简单,拿出手机,拍照,打开微信点击发送图片,完成。收到图片的朋友直接打开就可以看到你拍摄的照片了。但是对于开发者来说,如果要将一份代码快照发送给另外一位开发者,那么对方可能要用上几天的时间才能看到这份代码运行的样子。作为普通人,你恐怕无法理解这是为什么,如果你是一名开发者,你一定知道我在说什么!当然,我们也不指望普通人能够理解我们,对么?

Dilbert的漫画

这样的场景是不是很熟悉?开发环境的搭建对于开发者来说理所当然的是要占用大量时间和精力的,但是对于 “产品经理/领导/老板/老婆/老妈/朋友” 来说,开始写代码就应该像打开Word写个文档一样简单,只有开发者自己知道这其实很不简单。

但是开发者已经有了非常好用的IDE了,Visual Studio Code, JetBrain全家桶都已经非常成熟,并不需要另外一个IDE了。确实,SmartIDE也并不是另外一个IDE,我们不会重新造轮子,我们只是希望你的轮子可以转的更快、更高效、更简单。

如果我们可以

git clone https://github.com/idcf-boat-house/boathouse-calculator.git
cd boathouse-calculator
smartide start

然后就可以进行开发和调试,是不是很爽?

图中重点:

  • 通过右下角的的终端,你可以看到仅用一个简单的命令(smartide start)就完成了开发环境的搭建
  • 在右上角的浏览器中运行着一个大家熟悉的Visual Studio Code,并且已经进入了单步调试状态,可以通过鼠标悬停在变量上就获取变量当前的赋值,vscode左侧的调用堆栈,变量监视器等的都在实时跟踪应用运行状态
  • 左侧的浏览器中是我们正在调试的程序,这是一个用node.js编写的计算器应用并处于调试终端状态
  • 以上全部的操作都通过浏览器的方式运行,无需提前安装任何开发环境,SDK或者IDE。你所需要的只有代码库和SmartIDE。
  • 以上环境可以运行在你本地电脑或者云端服务器,但开发者全部都可以通过localhost访问,无需在服务器上另外开启任何端口。

SmartIDE可以帮助你完成开发环境的一键搭建,你只需要学会一个命令 (smartide start) 就可以在自己所需要的环境中,使用自己喜欢的开发工具进行编码和开发调试了,不再需要安装任何工具,SDK,调试器,编译器,环境变量等繁琐的操作。如果我们把Vscode和JetBrain这些IDE称为传统IDE的话,这些传统IDE最大的问题是:他们虽然在 I (Integration) 和 D (Development) 上面都做的非常不错,但是都没有解决 E (Environment) 的问题。SmartIDE的重点就是要解决 E 的问题。

SmartIDE v0.1.2 发布说明

这是SmartIDE的第一个公开发行版,我们已经实现了如下功能:

  • 本地模式 本地模式允许开发者使用一个简单命令smartide start,一键在本地启动基于docker容器的开发环境。全部的开发工具,SDK全部根据一个存放在代码库中的.ide.yaml文件通过docker容器镜像获取
  • 远程主机模式 远程主机模式与本地开发模式提供一致的体验,开发者是需要使用 smartide vm start 命令就可以将开发环境在一台可以通过SSH访问的远程Linux主机上一键启动。
  • 开发容器镜像 当前提供了 node.js, java, go 三类环境的开发容器镜像
  • WebIDE支持 支持使用 vscode 和 Eclipse Theia 两种 WebIDE 进行编码开发和单步调试
  • Web Terminal支持 通过内置于vscode/Elcipse Theia内部的terminal直接操作开发容器环境
  • 传统IDE支持 支持使用 vscode 本地 IDE 通过 SSH 方式连接到开发容器进行开发
  • 远程开发本地体验 通过 ssh tunnel 实现容器内端口的本地访问,允许开发者使用习惯的 http://localhost:port 方式访问开发容器所提供的各项能力,包括:WebIDE,传统IDE支持,Terminal支持等。
  • 多语言 当前提供中文版和英文版两种语言版本,通过自动识别开发者操作系统环境自动切换显示语言
  • 跨平台支持 当前smartide可以在 Windows 和 MacOS 两种操作系统上运行,并可以远程操作 Linux 主机,包括从 Windows远程操作 Linux 和 Mac 远程操作 Linux.
  • 一键安装和升级:开发者可以从 安装手册 获取一键安装命令,并支持在现有版本上的一键升级。

欢迎大家通过以下资源体验SmartIDE的快捷开发调试功能,并通过 GitHub 给我们提供反馈

  • 安装手册:提供Windows和Mac两种环境的一键安装和升级脚本,并提供2个更新通道。
    • 稳定版通道:提供经过完整测试的稳定版本,每2周更新
    • 每日构建版通道:包括最新的功能但可能会有不稳定的情况,每天更新
  • 示例操作手册
    • Boathouse-Calcuator 是我们通过 IDCF Boathouse 开源共创项目 提供给社区的示例应用之一,我们已经在这个应用中适配了SmartIDE的配置文件(.ide.yaml),您可以按照以上操作手册的内容体验SmartIDE的功能

祝各位开发者1024节快乐

SmartIDE选择了在这样一个特殊的日子跟大家说 Hello World。希望在后续的日子里面一直都有SmartIDE的陪伴,让每一名开发者的编码人生更加高效,快乐!

赋能每一名开发者,赋能每一家企业
– SmartIDE 团队愿景

2021.10.24 徐磊 @ 北京