@
Nnq #11 dev 和 test 分支其实还有个用途是,dev 是开发分支所以应该自动更新部署到开发患教,test 则应该自动部署到测试环境,master 是最终版肯定是只包含可发布的代码才对,所以一般都是测试完成从 test 分支合并过去的
微服务 devops 还有个麻烦的事情就是,假如同时有个功能版本同时开发,那就需要部署多个不同版本,服务非常多那这个工作量就非常大了而且非常耗资源,所以我们的做法是标准的 dev 和 test 分支其实是基础版本,一般不能直接用于开发测试,而是每个版本再次创建 dev-v1 和 test-v1 这样的版本分支,然后在通过 CI CD 自动部署到 k8s 集群里,这个过程只有你当前版本需要改动的项目才建版本分支部署项目,然后通过流量染色和服务网格来组一个完整服务切面,这样就能用很小的资源和工作量给每个版本一个相对独立和完整的环境了
通过流量染色和服务网格来组一个完整服务切面这个过程也不复杂,就是前端请求里应该都带标准的版本、设备、用户标识信息,这些信息到后端后会在整个请求链路中传递,然后通过服务网格的流程来做流量匹配,如果某个服务有对应版本就请求对应版本的服务,没有则由基础版本来处理,这样你只要部署你需要修改的项目,然后用当前版本的 app 访问就能访问到你修改的服务上去,无论你的服务位于请求链路的前面和后面,而创建 dev-v1 和 test-v1 分支部署到 k8s 并注册服务网格信息这个过程完全由 CI CD 自动完成
比如整个微服务由 200 个服务组成,现在有一个版本 v1 的迭代只需要修改项目 A 和 B ,那么你只需要在项目 A 和 B 创建 dev-v1 分支,这样你就有了一个独立的 v1 版本的开发环境,其余的项目无需任何处理,测试环境也是一样的
这样一个 v1 版本的整个开发测试发布过程就变成了 dev-v1 分支完成开发,然后基于 dev-v1 创建 test-v1 提测,测试完成等到发布周期是合并进 master 统一发布,发布后 master 再合并到 dev 和 test 分支完成基础版本更新,最好删除 dev-v1 和 test-v1 分支清理环境和资源