软件开发

当前位置:首页 > 软件开发

《持续交付四 业务引领的DevOps 精要》第七章

第7章 部署流水线原则与工具设计

部署流水线(deployment pipeline)是持续交付1.0的核心模式。它是对软件交付过!程的一种可视化呈现方式,展现了从代码提交、构建、部署、测试到发布的整个过程,为团队提供状态可视化和即时反馈。部署流水线的设计受到软件架构、分支策略、团队结构以及产品形态的影响,因此每个产品的部署流水线均有所不同。

本章将重点介绍产品团队设计和使用部署流水线的基本原则,以及企业开发部署流水线平台工具链时,需要构建的平台能力要求,以及相关子系统的服务逻辑架构。让我们先从一个简单的部署流水线案例开始吧!

7.1简 单的部署流水线

我们以2008年商业套装软件产品Cruise为例,来解释持续交付部署流水线的概念。该产品思想最早来源于开源软件CruiseControl的企业版本。Cruise自2008年第一-个版本发 布以后,每3个月发布一个商业化版本,供全球企业用户试用和购买。截至2010年,代码行数约为50000行,自动化单元测试和集成测试用例约为2350个,端到端功能测试用例约为140个。后来更名为GoCD,井将社区版开源后,放到了GitHub网站上。以下均以“GoCD"之名进行描述。

7.1.1简 单的产品研发流程

GoCD系统是典型的服务器/代理(serverlagent) 架构,服务器和客户端各自可独立启动运行。服务器本身曾是一个典型的巨石应用,包含关系型数据库和Java应用服务器。用户可以通过浏览器访问其Web服务,同时它也提供REST风格的API接口,方便用户进行程序扩展,架构示意图如图7-1所示。

服务器和代理的代码(包括自动化测试代码)全部保存于同一个代码仓库,版本控制软件使用的是Mercural (与Git类似的分布式版本管理工具),团队成员均有权修改代码库中的任何代码。产品研发团队的总人数保持在12人左右。在产品版本交付期中,迭代周期为一周。!团队自身也使用该产品进行持续集成与持续交付实践。在每个迭代结束后,用最新版本替换团队自己正在使用的旧版本。每两个迭代将试用版本部署到公司内部的公用服务器上,供公司其他团队使用。若公司内部试用版本运行质量达标,一周后再将该版本交付给该产品的试用企业,进行外部企业用户早期体验,如图7-2所示。

《持续交付四 业务引领的DevOps 精要》第七章

由于团队使用测试驱动开发方法,因此开发人员编写所有的自动化单元测试用例与功能自动化测试用例,并负责维护它们。单元测试的行覆盖率在75%~80%波动。

7.1.2初始部署流水线

GoCD团队遵守持续集成六步提交法(参见第9章),任何人提交代码后,立即自动触发一次部署流水线实例化,该部署流水线如图7-3所示。

第一个阶段是“提交构建”,包括7个并行自动化任务,分别是编译打包、代码规范静态扫描和5个不同的自动化单元/集成测试用例集合,使用自动触发机制。产品的自动化集成测试也使用单元测试框架编写,并在提交构建阶段与单元测试-起执行。由于GoCD支持多种操作系统,因此在这一阶段会同时构建生成对应不同操作系统的软件包,如.deb文件、.exe文件、.zip文件等。这些安装文件生成以后,可供后续所有阶段使用。后续所有阶段不再重新编译打包。

第二个阶段是“次级构建”,包括两个并行自动化功能测试集任务,分别运行于两类环境,即Windows系统/IE浏览器和Linux系统/Firefox浏览器,并且两个环境中所用的测试

《持续交付四 业务引领的DevOps 精要》第七章

第三个阶段开始,每个阶段都只有一个任务。

第三个阶段是“UAT部署”,将软件包部署到手工UAT环境(用户验收环境,User Acceptance Environment)。

第四个阶段是“UAT结果", 测试人员手工验证完成后,将其标记为“验收通过”。

第五个阶段是“性能测试” ,就是做自动化性能测试。

第六个阶段是“内部体验”,就是将Alpha版本部署到企业内部服务器,给内部其他团队试用。

第七个阶段是“外部体验” ,就是将Beta版本发给外部的企业用户体验。

第八个阶段是“上传发布",就是上传版本。将确定的商业发布版本上传到指定服务器,供用户登录产品网站自行下载。

每次提交代码后,部署流水线的提交构建都会被自动触发。提交构建成功后会自动触发次级构建。提交构建阶段的7个任务中,执行时间最长的是单元测试,其中JavaScript和Java单元测试用例与集成测试用例共有2350多个,被分成5个测试集,最长的一-个测试集持续时间约为15分钟。次级构建的两个并行任务,端到端功能验收测试140多个,执行时间最长需要约30分钟。

第三个阶段(UAT部署)由测试工程师手工触发。测试工程师根据具体需求完成情况,在已经通过次级构建阶段的那些构建中,选择-一个被测版本,向UAT环境部署软件包,用于手工验收测试。如果该版本通过了手工验收测试,则测试人员会手工触发第四个阶段,系统自动标记该版本为已测试通过版本。

第五个阶段的性能测试也是手工触发。


相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~