SonarQube(代码质量管理平台)(本地实例版)入门教程
寂风也过路
编辑于 2023年11月11日 07:34
收录于文集
共41篇

一、什么是SonarQube

SonarQube is a self-managed, automatic code review tool that systematically helps you deliver Clean Code. As a core element of our Sonar solution, SonarQube integrates into your existing workflow and detects issues in your code to help you perform continuous code inspections of your projects. The tool analyses 30+ different programming languages and integrates into your CI pipeline and DevOps platform to ensure that your code meets high-quality standards.                    ——官方文档介绍 UP的粗糙译文: SonarQube是一个自我管理的自动代码审查工具,可系统地帮助您交付 Clean Code。作为Sonar解决方案的核心元素,SonarQube 可集成到您现有的工作流程中并检测代码中的问题,以帮助您对项目执行持续性的代码检查。这个工具可以分析30+种不同的编程语言并集成到您的 CI 管道和 DevOps 平台中,以确保您的代码符合高质量标准。

拓展——Sonar的几个产品:

注:本文关注的是临时使用SonarQube,即官方所谓的“试用”,也是意味着使用本地示例,不在项目中直接引入Sonar,而是在外部执行命令进行代码的静态扫描。如果是正式大规模引入SonarQube,则使用方式不大一样。不是本文考虑范围。这是正式使用SonarQube的官方操作说明:https://docs.sonarsource.com/sonarqube/8.9/setup-and-upgrade/install-the-server/


二、下载

官方下载网页地址:https://www.sonarsource.com/products/sonarqube/downloads/

注意:虽然是国外的,但是不需要魔法,可以直接上去下载,速度不慢

注意:这里直接点击下载的话,是下载最新版本。如果你要下载旧版本的,请沿着本文继续阅读下去。

内容来自官网

定价:

内容来自官网

需要特别注意:SonarQube对运行环境是有一些要求的,具体可以看官网对各个版本的描述说明,地址:https://docs.sonarsource.com/sonarqube/latest/setup-and-upgrade/release-upgrade-notes/

举一些例子:

  • 有网友说6.6之后(不含6.6),就开始不支持Java8了,只是我没在官网里找到7.9之前的发布说明文档,无法证实这个说法。

  • SonarQube 7.9 不再支持 MySQL,要从 MySQL 迁移到受支持的数据库,请参阅免费的MySQL 迁移器工具:https://github.com/SonarSource/mysql-migrator。

  • SonarQube 7.9 服务器需要Java 11。如有必要,分析可以继续使用 Java 8。

  • SonarQube 9.9 服务器需要 Java 17。

除了上面提及的默认最新版本,通常情况下,还可以直接从官网下载到许多版本的SonarQube:

https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/

如果官方没有直接提供下载入口,就只能直接通过链接路径的方式来下载各个版本的SonarQube(你要下载哪个版本,就直接改后缀的版本号,例如现在这个是直接下载6.6版本):

https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.6.zip

注:实际上这些文件的下载来源就是官方,只是明面上没提供下载入口罢了。


三、启动

注:官网也有关于本地示例怎么执行,怎么操作的流程说明:https://docs.sonarsource.com/sonarqube/latest/try-out-sonarqube/

如果你不想去看官方文档,则可以继续看下去.....

按照上一步骤,不管你是以什么方式下载,得到的是应该是一个ZIP压缩包。

下载到的压缩包

此时,解压这个压缩包,得到这样一个文件夹。

注:不同版本的文件夹内容可能有所差异,实属正常,我们只要关心会用到的核心文件就好。

文件夹内容示例

点击进入bin目录

bin目录内容示例

选择自己的当前平台,进入相应的文件夹,例如我这里是Windows系统,则进入的是windows-x86-64文件夹(下面都是以在Windows平台上的操作为例)

文件夹内容示例

这里可以直接双击执行StartSonar.bat文件运行SonarQube,但是这里不太推荐,因为成功执行起来的话是会显示出命令行界面。但是如果执行失败的话,会直接闪退,导致看不到错误信息。

所以,这里展示的是在命令行窗口执行的示例:

先利用快捷键 Win+R 调出 Windows命令运行框

Windows命令运行框

输入cmd,点击确定或者按回车,打开控制台命令窗口

控制台命令窗口

StartSonar.bat直接拖动到控制台命令窗口中

直接点击回车开始执行。

如果执行成功,则会是这样(执行成功后,不要关闭控制台窗口):

SonarQube7.9,运行环境JDK11

注:在该窗口,按Ctrl+C并输入确认信息,则可以退出并关闭SonarQube。或者也可以暴力一点,直接关闭窗口。

注:如果关闭了窗口,则相当于关闭了SonarQube,无法再访问本地网页,此时只要再按照前面的做法,启动就行。

注:如果关闭SonarQube前执行过代码扫描,扫描的结果数据不会丢失。

如果Java的环境不对,会有类似的报错:

要求Java 17,但是运行环境只装了Java 11

要求Java 17,但是运行环境只装了Java 8

反正出错了的话首先第一步,就是先看电脑上的JDK版本,下载的SonarQube版本是不是支持。

如果是其他的报错,由于作者没遇到,所以无法提供解决示例,建议去官网查找解决方案。


四、扫描代码

在浏览器中输入地址:http://127.0.0.1:9000/

则会打开该页面

点击 Log in

跳转到登录页:

默认账号:admin

默认密码:admin

登录进去后:

点击这里:

输入数据Project KeyDisplay name(注意查看Snoar的输入值建议(就是那个问号图标里的说明)):

其实,只能说按建议写会比较规范,其实似乎并不会产生什么影响。

例如,这是我的Maven项目的填写:

填写完毕后,点击Set Up创建。

然后出现这个页面,输入Token名称

