SonarQube 静态扫描
对代码进行静态扫描是一种非常常见的代码质量保证手段,这种扫描不仅仅可以检查到代码中的缺陷,应用各种业界最佳实践,也可以检查出安全方面的漏洞,给予项目代码全方位的提升。在各种代码扫描方案之中,SonarQube 最为人熟知,应用最为广泛。各种持续集成方案都有自己的方式融入 SonarQube 进行代码的静态扫描工作。
今天介绍一种基于 SonarScanner 在 Rainbond 源码构建过程中,对 Java Maven 项目进行静态扫描的方法。
SonarScanner For Maven 简介
使用 SonarScanner for Maven 对 Maven 项目进行代码静态扫描,是 SonarQube 官方推荐的默认扫描器。只需要在 mvn 命令中加入指定的参数,就可以集成该扫描器,并在构建的过程中分析代码漏洞。
示例命令:
mvn clean verify sonar:sonar -Dsonar.login=myAuthenticationToken
在实际执行过程中, myAuthenticationToken
会被替代成为 SonarQube 中,某个实际用户自己生成的令牌。
融入持续集成链条
了解 SonarScanner for Maven 的工作方式之后,我们就可以尝试将代码扫描这个过程,融入到 Rainbond 的自动化持续集成链条之中。我们希望最终达成的效果,是在代码提交后自动触发项目的构建,在构建过程中进行代码的扫描分析,并生成相应的报告。
整个流程可以概括为如下几个阶段:
- 开发人员向代码仓库提交代码,触发整个持续集成链条。
- 代码仓库利用 Webhook 调用 Rainbond 的 Openapi 接口,触发对应的服务组件构建自身。
- Rainbond 自动构建对应服务组件的同时,触发 SonarScanner 扫描工作,并将扫描结果发送给 SonarQube 服务。
- SonarQube 服务分析扫描结果,生成代码检测报告。
- 开发人员读取代码检测报告,获悉改进点。
- 开发人员根据报告完善代码,并再次提交,回到步骤1,形成持续集成的闭环。
接下来,将会从实际操作的角度出发,基于 Rainbond 一点点实现上述持续集成链条。
前提条件
本文中介绍的包括了代码扫描的持续集成链条,都是基于 Rainbond 云原生管理平台实现的。所以需要用户自行准备可用的 Rainbond 环境,该环境需要连接公网,为使用开源应用商店做准备。