DevOps

Jun 26, 2019 00:50 · 909 words · 2 minute read DevOps

为什么 DevOps 会火?

  • 软件的规模越来越大。
  • 保证软件的质量和快速迭代。

SDLC 软件开发生命周期

典型的软件开发生命周期由以下几个阶段组成:

  1. 规划和需求分析
  2. 需求定义
  3. 产品架构设计
  4. 产品开发与构建
  5. 产品测试
  6. 产品部署与维护

DevOps 在概念上继承了传统的软件开发生命周期,但是在每一个阶段针对具体的问题给出特定的解决方案。

比如在需求分析时如何收集和管理需求。传统软件开发过程中最害怕需求改变,可能会产生致命的打击。敏捷开发就是一种解决方式,把需求变得更小、迭代周期变得更快,用多个迭代周期来分解原来的大周期。

SBLC 软件构建生命周期

属于 SDLC 产品研发和测试阶段

  • 构建环境初始化
  • 代码预处理
  • 代码编译
  • 测试代码预处理
  • 测试代码编译
  • 单元测试
  • 打包
  • 集成测试环境准备
  • 集成测试
  • 撤销集成测试环境
  • 安装
  • 发布

针对不同的环境初始化很浪费时间,也容易出错。

代码预处理也很容易出状况。

DevOps 保证单元测试质量和覆盖率。

集成测试还分成:

  1. 集成测试前准备
  2. 集成测试
  3. 集成测试后准备

发布时如何做版本管理和迭代,区分不同的应用环境。

事件驱动

大的项目往往被切分成很多子模块。

从开发到部署的过程中,每个环节都可能产生问题。因此必须建立一个 feedback loop 用于及时有效地传达问题。

事件驱动的终极目标是问题左移,要将问题尽早地在 Dev 端解决。

极大地节约上线和测试的时间。

测试驱动

传统开发流程

拿到需求后闷头开发,功能全都开发完后开始测试,测试成功就结束,测试不成功接着开发。

如果没有时间测试。。。干脆就不测试

开发者信心爆棚,直接不测试就上线了。。。

TDD 测试驱动开发流程

反其道而行,在开发任何一个功能之前先写测试案例。

在开发时我们假设会得到某种结果。在测试案例完成后再写代码,代码写完后跑测试案例,能通过开发就结束,不能通过就进一步修改。

为什么需要 TDD?

  • 更符合自动化流程
  • 更有效地发现隐藏的连锁问题
  • 提升开发者信心
  • 节约手工测试时间
  • 代码即是文档
  • 减少重复错误率

Agile 敏捷开发

Infrastructure as code

在传统的软件部署过程中,基础设施的安装,比如操作系统、数据库、网络等都需要花费大量时间手工配置,并因为部署质量的不可靠,比如账户的安全,配置的不确定性等,为软件的运维留下潜在问题。这在日益复杂的大数据环境下越来越严重。用代码的方式来解决部署中的基础设施问具体,是提升部署效率的重要手段。