利用 SonarScanner 静态扫描 Rainbond 上的 Maven 项目
对代码进行静态扫描是一种非常常见的代码质量保证手段,这种扫描不仅仅可以检查到代码中的缺陷,应用各种业界最佳实践,也可以检查出安全方面的漏洞,给予项目代码全方位的提升。在各种代码扫描方案之中,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 环境,该环境需要连接公网,为使用开源应用商店做准备。
搭建 SonarQube
除了 Rainbond 云原生应用管理平台,还需要准备代码仓库和 SonarQube 服务。前者我们选择使用 Gitlab ,而 SonarQube 服务则可以直接基于开源应用商店安装。目前开源应用商店提供了 8.9.9 (lts)版本的 SonarQube ,供用户一键安装。
用户只需要在 Rainbond 的应用市场界面选择开源应用商店,搜索 sonarqube
即可找到对应的安装入口:
点击安装,选择好安装位置,即可将 SonarQube 服务以及 Postgresql 数据库一键安装到指定的位置。
访问 SonarQube 的对外服务端口,即可进入它的登录页面 ,默认的用户名和密码为: admin / admin
。
如果用户还没有自己的代码仓库,也可以遵循相似的流程,基于开源应用商店安装 Gitlab。
生成 AuthenticationToken
在 SonarQube 中,每个用户都可以生成 AuthenticationToken
来作为通信令牌,SonarScanner 就是通过这个令牌和 SonarQube 服务通信,验证自己的身份。
在这里,我们为 Administrator
用户生成专门用于扫描 Java Maven 项目的 AuthenticationToken
。
以 admin 用户登录后,在 我的账户 页面切换到 安全 选项卡,即可生成 Token。
复制记录下创建出来的 AuthenticationToken
,它只会出现一次!