在持续交付过程中,每次交付都不可避免地要花费大量时间精力用于环境配置、build、回归(Regression)测试、结果管理、问题跟踪、质量分析、总结,一个可以自动化完成所有功能的智能系统将大大提高开发、测试和管理效率。
本文基于开源工具或技术搭建一键式持续交付管理系统,对于任何代码的更新或修改,只需要发起一个 build 请求,剩下的所有流程将自动完成,用户只需要关注是否有分配给他的 issue 即可,并且本系统将所有 build、测试信息纳入统一管理存储到数据库,方便随时查阅。通过该系统提供的查询网站,用户可以随时查看 bug、build、regression 的趋势,以及对一段时间内或某个 release 的情形进行分析总结。
本章主要介绍一键式持续交付信息管理系统的整体框架和流程,如图 1 所示。从大的功能点上划分,该系统主要包括:Jenkins 控制模块、Build 阶段、部署阶段、测试阶段、邮件通知模块、数据库、查询网站,每部分的具体功能将在下一章介绍。
该系统比较典型的一个工作流程如下:
本章将对上一章节所述架构中的各个部分进行具体介绍,重点介绍各部分的功能及输出。
Build 阶段主要进行代码的编译、build 输出、BVT。对外交付的实际版本由此部分产生,并且对代码进行了简单的测试。
功能:
输出:
Build 阶段输出的邮件如图 2 所示,该邮件为 Build 成功的邮件,失败的邮件类似,标题中会包含明确的版本号和成功失败标志。
邮件内容中有具体的 Jenkins 链接以便于查阅本次 build 的 Jenkins Job 情况,还有对应的 BVT 报告以便查阅各个模块以及所有 BVT 测试用例的详细情况,如图 3 所示。
Deploy 阶段主要进行 Spark Cluster、Client 端环境的部署和配置,为了环境的易用性本系统采用了 Docker。Spark Cluster 和 Client 的部署均通过 Dockerfile 脚本实现,支持部署各种组合参数需要的环境,如不同的 Spark 版本、Java 版本、Scala 版本。
功能:
输出:
Deploy 阶段输出的 Spark Cluster 环境部署成功的邮件如图 4 所示。
通过邮件中的链接可以访问该环境对应的 yarn 端口查看具体信息,如图 5 所示。
在机器上可以通过执行 docker ps 命令查询所启动的 Docker container 情况,此处启动了 namenode 和 client1 两个 container,如图 6 所示,其中 namenode 即为 Spark Cluster 的 namenode,当然也可以启动其他 datanode 节点,本系统为了简便没有启用。client1 为第一个客户端,当存在多个客户端并行测试时此处会启动多个 client。
Test 阶段主要进行 Regression 和代码覆盖率的实际测试。所有的 Regression 测试用例都是在这一阶段执行的,测试结果直接反应本轮 build 的质量,也是本轮交付的关键。
功能:
输出:
如果测试过程中存在失败用例,用户将会收到带有详细信息的测试邮件,如图 7 所示,邮件中给出了本轮测试的用例级详细测试报告、测试的输出文件位置、Github 上的 Wiki 报告。
用例级详细测试报告如图 8 所示,该报告是使用 Ant 工具 build 完成,然后放入 Apache Tomcat 中以方便用户访问。从中可以查看到所有模块、所有用例的具体情况(可以看到用例失败的具体原因)。
Wiki 测试报告如图 9 所示,该报告是对本轮测试的一个总结,报告中包括测试环境信息、issue 个数、代码覆盖率链接以及各模块情况。其中代码覆盖率报告如图 10 所示。
系统自动创建的 issue 如图 11 所示,issue 是通过 Github API 按模块自动创建,标题中包含模块名和其失败的用例个数,内容包含测试 build 号、详细测试报告、对应的 Assignees、Labels、Releases 等,当模块的负责人收到指定给他的 issue 时才需要进行后续分析,否则则认为其所负责的模块在本轮测试中没有问题。
数据库用来存储日常开发测试流程中的各种信息,主要包括 build 信息、测试信息、bug 信息,
分别存储在 buildinfo、 regressioninfo、 buginfo 表中。表中可以尽你所能多存储信息以便于后续查阅或网页展示。
build 信息是在 Build 阶段结束时插入的,测试信息实在测试阶段结束时插入的。需要注意的是 buginfo 表中除了存储每次测试阶段所创建的 issue 信息外,还是存储从 Github 上不断获取的外部或者个人创建的其他 bug 信息,这个举动是通过我们维护的一个进程实时获取的。
查询网站作为对数据库信息的展示和总结,是整个系统中对于用户来说最直观的一个部分。如图 12 所示,查询网站包含三个部分:Regression Analysis、Bug Analysis、Build Analysis,分别对应数据中的三张表。
对于每部分来说,页面最下方是数据库的直接展示(由于页面大小限制未在截图中显示)。
本文侧重于从架构和流程上介绍一键式持续交付信息管理系统,希望您能够从整体上对于系统有个完整的认识,通过了解系统各部分的功能和输出从而明白整个系统是如何运作的。而实际系统的搭建涉及大量技术细节,由于内容过于繁琐且文章篇幅有限在此不能一一介绍,如果您感兴趣可以在实际系统搭建过程中去体会,本文最后一个参考资源中也有部分介绍。本系统早已在实际工作中投入使用,并且经过不断的优化提升,目前运行流畅,极大的提升了开发、测试和交付效率。另外,通过把工作中的信息存储至数据库中从而纳入统一管理,极大的提高了工作质量和管理人员的统计和管理效率。