# 胖模式自动打包替换环境代码
# 背景
胖模式由于项目老旧,使用的node版本也是很多年前的,每次需要替换后台环境代码时十分麻烦
需要切换到node5版本,删除本地运行的node_modules,解压流水线的node_modules包,再npm run build
,打包完后,需要登录后台,复制文件夹、替换代码、重启服务,一套流程下来基本20分钟过去了,十分影响开发体验及效率
# 优化
# 打包与开发环境统一
通过查看流水线的node_modules包,获取需要的三方包为:
"del": "1.2.0",
"fs": "0.0.2",
"gulp": "^3.8.11",
"gulp-concat": "2.5.2",
"gulp-minify-css": "1.1.1",
"gulp-rename": "1.2.2",
"gulp-uglify": "1.2.0",
"through2": "0.6.5"
全部按指定版本安装好,这样开发环境和打包就不用两套了
# 上传方案一
由于拓扑图、控制器之前都弄过打包后自动上传,可以参考实现思路
使用node-ssh
,连接后台后,执行修改、复制、上传、重启的操作。
但是试了很多个版本,发现连接后execCommand
执行命令都没反应,而同样的代码却可以在控制器环境成功执行,怀疑是胖模式限制了远程执行命令。
# 上传方案二
参考了后台使用Python写的远程执行命令的脚本,发现胖模式需要先aadmin登录才能执行命令。
于是查看nodejs有什么办法可以实现
发现ssh2
可以开启shell的交互式对话,然后通过代码执行登录逻辑后就可以执行命令了。
具体逻辑:
conn.connect({
host: config.host,
username: config.username,
password: config.password,
port: config.port,
});
conn.on("ready", () => {
conn.shell((err, stream) => {
stream.write("aadmin" + "\n");
stream.on("data", async (data) => {
if (res === "Password: ") {
// 执行二次登录
stream.write("xxx")
} else if (xxx) {
// 处理其它各种命令
}
})
})
});
能执行命令后一切就好办了,参照以前的手动流程
通过ssh的方法修改配置、复制代码、上传代码、重启,即可实现自动上传代码
最后在package.json
中添加执行命令:
"upload": "npm run build && node ./build/upload/index.js"
后续只需要一键即可实现打包上传代码的效果。