README.exe 是的,你看错是EXE
作为开发者,拿到一个新的代码库的时候一般都会先去看README文件,通过这个文件可以知道这套代码所需要安装的环境,工具和操作方式。这件事情本来应该是一件很愉悦的事情,因为每一套新代码其实都是开发者的新玩具,拿到新玩具的心情那肯定是不错的。但是,当你阅读玩具说明书之后,发现这份说明书完全不配套的时候,那心里一定是一万匹草泥马在奔腾。当然,这也很容易理解,开发者不爱写文档,特别是那些没有用的文档。至少,README对写的人来说其实没啥用,因为写的人都已经清楚了文档中的内容,至于看的人感受如何,那就呵呵吧。
这个问题的根源在于README只能看,不能运行!如果我们能够让README活起来,从 README.md 变成 README.exe,那是不是就可以解决这个问题了呢?答案是肯定的!因为写的人自己也可以用这份文档来启动项目。这样,写文档的人有了动力,看(运行)文档的人也会很爽。
这就是SmartIDE的核心功能: IDE as Code能力。
神奇的IDE配置文件
SmartIDE最初始的设计灵感就是如何能够让README活起来?为了做到这一点,我们设计了一个 IDE配置文件 (默认文件名 .ide.yaml)文件格式。这个文件中完整描述了运行当前代码所需要的环境配置,包括 基础环境SDK,应用服务器,应用端口,配置文件,网络依赖以及所使用的IDE工具。有了这个文件,开发者就可以真正实现一键启动开发调试,而不会再听到:“在我这里工作呀,是你的环境问题!” 这种骇人听闻的抱怨。
有了这个文件,任何人都可以使用一个简单的指令来一键搭建一模一样的开发环境,指令如下:
Copy
smartide start https://github.com/idcf-boat-house/boathouse-calculator
这个指令会自动识别代码库中的 IDE配置文件,根据文件中对开发环境的描述完成获取开发者镜像、启动开发容器、克隆代码、运行初始化脚本等一系列动作,最终一个 完整可运行的环境 呈现在开发者的面前,下面这段视频展示了整个运行过程:
IDE配置文件详解
以上示例中所使用的 .ide.yaml 文件如下
Copy
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 https://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开发者, 享受 开发从未如此简单 的快乐。
README.exe 是的,你看错是EXE的更多相关文章
- yii2框架安装运行init.bat报错php.exe不是内部或外部命令
在安装yii2框架的时候,遇到一个很纠结的问题.就是当我把安装包下载下来之后,在公司的电脑安装可以正常,当我回家用自己的电脑安装就报错,提示 php.exe 不是内部或外部命令,也不是可运行的程序.这 ...
- vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
- pip3命令报错Fatal error in launcher: Unable to create process using '"d:\old_files\py3.6\python.exe" "E:\py3.6\Scripts\pip3.exe" list'
cmd输入pip3 list命令报错 Fatal error in launcher: Unable to create process using '"d:\old_files\py3.6 ...
- Python ——selenium报错 'chromedriver.exe' executable needs to be in PATH
from selenium import webdriver dr = webdriver.Chrome() 运行时报错: 问题分析: 1.没有下载chromedriver.exe 2.chromed ...
- go调用python命令行参数过量报错python.exe: The filename or extension is too long.的解决方法
当我们在调用python时,如果传入的参数数据量过大时会报错 python.exe: The filename or extension is too long. 这时候我们的解决办法是放弃传参,将想 ...
- wpf dll和exe合并成一个新的exe
原文:wpf dll和exe合并成一个新的exe 微软有一个工具叫ILMerge可以合并dll exe等,但是对于wpf的应用程序而言这个工具就不好用了.我的这方法也是从国外一个博客上找来的.仅供大家 ...
- exe文件打开方式(恢复EXE文件关联)
文件关联损坏常常是计算机病毒造成的,目前网络上有很多相关修复工具,相对来说,System Repair Engineer 支持的修复格式是比较齐全的,这个工具可以在http://www.kztechs ...
- Atitit.程序包装exe启动器 打包 发布 设计 -生成exe java
Atitit.程序包装exe启动器 打包 发布 设计 -生成exe java 1. 要实现的功能1 2. ahk是个好东东..能启动了...1 3. exe4j vs nativej1 4. 2 ...
- 是的 你没看错!!!用JAVA为MCU开发物联网程序?
是的 你没看错!!!用JAVA为MCU开发物联网程序? 一直以来,物联网设备这种嵌入式硬件,对于Java软件开发者来说,就是Black Magic Box,什么中断.寄存器,什么 ...
随机推荐
- scrapy框架爬取国际庄2011-2022的天气情况
目标网站:http://www.tianqihoubao.com/lishi/ 一.创建项目+初始化爬虫文件: scrapy startpoject tianqihoubaocd tianqihoub ...
- .NET程序设计实验三
实验三 Windows 应用程序开发 一.实验目的 1. 掌握窗口控件的使用方法: 2. 掌握Windows 的编程基础. 二.实验要求 根据要求,编写 C#程序,并将程序代码和运行结果写入实验报告 ...
- 利用window对象自带atob和btoa方法进行base64的编码和解码
项目中一般需要将表单中的数据进行编码之后再进行传输到服务器,这个时候就需要base64编码 现在可以使用window自带的方法window.atob() 和 window.btoa() 方法进行 ...
- [强网杯2019]upload buuoj
提示:重点在这,可节省大部分时间 扫描后台 发现www.tar.gz备份文件. 这平台有429[太多请求限制]防护.dirsearch扫描一堆429.于是用了最笨的方法. 文件上传 先注册个账号 注册 ...
- mysql_install_db 一次修复密码
我用mysql 社区版进行的安装,在linux centos 操作系统下, yum install 方式系统默认安装时没有密码的,需要你及时设置,但是我操作多次后,并没有修改密码,启动和关闭多次以后就 ...
- JavaScript学习总结2-对象
JavaScript中对象除了最后一个属性以外都在结尾加逗号,同时所有属性都要在{ }内 1 <!DOCTYPE html> 2 <html lang="en"& ...
- OpenHarmony标准设备应用开发(三)——分布式数据管理
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章,我们通过分布式音乐播放器.分布式炸弹.分布式购物车,带大家讲解了 OpenAtom OpenHarmon ...
- 腾讯云服务器ssh登录老是自动断开链接的解决办法
vim /etc/ssh/sshd_config 找到下面两行 #ClientAliveInterval 0 #ClientAliveCountMax 3 去掉注释,改成 ClientAliveInt ...
- Java Windows下读取注册表的工具类
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- 用 GraphScope 像 NetworkX 一样做图分析
NetworkX 是 Python 上最常用的图分析包,GraphScoep 兼容 NetworkX 接口.本文中我们将分享如何用 GraphScope 像 NetworkX 一样在(大)图上进行分析 ...