# 代码质量检测

# 概述

  • SonarQube 是一款自动代码审查工具,可以检测代码中的bug、漏洞、低质量代码、容易引发错误的代码。支持多种开发语言, 如Java、go、C#、CSS、HTML、JSP等等。
  • SonarQube 通过插件机制可以集成不同的测试工具,代码分析工具,以及持续集成工具。
  • SonarQube 提供直观方便的web操作界面,支持任务的指派和跟踪,提供多维度的各种统计和分析,包括像代码注释占比、重复代码分析。
  • 官网地址:https://www.sonarqube.org/ (opens new window)

# 使用步骤

使用SonarQube执行项目代码审查时,需要先进行项目创建,在项目内执行代码审查,生成代码分析结果。

注意事项

使用SonarQube执行项目代码审查时,可以使用账号、密码。如果想强化安全,不想在执行代码扫描时使用真实SonarQube用户的密码, 可以使用用户令牌来代替用户登录。这样可以通过避免把分析用户的密码在网络传输,从而提升安全性。

sonar-security.png

# 新建项目

SonarQube控制台新建项目,有手工创建、配置创建两种方式。

# 手工创建

  • 手工创建:在 项目 界面,执行 新增项目 ---> 手工。

sonar-create-project-shougong.png

sonar-create-project-name.png

# 配置创建

  • 配置创建:在 配置 界面,选择左侧 项目---> 管理 标签,执行右侧 创建项目。

sonar-create-project-peizhi.png

sonar-create-project-peizhi-name.png

# 项目令牌设置

项目创建完成后,选择需要执行代码审查分析的项目,设置令牌信息

sonar-create-project-lingpai.png

# 服务器审查代码

  • SonarQube上项目创建完成、业务应用程序项目创建完成,即可对业务应用程序执行代码审查分析,审查分析结果会在SonarQube项目上体现。
  • 代码审查分析可以使用maven命令、maven插件两种形式,分析结果会上传到SonarQube服务器上。

# maven命令

在应用程序maven项目根目录中执行如下命令:

sonar-create-project-maven.png

mvn sonar:sonar -Dsonar.projectKey=hos-sonar-project -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=dcc44f4ec86b8f11a61e4d2ea340aab3a10011e4

执行过程中,如果提示 Not authorized. Please check the properties sonar.login and sonar.password 错误,则使用用户名、密码,命令如下:

mvn sonar:sonar -Dsonar.projectKey=hos-sonar-project -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=admin -Dsonar.pasword=admin 

  • sonar.projectKey:SonarQube上的项目标识
  • sonar.host.url:sonarqube服务器地址
  • sonar.login:用户名
  • sonar.password:用户密码

# maven插件(推荐)

  • 在maven的setting.xml 文件里加上
<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
				<sonar.login>admin</sonar.login>
				<sonar.password>admin</sonar.password>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://127.0.0.1:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

  • sonar.host.url:SonarQube服务器地址
  • sonar.login:用户名
  • sonar.password:用户密码

  • 在应用程序项目的pom.xml 文件里加上
<build>
	<plugins>
		<plugin>
			<groupId>org.sonarsource.scanner.maven</groupId>
			<artifactId>sonar-maven-plugin</artifactId>
			<version>3.7.0.1746</version>
		</plugin>
	</plugins>
</build>

这里以IDEA开发工具为例,在应用程序maven插件里,选择sonar,双击执行,即执行此应用程序的代码审查分析。

sonar-project-maven.png

使用maven命令maven插件 执行代码审查分析,会将结果上传到SonarQube服务器上。 在SonarQube上会展示对应项目的分析结果,选择项目可以看到项目的具体分析结果。

sonar-project-fenxi.png

sonar-project-wenti.png

# 本地代码审查

以开发工具IDEA为例,安装SonarLint插件,在本地执行项目代码的审查,此分析结果不会上传到SonarQube服务器。

# SonarLint插件安装

打开IDEA设置,定位到Plugins,搜索sonarlint,并安装。

sonar-lint.png

# SonarLint插件使用

  • 打开IDEA的设置,添加安装的SonarQube控制
  • 勾选Automatically trigger analysis,会对当前文件自动自行代码审查

sonar-lint-connect.png

sonar-lint-connect-url.png

  • SonarQube服务器链接可以使用用户密码,或者用户令牌

sonar-lint-connect-password.png

sonar-lint-connect-token.png

  • 应用程序项目与SonarQube服务器上项目关联绑定

sonar-lint-connect-project.png

# 代码审查

插件安装完成后,即可执行代码审查。

  • 自动代码审查,在IDEA设置里 ---> Tools ---> SonarQube 勾选Automatically trigger analysis
  • 在java类上,鼠标放在对应需要检查的代码处,会自动显示SonarLint的规则

sonar-lint-code-analyze-auto.png sonar-lint-code-analyze-auto-rule.png

  • 手动执行:选择需要执行分析的代码文件,右键 ---> SonarLint ---> Analyze with SonarLint

sonar-lint-code-analyze.png

sonar-lint-code-analyze-current.png

  • 对整个项目执行审查,选择需要执行分析的项目,右键 ---> SonarLint ---> Analyze with SonarLint

sonar-lint-code-analyze-project.png

  • 代码审查分析完成后,在SonarLint视图窗口里的Report标签里,查看分析结果

sonar-lint-code-report.png sonar-lint-code-report-rule.png

# 规则配置

  • SonarQube 项目默认使用内置的 ‘Sonar way’ 规则进行代码分析审查。

sonar-rule-default.png

  • 如果需要可以创建自己的规则,并对规则进行激活。

sonar-rule-create.png

  • SonarQube 在 质量配置 界面,选择自定义的规则,进入规则配置界面。

sonar-rule-set.png

  • 执行“更多激活规则”,进行规则的激活、挂起,可以批量执行。

sonar-rule-set-active.png

  • 执行“修改项目”,进行规则关联项目

sonar-rule-set-project.png

sonar-rule-set-project-display.png

# 本地更新规则配置

  • 业务应用程序关联的SonarQube上的项目,代码分析规则修改后,本地业务应用程序需要更新规则

sonar-lint-binding.png