共计 3715 个字符,预计需要花费 10 分钟才能阅读完成。
对代码进行动态扫描是一种十分常见的代码质量保证伎俩,这种扫描不仅仅能够查看到代码中的缺点,利用各种业界最佳实际,也能够查看出平安方面的破绽,给予我的项目代码全方位的晋升。在各种代码扫描计划之中,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
,它只会呈现一次!
从 Gitlab 构建 Maven 我的项目
Rainbond 能够基于 Oauth2.0 与 Gitlab 代码仓库对接,能够十分不便的抉择构建 Gitlab 中的我的项目,并主动配置代码主动构建。
参阅文档:Rainbond 与 Gitlab 的对接
我所应用的 Gitlab 中曾经存在一份规范的 Java Maven 我的项目代码。点击基于源码构建组件,抉择对接好的 Gitlab,就能够搜寻想要部署的我的项目了。
创立组件的过程中,能够开启主动构建的开关,相当于配置好了代码推送触发主动构建的开关。
点击确认创立之后,会实现代码语言的检测,此时进入高级设置,点击左侧的部署属性,咱们须要做些高级设置来适配 SonarScanner。
须要进行的设定包含:申明 SonarQube 服务的地址,对应账户的 AuthenticationToken
,以及增加了代码扫描步骤的构建命令。
配置 Settings.xml
SonarScanner 的一般性配置,包含 SonarQube 服务地址,以及 AuthenticationToken
都能够配置进 Settings.xml 全局配置,供 Java Maven 我的项目构建时应用。
Rainbond 在针对 Java Maven 类型的我的项目进行构建时,提供入口配置全局失效的 Settings.xml。在高级设置——部署属性中,能够点击 治理 Maven 配置 来编辑默认的 Settings.xml。此处咱们曾经提供了一份默认的配置,咱们须要在 xml 格局下增加以下配置来定义 SonarQube 服务地址,以及 AuthenticationToken
。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>
http://9000.grba63fe.duaqtz0k.17f4cc.grapps.cn
</sonar.host.url>
<sonar.login>
c1041c2b4ac2e89d1fe3f5fa5bb5971bc8dc85b7
</sonar.login>
</properties>
</profile>
</profiles>
</settings>
当然,用户也能够新建一份专用的 Settings.xml 配置,在我的环境中,我将这份配置命名为 sonar-scanner
。全局配置只须要定义一次就能够了。
批改构建命令
SonarScanner For Maven 通过在 mvn 命令中退出特定的参数来进行代码扫描。
在 Maven 构建命令 输入框中,批改命令如下:
clean verify sonar:sonar -Dsonar.projectName=Maven-demo -Dsonar.projectKey=Maven-demo install
对于每一个不同的我的项目,须要自定义 -Dsonar.projectName
-Dsonar.projectKey
的值。前者定义了在 SonarQube 服务中,这个我的项目的名字,后者则定义了我的项目的惟一 ID。
开始首次构建
以后应用的 SonarScanner 要求 JDK 版本高于 1.8。这里咱们抉择 OpenJDK 11,因为这个版本是 1.8 之后的另一个长期反对版本。
到当初,部署属性中,构建源信息页面应该体现如下:
点击确认创立,即可跳转页面,进入第一次构建流程之中。稍等一会,首次构建就会实现,代码会主动被打包并上线,查看构建日志,能够理解构建过程中的剖析步骤:
拜访日志中提及的地址,能够在 SonarQube 服务中查看新增的报告。
代码剖析报告
开发人员参考 SonarQube 服务提供的报告,能够理解目前代码的问题。SonarQube 报告中会给出业界最佳实际来修复破绽。以我应用的我的项目为例,扫描到了 2 个 Bug,和 4 个平安问题。以其中一个 Bug 为例,SonarQube 给出了很详尽的提醒,包含正当的代码提醒。
更新迭代代码
开发人员依据剖析报告,修复代码后,再次提交代码,在代码提交信息中蕴含关键字,即可主动触发我的项目的构建以及新一轮的代码扫描。
Commit Message 中蕴含的 @deploy
是触发主动构建的关键字。无关 Rainbond 主动构建的详细信息,请参考文档 Rainbond 主动构建
期待我的项目主动构建实现,再次审查剖析报告,来确定 Bug 是否失去了解决。
回顾 Rainbond 中组件的操作记录,会发现手动构建与主动构建之间的区别。