一 什么是部署流水线
部署流水线是指软件从版本控制库到用户手中这一过程的自动化表现形式。我们知道软件的每一次变更都会经历一个复杂的流程才能发布,这一流程包括软件的构建以及后续的一系列的测试和部署,而部署流水线相当于是在给这一过程进行建模。
书中说到创建一个新产品的抽象价值流程应该是:
- 产品的可行性评估
- 产品探索
- 产品计划与评估
- 开发
- 最后的测试与审核
- 发布
对于构建一个部署流水线来说,部署流水线只关注从开发到发布的价值流,这一流程的序列图如下:
二 部署流水线的相关实践
1、只生成以此二进制包
- 二进制包应该只在构建流水线的提交阶段生成一次
- 避免将二进制包提交到版本库中
2、对不同环境采用同一部署方式
- 将会变动和不会变动的东西分离
3、对部署进行冒烟测试
4、向生产环境的副本中部署
- 尽量保持开发环境或测试环境和生产环境相同。
5、每次变更都要立即在流水线上传递
6、只要有环节失败,就停止整个流水线
三 提交阶段
每次的提交的测试通过了, 那么当前这个版本就被视为一个候选发布版本。一般来说,提交阶段分为以下几个步骤:
- 编译代码
如果代码编译失败,那么就不需要在进行下面的步骤了。 - 运行一套提交测试
提交测试包含大部分的单元测试和一些其它类型的错误(平时做测试时容易失败的相关测试) - 为后续阶段创建二进制包
- 执行代码分析来检查代码的健康状况
- 为后续阶段做准备
做了上述的几个步骤后,我们还需要关注一些非功能性的一些特性:
- 测试的覆盖率
- 重复代码的数量
- 圈复杂度
- 输入耦合度和输出耦合度
- 编译警告的数量
- 代码风格
四 实现一个部署流水线
1、对价值流进行建模并创建简单的可工作框架
2、构建和部署过程的自动化
3、自动化单元测试和代码分析
单元测试的运行可以得到一些代码的分析数据,比如:代码覆盖率、圈复杂度、耦合度等。
4、自动化验收测试
功能测试和非功能测试,对于非功能测试应该在项目初期就开始,这样我们就可以很好的去分析当前的应用程序是否满足这些非功能的需求。
5、部署流水线的演进