DevOps
Jun 26, 2019 00:50 · 909 words · 2 minute read
为什么 DevOps 会火?
- 软件的规模越来越大。
- 保证软件的质量和快速迭代。
SDLC 软件开发生命周期
典型的软件开发生命周期由以下几个阶段组成:
- 规划和需求分析
- 需求定义
- 产品架构设计
- 产品开发与构建
- 产品测试
- 产品部署与维护
DevOps 在概念上继承了传统的软件开发生命周期,但是在每一个阶段针对具体的问题给出特定的解决方案。
比如在需求分析时如何收集和管理需求。传统软件开发过程中最害怕需求改变,可能会产生致命的打击。敏捷开发就是一种解决方式,把需求变得更小、迭代周期变得更快,用多个迭代周期来分解原来的大周期。
SBLC 软件构建生命周期
属于 SDLC 产品研发和测试阶段
- 构建环境初始化
- 代码预处理
- 代码编译
- 测试代码预处理
- 测试代码编译
- 单元测试
- 打包
- 集成测试环境准备
- 集成测试
- 撤销集成测试环境
- 安装
- 发布
针对不同的环境初始化很浪费时间,也容易出错。
代码预处理也很容易出状况。
DevOps 保证单元测试质量和覆盖率。
集成测试还分成:
- 集成测试前准备
- 集成测试
- 集成测试后准备
发布时如何做版本管理和迭代,区分不同的应用环境。
事件驱动
大的项目往往被切分成很多子模块。
从开发到部署的过程中,每个环节都可能产生问题。因此必须建立一个 feedback loop 用于及时有效地传达问题。
事件驱动的终极目标是问题左移,要将问题尽早地在 Dev 端解决。
极大地节约上线和测试的时间。
测试驱动
传统开发流程
拿到需求后闷头开发,功能全都开发完后开始测试,测试成功就结束,测试不成功接着开发。
如果没有时间测试。。。干脆就不测试
开发者信心爆棚,直接不测试就上线了。。。
TDD 测试驱动开发流程
反其道而行,在开发任何一个功能之前先写测试案例。
在开发时我们假设会得到某种结果。在测试案例完成后再写代码,代码写完后跑测试案例,能通过开发就结束,不能通过就进一步修改。
为什么需要 TDD?
- 更符合自动化流程
- 更有效地发现隐藏的连锁问题
- 提升开发者信心
- 节约手工测试时间
- 代码即是文档
- 减少重复错误率
Agile 敏捷开发
Infrastructure as code
在传统的软件部署过程中,基础设施的安装,比如操作系统、数据库、网络等都需要花费大量时间手工配置,并因为部署质量的不可靠,比如账户的安全,配置的不确定性等,为软件的运维留下潜在问题。这在日益复杂的大数据环境下越来越严重。用代码的方式来解决部署中的基础设施问具体,是提升部署效率的重要手段。