前提
单业务线多分支开发,结构比较简单,只需要部署好个人的本地环境即可,如统一的docker镜像,公共的开发数据库/存储服务等(也可以是各自的本地服务) 但是当业务线较多,相互之间又存在依赖关系,环境就会变得复杂多了。
现状
- 小组:m
- 项目:n
- 部署: 单项目各自负责部署
- 环境:线上开发m套,线上测试m套;本地开发环境一般只有个人部署的项目,其他依赖酌情处理
常见的情况:
- a.项目A有n个其他项目提供的接口,在部署A的时候必须要其他项目可提供服务;
- b.新需求来了,主要任务在A项目上,小组Team1负责完成;
- c.开发过程中发现需求有涉及到了,其他项目需要做变动;这个时候需要在部署A的时候,同步部署其他项目了.项目由于是分开部署的,小组A需要和其他小组协调沟通,同步进行,联调-测试-发布都需要线下沟通同步进行
- d.更麻烦的是,在开发A项目的时候,又来其他需求了(其他项目组-被依赖项目);同步开发,但是开发环境/测试环境只有m套,每个小组各自使用一套,新的需求需要不断沟通测试人员,协调开发环境/测试环境,常常处于等待-沟通-等待 状态
开发细节:Team1在A项目上基于master创建了开发分支feature/pro1,小组成员基于feature/prod1分支创建各自的开发分支
导致的问题
1.部署繁琐,依赖复杂
2.不统一;没有任何一个完整的环境
3.不稳定;无论是本地开发环境还是线上测试依赖的项目时刻都有被修改的可能
4.环境资源有限,需要反复沟通协调;也还存在线上环境被构建其他分支的情况
解决思路
1.公共服务独立且 明确
统一数据库服务
- 只提供 dev,prev,prod三种
- dev 数据来源prod,定期同步(脱敏)
- prev = prod,线上数据库集群,实时双向同步
- prod 线上数据库
2.A项目及所有依赖项目共同部署
- 整理通用的公共镜像
- 拉取对应项目及分支
- 部署所有项目
- 使用一致的数据库服务(开发环境就是开发库)
3.K8s部署服务名-oomdev
- 分配随机端口
- 获取访问地址`DEV_SERVER`:http://localhost:8001/api/v1/namespaces/docker/services/oomdev
- Nginx转发请求oomdev.local.dev.com到访问地址`DEV_SERVER`
- 内部host文件修改-对应部署服务名
- 项目配置文件依赖服务名-固定
4.访问路由
- 局域网访问*.local.dev.com解析到测试环境的负载服务器
- 由负载服务器转发到对应的服务
5.环境使用
- 个人申请:提交环境名
- 运维审核(自动审核通过?)
- 服务部署脚本创建
- 项目(部署/更新)-对应分支拉取