然后点击Generate,生成Token

点击Continue

选择好等下要被扫描的项目的编写语言,以及其他选项(本文以Java+Maven为例):

复制控制台命令,新建一个控制台命令窗口,进入到项目文件夹目录(如果是Maven项目,就是你可以在文件夹中看到pom.xml文件的位置)

项目文件夹举例

执行对应的命令

注:如果担心泄密,则可以先将涉密的内容去除后,再来扫描

注:SonarQube的扫描,是静态文件扫描,不需要运行被扫描的项目

注:很奇怪,除了这个页面,后面进入管理页面后,就找不到这个命令的获取位置了。所以建议先将其复制保存一下,避免等下要用却找不到。

注:建议先用文本编辑器将命令改成一行,然后再拿去执行

注:不同版本的SonarQube对Maven的版本要求不同,例如8.9要求最低是3.x

执行结果(执行需要消耗一会儿时间):

执行命令时,可能会因为Java版本对不上而报错。

报错示例地址:https://community.sonarsource.com/t/java-versions-in-sonarqube/67551

解决时增加的参数示例:

-Dsonar.java.jdkHome=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home

图源自官方论坛

扫描JAVA代码时的其他各种报错的官方解答:https://docs.sonarsource.com/sonarqube/8.9/analyzing-source-code/languages/java/


五、扫描结果

此时,返回到先前通过 http://127.0.0.1:9000/ 地址打开的网页,刚刚扫描的结果就展现了出来。(没有显示就刷新一下页面)

注:这些数字都是可以点击进去查看详情的,会标注说是哪里不行,为啥不行。

此时,你就可以依据报告提供的这些信息,对项目代码进行优化迭代。(其实还可以对问题进行管理,包括分配给谁、设置等级、标注问题等操作)

若优化完毕,则可以重复执行上面的扫描项目命令,此时SonarQube将再次扫描你的项目,给出新的扫描结果。

关于单元测试覆盖率:

官方描述地址:https://docs.sonarsource.com/sonarqube/8.9/analyzing-source-code/test-coverage-and-execution/

SonarQube doesn't run your tests or generate reports. It only imports pre-generated reports.  —— 官方描述 粗糙的译文:SonarQube 不会运行您的测试或生成报告。它仅导入预先生成的报告。

如果是JAVA,要使用JaCoCo作为生成代码测试覆盖率的工具。

怎么使用JaCoCo不在本文讨论范围之内,请另行阅读我的另一篇文章:JaCoCo的Maven应用入门使用教程​

如果JaCoCo已经执行并生成覆盖率文件(jacoco.exec),那么可以往下继续了。

在sonar的Administration页面这里,可以看到默认配置的JaCoCo的覆盖率文件路径(这里的路径是基于项目路径),如果有需要,可以手动调整该路径。

JaCoCo的加载配置

原先扫描的时候如果没有配置JaCoCo,则现在可以再执行一遍扫描命令。

然后就能看到覆盖率的信息:


六、删除项目(有需要的话)

删除项目

注意:删除有二次确认,如果真的删除了,那就对应项目的全部记录都没了,相当于从头开始。


七、新增项目(有需要的话)

新增项目

注意:怎么输入信息,前文已有提及,这里不再重复。


八、报告导出(有需要的话)

前往下载插件包:https://gitee.com/zzulj/sonar-pdf-plugin/releases

注意版本支持信息:

一定要选择支持的SonarQube版本去下载插件。

例如这里点入的是:

点击下载sonar-pdfreport-plugin-3.0.3.jar

将下载好的jar包放入到SonarQube的对应目录底下:

(\sonarqube-7.9.6\extensions\plugins)

打开本地管理页面(http://127.0.0.1:9000/),按照下图中所标记的菜单项,进入到对应管理页面。

点击 Restart Server 按钮重启服务

点击 Restart

点击后,等待服务重启完成。

重启完成后,页面会跳到登录页,此时重新登录即可。

此时,可以在项目的扫描结果页面的More菜单项里看到这个功能:

点击Download Pdf Report,页面跳转到这里

点击下download

可能会出现这个报错:

原因和解决方案:安装插件之前扫描的结果不能直接进行pdf的导出,需要再扫描一下,然后就行了。

如果你找不到之前的命令的话,可以参考我的这个命令格式示例:

mvn sonar:sonar -Dsonar.projectKey=ProjectKey -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=Token

其中,ProjectKey的值可以在这里获取:

Token的值可以在这里获取:

点击My Account

选择Security

输入Token名,生成新的Token进行使用(和原来的不一样没关系)

重新执行的话,刷新一下项目结果页面,可以看到多出一列,显示新的代码的检测信息

(这里因为没动过代码,所以都是0)

执行扫描命令时可能会报错:

 Can't get Compute Engine task status.Retry.........

org.sonarqube.ws.connectors.ConnectionException: HTTP error: 401, msg: , query: org.apache.commons.httpclient.methods.GetMethod@3ae0e1e7

[ERROR] Problem generating PDF file.

org.sonar.report.pdf.entity.exception.ReportException: Can't get Compute Engine task status.

原因:缺少配置

解决:配置账号密码(登录管理页面的账号密码),然后重新执行扫描项目的命令。

扫描过程中成功的日志

此时可以导出PDF报告文件,进行前面介绍的方式进行导出,成功的话,可以获得一个PDF文件。文件内容基本涵盖了网页上可以看到的各个信息。具体自行生成后阅读吧。

PDF文件内容示例


N、其他

  • 官方地址:https://www.sonarsource.com/

  • 官方的Sonar的产品介绍页:https://www.sonarsource.com/products/sonarqube/

  • 官网文档地址:https://docs.sonarsource.com/sonarqube/latest/