SonarQube(代码质量管理平台)(mac本地实例版)入门教程

422 阅读8分钟

以下文章借鉴来源:www.bilibili.com/opus/862396…

一、什么是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的官方操作说明:docs.sonarsource.com/sonarqube/8…

cut-off

二、下载

官方下载网页地址: www.sonarsource.com/products/so…

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

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

内容来自官网

定价:

内容来自官网

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

举一些例子:

  • 有网友说6.6之后(不含6.6) ,就开始不支持Java8了,只是我没在官网里找到7.9之前的发布说明文档,无法证实这个说法。
  • SonarQube 7.9 不再支持 MySQL,要从 MySQL 迁移到受支持的数据库,请参阅免费的MySQL 迁移器工具:github.com/SonarSource…
  • SonarQube 7.9 服务器需要Java 11。如有必要,分析可以继续使用 Java 8。
  • SonarQube 9.9 服务器需要 Java 17。
  • jdk1.8建议直接使用SonarQube6.6版本!!!!!本文就是这个版本!

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

www.sonarsource.com/products/so…

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

binaries.sonarsource.com/Distributio…

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

cut-off

三、启动

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

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

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

image.png

下载到的压缩包

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

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

image.png

其中pdf-files文件夹是笔者再后续解决问题是新建的,建议可以直接在解压完之后就新建;

点击进入bin目录

image.png

选择macosx-universal-64wen件夹进入 image.png

这里打开电脑终端执行sh sonar.sh start运行SonarQube; stop停止、restart重启都是支持的;

image.png

SonarQube6.6,运行环境JDK1.8(默认你是装了java环境的-要是没有可以自行百度);

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

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

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

如果Java的环境不对,会有类似的报错:(以下报错信息是借鉴的原文)

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

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

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

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

cut-off

四、扫描代码

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

则会打开该页面

点击 Log in

跳转到登录页:

默认账号:admin

默认密码:admin

登录进去后:

扫描结果****

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

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

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

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

关于单元测试覆盖率:

官方描述地址: docs.sonarsource.com/sonarqube/8…

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

删除项目(有需要的话)

删除项目

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

cut-off

首次会有引导生成Token--tiao过的可以在这里找到点击TOkens下面的菜单; image.png

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

然后点击Generate,生成Token

点击Continue

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

复制控制台命令,进入到你准备扫描的本地java+Maven项目里,笔者用的是ideal;如下图:

image.png 在执行mven之前得在项目的pom文件里配置一下sonar-maven-plugin插件;应每个人的项目插件的配置方式差异,笔者给出SonarQube6.6用的插件详细信息:

image.png 在执行mvn命令之前还得做两个很重要的事;第一个:修改SonarQube的数据库为你的mysql,m默认事H2内存数据库;第二个:如果你需要导出pdf报告,就需要再配置一下pdf下载相关的操作; 配置数据源 进入到之前解压的snoarQube6.6文件夹,进入到conf目录下:

image.png 打开sonar.properties文件

image.png 修改mysql的连接信息;最好是用root权限的用户,笔者用非root的用户启动sonarQube失败了; 启动失败可以在 logs问件夹下查看对应的报错信息;

image.png

报告导出(有需要的话)

前往下载插件包gitee.com/zzulj/sonar…

注意版本支持信息:

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

例如这里点入的是:

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

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

(sonarqube-6.6\extensions\plugins)

image.png

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

点击 Restart Server 按钮重启服务

点击 Restart

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

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

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

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

image.png

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

点击下download

可能会出现这个报错:

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

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

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

扫描过程中成功的日志

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

PDF文件内容示例

cut-off

遗憾的是生成的pdf文件里没有页面展示的是否通过

image.png 因笔者的jdk是1.8支持的snoarQube版本比较老不知道新的版本中是不是导出的pdf是否已经包含了这个总览信息;有知道的读者也可以给笔者留言,共同学习;

N、其他