自动化是软件开发改进的一个关键实践。DevOps(开发运营)是软件开发领域内的一种趋势。DevOps 的定义有很多种。不过,“自动化” 很可能是该定义的一部分。虽然软件开发被自动化,但人的行为对该流程也是有所贡献的。不同团队成员编写的代码各不相同,风格也各异。有些开发人员会省略代码中的注释。Continuous Integration(CI,持续集成)、Continuous Delivery(CD,持续交付)、Continuous Testing(持续测试)都是与 DevOps 相关的词语。因为代码得到了系统的分析,所以可以减少多种编码错误风险。这方面的两个最佳实践分别是静态代码检查,以及通过应用程序安全测试来测试代码的漏洞。
本文将介绍如何在持续交付流程中部署一个静态代码检查流程。IBM SmartCloud Continuous Delivery 被用作检查状态源代码的一个示例。不过,本文中所使用的方法也可用于多种流程,比如来自 IBM 的持续集成(如 IBM® Rational Build Forge®)或持续部署(uDeploy)解决方案。
IBM SmartCloud Continuous Delivery 解决方案和 SonarQube
IBM SmartCloud Continuous Delivery 包括 DevOps 的大部分关键实践,并提供了额外的功能,包括工作负载部署器组件,该组件定义了部署模式和对云系统(IBM® PureSystems、IBM® Workload Deployer、IBM SmartCloud® Provisioning 等)的自动部署。有关的更多信息请参阅在文章底部的参考资料部分。
SonarQube 是一个开源项目,用于源代码静态检查。它支持 20 种语言。报告是实时运行的。SonarQube 称此为 Continuous Inspection(持续检查)。
本文中所用术语的定义
因为没有 “持续<流程>” 的标准定义,需要先定义在本文中所使用的术语。
备注:本文中所使用的定义在各出版物中有所不同。
持续交付 (CD) 一个分阶段的自动化流程。它从软件构建开始,完成软件开发的以下这些阶段:打包、自动部署到测试系统、预生产质量保证系统,可能还包括部署到生产系统。自动化系统测试
往往是针对已部署的系统而运行的。 持续集成 (CI) 一个自动化的软件构建和测试过程,通常用于开发测试。持续集成是在每天的基础上(或在开发人员将
新的源代码带入源代码库时)执行的。这个过程与持续交付类似,惟一区别是其主要
重点是软件构建和单元/特性测试,而不是系统测试。
有些公司可能会每天运行持续交付。如果每天运行持续交付,那么持续集成将被包含在持续交付流程中。
交付管道包括下面列出的步骤,如图 1 所示。
构建 从存储库加载源代码。
然后,运行构建流程。 在这个步骤中,可以运行单元测试工具和代码覆盖工具。也可以运行代码分析。如果有错误,那么交付管道会停止运行。 发布 构建包被存储在库服务器中。库服务器还存储了相关的信息,比如构建的质量状态及所有关联的文档。 部署 应用程序被部署到物理和/或
虚拟主机。如果虚拟主机不可用,那么云接口将会提供虚拟机。 验证 自动测试:运行集成测试(功能测试)、性能测试和安全测试。 生产 如果您选择部署到生产环境中,那么构建被发送到生产系统,以获得利益相关者的反馈。在面向合规性的软件开发项目中,生产步骤可能不会发生。
备注:本文的重点是代码分析。文章的样例从构建步骤开始,并以验证步骤结束。
图 1. 典型的交付管道流程
解决方案架构
图 2 显示了解决方案架构。IBM SmartCloud Continuous Delivery 解决方案是解决方案架构的基础,如图 2 所示。
图 2. 基于 SmartCloud Continuous Delivery 的解决方案架构
在本例中,Ruby Make (Rake) 被用作交付管道的一个实现。可以根据工程师的需求或事件(如调度程序)来启用 Jazz Build Engine,它会运行交付管道。如果从客户端发出请求,则还会运行 Rake 实用程序。在本文中,是从 IBM® Rational Team Concert 客户端手动调用交付管道流程。
按照以下步骤,在解决方案架构上实现交付管道:
构建。构建步骤是在 Jazz Build Engine 组件上运行的。交付流程从 Rational Team Concert 中的存储库加载源代码。SonarQube 执行静态检查,并最终构建软件。在此阶段,静态检查的结果被存储在 SonarQube 服务器中。 发布。Jazz Build Engine 将构件和基础架构自动化代码发布到 Library Server。 部署。Jazz Build Engine 请求云主机提供测试所需的任何虚拟机。云主机指引虚拟机在
哪里加载构建构件及相关文件,比如设置代码(基础架构自动化代码)。然后,每个虚拟机从库服务器加载软件和基础架构自动化代码。配置它们自己是部署步骤的最后一部分。 测试。无论是否通过系统测试,Jazz Build Server 都对所提供的虚拟机运行系统测试。