likes
comments
collection
share

记一次sonaQuber本地搭建体验过程

作者站长头像
站长
· 阅读数 10

系统

基于win10系统的搭建

版本要求

jdk-21_windows-x64_bin
sonarqube-10.2.1.78527
sonar-l10n-zh-plugin-10.2
// 版本必须匹配

1. 安装 JDK

官方下载:www.oracle.com/java/techno…

记一次sonaQuber本地搭建体验过程

附件下载:📎jdk17.zip

2. 安装 SonarQube

官方下载:www.sonarsource.com/products/so…

记一次sonaQuber本地搭建体验过程

附件下载:📎sonarqube-10.2.1.78527.zip

SonarQube 10.2.1.78527 对 JDK 的版本有一定的要求:

  1. 最低要求 JDK 8 SonarQube 10.2.1 的发布说明中写明需要 JDK 8 或更高版本。所以 JDK 8 是这个版本 SonarQube 的最低 JDK 要求。
  2. 建议使用 JDK 11 虽然最低要求是JDK 8,但SonarQube的官方文档中推荐使用JDK 11来运行SonarQube 10.2.1。 主要原因是JDK 11能提供更好的性能和稳定性。SonarQube 通过面向JDK 11来优化代码,可以减少可能的兼容问题。
  3. 可能存在的问题 使用JDK 17可能会遇到一些兼容性问题,不太推荐。 使用JDK 8的用户也可能遇到已知的一些问题,比如与Java security manager的兼容问题。
  4. 推荐升级 虽然SonarQube 10.2.1可以运行在JDK 8上,但建议用户尽可能升级到JDK 11,以获得更好的兼容性和性能。 未来SonarQube也会逐步增加对JDK 11特性的使用,完全面向JDK 11。 所以综合来说,对于SonarQube 10.2.1版本,推荐的JDK版本是11,其他版本可能存在一定的已知问题或兼容性风险。
  5. 本文使用jdk17版本

3. 启动 SonarQube 服务

记一次sonaQuber本地搭建体验过程

如上图我的安装目录,打开cmd, 执行 StartSonar.bat start

记一次sonaQuber本地搭建体验过程

4. 访问 web 界面

浏览器输入 http://localhost:9000/ ,打开 web 界面。初始帐号密码为 admin:admin

登陆后立马弹窗修改密码。

5. 安装中文插件

记一次sonaQuber本地搭建体验过程

在 WEB 节目,点击 Administration -> Marketplace,进入插件市场,搜索 chinese ,可以安装中文插件。由下面介绍手动安装插件的方法:

  1. 下载插件

github 中文插件下载

附件下载:📎sonar-l10n-zh-plugin-10.2.jar

  1. 下载后将 jar 包文件放到 sonarqube 安装目录 /extensions/plugins 路径下
  2. 重启 sonarqube 服务。StartSonar.bat restart

注: 我本地汉化语言包没生效,不知是不是版本兼容问题!!!

sonarqube官方插件下载地址

6. 开启强制登录

记一次sonaQuber本地搭建体验过程

7. 创建项目

首先登录平台,然后点击该按钮添加项目

记一次sonaQuber本地搭建体验过程

取一个项目名字 如:test_01

记一次sonaQuber本地搭建体验过程

然后创建一个令牌(可以随意输入一个名字,或与项目同名)

记一次sonaQuber本地搭建体验过程

随后点击创建,选择other(其中包含了js,ts),并选择你的电脑的系统,本文选择windows系统,

step1: 先下载扫描器工具

记一次sonaQuber本地搭建体验过程

注:这里注意配置环境变量后可全局使用

跳转下载链接后,点击window64进行下载并解压(其它系统根据自身情况选择)

记一次sonaQuber本地搭建体验过程

官方地址:docs.sonarsource.com/sonarqube/1…

附件地址:📎sonar-scanner-cli-5.0.1.3006-windows.zip

7.1 SonarScanner 使用说明

SonarScanner 的使用方式有两种,默认 SonarScanner 会在当前目录下寻找名为sonar-project.properties 的文件,并依据此文件中定义的选项来扫描分析代码,而另一种使用方式是直接在命令行中使用 -D 参数指定扫描选项。

常用的选项参数:

