master分支永远指向线上的生产环境,且只有master分支能够指向线上生产环境。
nginx
新特性的开发分支以版本号递增命名(如v1.1.5),项目结束后能够删除。多个新特性同时开发应该建立多个开发分支,分别以不一样的版本号命名(如v1.1.4.1)
git
修复分支用于从master切出来用于修复线上bug的紧急调试分支。分支命名使用 操做者(目前) 来命名。主要是为了不在多个hotfix修复过程当中的调试冲突问题。
json
为了协调项目开发过程当中线上与新特新开发的冲突,以及紧急修复任务与未完成的新特性开发的冲突,采用了持续集成开发到测试到发布的一体化方案。在整个DevOps中,环境治理是最重要的一方面。
app
在环境治理时,咱们定义了一下咱们须要怎样的环境才能够知足咱们的平常开发、测试和发布的需求。测试
首先,咱们须要一个稳定的生产环境,所谓稳定。设计
其次,咱们须要一个灵活的开发测试环境。代理
为了解决上面的提出的环境治理的需求,咱们对环境治理的方案作了以下设计?调试
多个特性能够切出多个开发环境,线上bug也会切出一个开发环境,而后经过脚本切成hotfix环境进行调试。开发验证后发布到预发环境,通过发布测试经过后发布到生产环境。code
客户端在开发过程当中多个开发环境并存,能够根据客户端发布需求随意进行特性之间的合并,而后在合并后的开发环境中进行集成测试。对于不发布或者延后发布的特性,依旧留存在开发环境中,能够同步开发。客户端经过header中携带ack=特性值
来实现动态切换开发环境。
开发
上面咱们设计好了环境治理的方案,那么整个DevOps最核心的一环也就解决了,下面主要介绍这个治理方案的实现方法和思路。
集群上咱们选择使用Kubernets来构建整个服务体系。统一部署在Kubernets集群上的各个环境,须要经过kubectl管理,点击查看如何安装和设置kubectl。
./bin/add_service.sh
。 执行这个命令的前提是本地安装并配置好kubectl# 本地执行:切换开发环境和hotfix环境 kubectl exec $(kubectl get pods -o=name -l app=特征值 |tail -n 1) sh ./change_env.sh 环境名
至此,整个持续集成的设计方案和使用方法已经说完了,下面是实现这个设计和操做中使用到的几个脚本的实现方案的说明,这里作个记录以便你们继续改进。
经过Kubenetes自带多容器能力实现环境隔离,每一个环境建立一个独立多deployment和service。
经过kubenetes的ingress实现nginx的反向代理能力,经过配置分发规则,将不一样特征值的请求映射到不一样的service上去。
由于咱们的DevOps是集成在飞流上的,所以目前没有找到构建kubectl环境的方式,后续发现了能够改进,因此须要本地提取当前集群的ingress配置到本地ing文件。而后自动化构建脚本将自动识别是否应该在ingress文件上添加新的service配置。