Devops 实施的前提条件

软件架构解耦, 可独立部署,独立升级。

流水线

流水线是指软件从版本控制仓库到用户手中可使用这一过程的自动化表现形式。对软件的每次变更都会经历一系列的流程才能发布,这一流程包括单元测试、构建、打包、部署,集成测试, 性能测试,安全扫描,发布等。流水线是对这一流程的建模。

  • 流水线的核心理念

    基于价值的交付。基于数据的准确度量,帮助开发或者管理者评估产品价值和优化团队效率。

分支模式的选择

根据开发团队的规模和实际情况可以选择适合的模式。没有绝对的好坏,各有利弊。

主干分支开发

优点:大家都往一个分支合并,更容易持续集成,因为只要不停集成测试这一个分支就行,维护起来更简单。分支合并冲突也会更容易提前暴露,这样更容易解决。
缺点:所有特性开发测试完成后才能统一发布,无法独立发布。有可能一个特性开发测试的快,另一个特性开发比较慢,但是也要等着全部特性开发并测试完成后才能发布。时间长了会降低开发比较高效的开发人员的积极性。

特性分支开发

优点:每个特性都可以独立开发,测试,发布。更灵活。
缺点:因为每个特性分支都是独立开发的,所以最后合并冲突的概率会大大增加。所以要经常将主干分支代码合并过来,减少最后合并冲突的概率。但是如果特性分支比较多,不同特性合并到主干前是独立的,最后合并冲突也是不可避免的。

主干分支开发 + 特性开关

优点:具有主干分支开发的优点,同时开发慢的特性也不会拖慢开发快的特性的发布。只要特性开关不打开,没有完成的特性代码发布到线上也没有问题。
缺点:特性开关是会侵入到现有代码的,增加代码的复杂度。随着特性开关的越来越多会增加后期代码维护的难度。

根据开发团队规模:小规模团队一般采用特性分支的模式,,非常大的团队一般采用主干开发模式或者主干开发加上特性开关。因为现在微服务的流行,一般服务拆分后每个服务都是较小的团队维护,所以现在采用特性分支开发的比较多。

环境

线下环境

  • 开发测试环境:这个环境主要是开发使用,能够快速验证自己开发完的代码。不需要和线上环境相同,如果有依赖,可以直接使用集成测试环境的服务。
  • 集成测试环境: 这个环境的应用的各类基础服务和线上环境保持一致,只是比线上环境规模小很多。因为开发和测试都在使用,同时不能影响测试的效率,所以这个环境要求稳定。如果变更是有损的,需要严格的审核,不能随意发布新的变更。如果变更是无损的,变更审核会简单点,可以较频繁的进行变更。所以无损变更可以更加充分的利用该环境,提高环境的使用效率。

线上环境

  • 预发环境 :和正式生产环境的状态基础服务共用,如 DB,KV,文件存储等。网络上独立网段划分,不承担线上真是流量。

    预发环境正式使用后的另一用途:就是生产环境出现问题,但是线下环境复现不了时,就可以在预发环境上复现。

  • 灰度环境:金丝雀发布就是基于该环境发布。简单理解就是从生产环境的集群中,再建立一个独立集群,就是再建立一个分组,独立出一个集群,大概只有1——2台服务器数量,主要针对小规模真实业务流量。如何保证流量小规模,就需要负载均衡策略上做工作, 主要两种方式:1.调用RPC,在服务化框架的复杂均衡策略中,将其权重或者流量配比降低。2.调用HTTP,在四层VIP或者七层权重上,将其权重降低。

    除了承担流量不同,其他和生产环境的应用没有差别,主要针对核心应用。

  • 生产环境

持续交付可能面临的挑战

  • 缺少自动化测试覆盖的持续交付会成为负担。当我们单元测试、API测试做的不好的时候,通过流程强加的持续交付基本上是自欺欺人,要么就是不稳定,要么就是没效果。
  • 测试团队转型,开发全栈导致的质量下降。有这么多需求,没时间写测试,或者保姆式服务享受惯了,开发人员自己没这个意识。