You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@startuml
autonumber
hide footbox
title **Node 应用研发部署流程**
actor "开发者" as user
participant "代码仓库(GitLab)" as gitlab
participant "持续集成系统" as ci
participant "运维发布系统" as sys #orange
participant "服务器" as server
== 研发流程 ==
user -> gitlab: 提交代码
activate user
deactivate user
activate gitlab
gitlab -> ci: 单元测试
deactivate gitlab
activate ci
note right of ci: tar 或 docker
ci -> ci: 打包
ci -> sys: 推送
note right of sys: 存储到 oss
activate sys #orange
deactivate ci
deactivate sys
...
== 上线/回滚流程 ==
user -> sys: 选择要上线的版本
activate sys #orange
activate user
deactivate user
sys -> server: 推送
activate server
note right of server: **无需--安装依赖--,快速且确定**
server -> server: 解压
server -> server: 启动
server --> sys
@enduml
@startuml
autonumber
hide footbox
title **Node 应用研发部署流程**
actor "开发者" as user
participant "代码仓库(GitLab)" as gitlab
participant "持续集成系统" as ci
participant "运维发布系统" as sys #orange
participant "服务器" as server
activate user
activate gitlab
activate ci
activate sys #orange
activate server
== 研发流程 ==
user -> gitlab: 提交代码
gitlab -> ci: 单元测试
note right of ci: tar 或 docker
ci -> ci: 打包
ci -> sys: 推送
note right of sys: 存储到 oss
...
== 上线/回滚流程 ==
user -> sys: 选择要上线的版本
sys -> server: 推送
note right of server: **无需--安装依赖--,快速且确定**
server -> server: 解压
server -> server: 启动
server --> sys
@enduml
Activity
atian25 commentedon Jul 7, 2018
最后那张图,是在语雀上直接用 PlantUML 画的。
PlantUML 的优势是:
一般来说,你不需要太关注语法和布局,很自然的画即可。
当然,它提供了不少特性,可以让你画的更好看点。
如下就是那张图的源码:
看起来好像有点复杂,其实只是因为我有强迫症,喜欢用
activate/deactivate来改变生命周期。可以简化为:
[-]为什么不能在服务器上 npm install?[/-][+]科普文:为什么不能在服务器上 npm install ?[/+]IEfucker commentedon Jul 27, 2018
具体操作没看懂,是说把依赖包也git提交吗,回滚的版本也是通过git控制?
atian25 commentedon Jul 27, 2018
@IEfucker 跟 git 没啥关系,最后那张图不是画的很清楚了么,在 CI 上打包,推送到 oss 或 dockerlab,然后发布系统这边记录对应的地址即可。
YardWill commentedon Nov 8, 2018
其实docker是一个更好的解决方案,一旦打包完之后就可以直接push上去,服务器只需要pull就好了,还能配合k8s做动态扩容。
atian25 commentedon Nov 8, 2018
正文一开始就声明了吧,docker 是终极解决方案。本方案是分享给那些没有条件的小团队使用。
Gerhut commentedon Dec 18, 2018
跑单元测试时候的依赖版本和推送到发布系统的依赖版本需要保持一致吗?
atian25 commentedon Dec 18, 2018
必然啊,跑完单元测试后,直接打包推送发布系统了。
PS:这里会有一个小 GAP 需要权衡,devdep 怎么办,是 prune 了重新 install --prod,还是直接打包。
Gerhut commentedon Dec 18, 2018
OK 我把打包错理解成 docker build (install + pack) 了
对于你的问题,
npm prune --production可解wotermelon commentedon Apr 26, 2021
那你保证发布机器和生产机器系统以及其他因素都一样吗?
否则怎么保证一些node-gyp rebuild的依赖可以在这些机器上通用?
问题不在于依赖应不应该在服务器上安装,而在于如何优雅地启动服务,包括健康检查、流量切换
atian25 commentedon Apr 26, 2021
镜像啊
genffy commentedon Nov 10, 2023
https://yuque.com/yuque/help/editor-puml#comment-82306
404 了,对应的应该是 https://www.yuque.com/yuque/gpvawt/editor-puml