sonar.host.url							# sonarqube服务器地址
sonar.projectKey						# 项目的唯一关键字,不能与其他项目重复
sonar.projectName						# sonarqube中显示的项目名称
sonar.projectVersion		    # 项目版本
sonar.login									# 用户名
sonar.password							# 用户密码
sonar.ws.timeout						# 超时时间
sonar.language							# 语言
sonar.projectDescription	  # 项目描述信息
sonar.links.homepage		    # 项目的主页(超链接)
sonar.sources								# 扫描项目的目录位置
sonar.sourceEncoding		    # 编码
sonar.java.binaries					# 编译后的类文件目录
sonar.java.test.binaries	  # 编译后的测试类目录
sonar.java.surefire.report	# 测试报告目录


@REM sonar.projectKey=project 项目标识
@REM sonar.projectName=项目名 # 中文的字段需要用Unicode转码,展示到sonarqube的web中才不会乱码
@REM sonar.sources=./ 扫描的文件
@REM sonar.sourceEncoding=UTF-8
@REM sonar.host.url=
@REM sonar.login=f2565bbd4230e847873b6035e4bddf6e71975734
@REM # 公共可用的配置项
@REM sonar.projectVersion=1.0
@REM sonar.sourceEncoding=UTF-8
@REM sonar.sources=./src
@REM sonar.exclusions=/node_modules/  排除不需要扫描的文件,要排除多个目录文件以逗号分隔
@REM sonar.tests=./src
@REM sonar.test.inclusions=**/*.spec.ts

7.2 扫描本地项目

7.2.1 扫描项目

  • 方式一:使用sonar-project.properties文件
[root@c7-02 data]# cd /data/simple-java-maven/
[root@c7-02 simple-java-maven]# vim sonar-project.properties
sonar.host.url=http://10.55.55.72:9000
sonar.projectKey=v1.2.3
sonar.projectName=java-demo
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=.
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
sonar.projectDescription="my first project!"

此方法java或结合devops使用,本文中使用方式二,配置较简单

  • 方式二:-D指定选项参数
sonar-scanner 
-Dsonar.host.url=http://127.0.0.1:9000 
-Dsonar.projectKey=v1.2.3 
-Dsonar.projectName=test-demo 
-Dsonar.projectVersion=1.0 
-Dsonar.sources=. 
-Dsonar.java.binaries=. 
-Dsonar.sourceEncoding=UTF-8 
-Dsonar.login=admin 
-Dsonar.password=admin 
-Dsonar.projectDescription="my  project!"

step2:复制代码

sonar-scanner.bat 
-D"sonar.projectKey=a_01" 
-D"sonar.sources=." 
-D"sonar.host.url=http://localhost:9000" 
-D"sonar.token=sqp_e7be45f6255fe48a34ce436a6560a8699af35c00"

step3:进入项目根目录,创建sonar.bat 文件,把step2代码复制并进行编辑

这里特别注意我扫描器的安装目录为

F:\soft\sonar-scanner-cli-5.0.1.3006-windows\sonar-scanner-5.0.1.3006-windows\bin

注意:sonat-sanner.bat要改为绝对路径,把反斜杠""换为顺斜杠“/”

F:/soft/sonar-scanner-cli-5.0.1.3006-windows/sonar-scanner-5.0.1.3006-windows/bin/sonar-scanner.bat 
-D"sonar.projectKey=test_01" 
-D"sonar.sources=." 
-D"sonar.host.url=" 
-D"sonar.login="

错误分析: 记一次sonaQuber本地搭建体验过程

记一次sonaQuber本地搭建体验过程

上面没有配置扫描器环境变量,直接指向安装目录,执行时报错

解决方案:

配置扫描器环境变量

记一次sonaQuber本地搭建体验过程

记一次sonaQuber本地搭建体验过程

修改sonar.bat 配置

sonar-scanner.bat 
-D"sonar.projectKey=test_front" 
-D"sonar.sources=./src" 
-D"sonar.host.url=http://localhost:9000" 
-D"sonar.token=sqp_48842fded9d9253072b5d6f7e9a071d79899892f"
-D"sonar.projectVersion=1.0"
-D"sonar.sourceEncoding=UTF-8"
-D"sonar.exclusions=./node_modules/,./src/yx-widght"  #排除不需要扫描的文件,要排除多个目录文件以逗号分隔

然后双击该文件即可启动扫描,这里建议cmd 中执行 sonar.bat 静待扫描结束。

记一次sonaQuber本地搭建体验过程

扫描结束后,就可以去到SonarQube后台看到扫描结果了,选择对应的项目并查看。

点击问题可以展开详情,查看具体是哪一句代码报错

记一次sonaQuber本地搭建体验过程

记一次sonaQuber本地搭建体验过程

8、自定义规则

sonarqube的七个维度检测代码质量:

复杂度分布:

代码复杂度过高将难以理解

重复代码:

程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

单元测试统计:

统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况

代码规则检查:

检查代码是否符合规 范

注释率:

若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读

潜在的 Bug :

检测潜在的 bug

结构与设计:

找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

大多数情况下都使用默认规则,扫描情况较复杂,在实际业务中可以自定义 比如有些情况下前端 使用双 !!来判断对象,此时代码扫描报错,诸如此类的情况还很多,

常见错误见:blog.51cto.com/u_14832233/…

目前云效针对Sonar静态扫描提供了一个可自定义规则的代码插件,融入代码工程之后,可以在本地运行,

相关源码:

📎sonar-yunxiao-java-plugin3.11.zip

9、结合其他工具的使用

jenkins 插件 首先需要在jenkins中安装SonarQube Scanner插件:

记一次sonaQuber本地搭建体验过程

然后去sonarqube服务端创建账户token:

记一次sonaQuber本地搭建体验过程

接着将该token保存到jenkins的凭据管理中:

记一次sonaQuber本地搭建体验过程

最后在jenkins上系统管理->系统配置中配置sonarqube服务器地址:

记一次sonaQuber本地搭建体验过程

这时候就可以使用sonarqube的jenkins插件进行代码扫描了,下面是pipeline使用参考:

//代码扫描

//代码扫描
stage("CodeScan"){
    steps{
        timeout(time:20, unit:"MINUTES"){
            script{
                tools.PrintMes("代码扫描!","green")
                withSonarQubeEnv(credentialsId: 'c8c8160b-d6d1-4bd7-a49c-bddd2fe7130b') {
                    sh """
                        sonar-scanner \
                        -Dsonar.projectVersion=v2.0
                       """
                }
            }
        }
    }
}

Docker安装 如果不是生产环境的话,可以考虑使用docker来启动SonarQube,简单方便。

# 创建数据卷
mkdir -p /data/sonar/{sonarqube_conf,sonarqube_extensions,sonarqube_logs,sonarqube_data}
chmod -R 777 /data/sonar

# 运行sonar容器
docker run -itd --name sonarqube \
-p 9000:9000 \
-v /data/sonar/sonarqube_conf:/opt/sonarqube/conf \
-v /data/sonar/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/sonar/sonarqube_logs:/opt/sonarqube/logs \
-v /data/sonar/sonarqube_data:/opt/sonarqube/data \
sonarqube:lts

# 验证
docker logs -f sonarqube

基于gitlab runner+ docker 的CI/CD链路

记一次sonaQuber本地搭建体验过程

基于Github + Jenkins+sonar 的链路

记一次sonaQuber本地搭建体验过程

总结:

在整体质量体系下链路下,质量管理要求显得格外重要,以上适合没有统一devops平台团队,

sonar不仅能够检测出代码问题,减少在编码过程中犯过的一些低级错误,同时能够加强代码有可读性和维护性,并且通过代码质量检查,可以在发布测试环境之前及时发现问题、修复问题,减少测试环境bug率,拉升你的KPI , 从而系统地提高整体代码质量。不仅如此,前端也可以独立将这些沉淀为工具,比如像FF toolsyx-doctor 就是很好的工具,大多情况下,有一定技术体量和基因的企业将这些都归类到devops 体系中,在这样的体系中,前端很少接触的到,前期小团队建议可以搭建sonar服务,是不错的选择。

像静态代码检查+依赖检查+依赖可视化+提交规范+合并请求+代码检查(人工)+代码扫描,这个过程都可以归类到前端工程化体系中

转载自:https://juejin.cn/post/7282245793688043580
评论
请登录