vue项目采用sonarqube扫描代码

安装包下载

zip包下载
sonarqube下载地址

项目启动

由于我使用的是windows系统,所以找到zip包中的D:\programs\sonarqube-9.2.1.49989\bin\windows-x86-64\StartSonar.bat, 进行启动。

成功启动后打开的控制台的内容

wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2021.12.13 14:33:39 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory D:\programs\sonarqube-9.2.1.49989\temp
jvm 1    | 2021.12.13 14:33:39 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:4510]
jvm 1    | 2021.12.13 14:33:39 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [D:\programs\sonarqube-9.2.1.49989\elasticsearch]: C:\Program Files\Java\jdk-17.0.1\bin\java -XX:+UseG1GC -Djava.io.tmpdir=D:\programs\sonarqube-9.2.1.49989\temp -XX:ErrorFile=../logs/es_hs_err_pid%p.log -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=COMPAT -Dcom.redhat.fips=false -Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -Delasticsearch -Des.path.home=D:\programs\sonarqube-9.2.1.49989\elasticsearch -Des.path.conf=D:\programs\sonarqube-9.2.1.49989\temp\conf\es -cp lib/* org.elasticsearch.bootstrap.Elasticsearch
jvm 1    | 2021.12.13 14:33:39 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
jvm 1    | WARNING: A terminally deprecated method in java.lang.System has been called
jvm 1    | WARNING: System::setSecurityManager has been called by org.elasticsearch.bootstrap.Elasticsearch (file:/D:/programs/sonarqube-9.2.1.49989/elasticsearch/lib/elasticsearch-7.14.1.jar)
jvm 1    | WARNING: Please consider reporting this to the maintainers of org.elasticsearch.bootstrap.Elasticsearch
jvm 1    | WARNING: System::setSecurityManager will be removed in a future release
jvm 1    | WARNING: A terminally deprecated method in java.lang.System has been called
jvm 1    | WARNING: System::setSecurityManager has been called by org.elasticsearch.bootstrap.Security (file:/D:/programs/sonarqube-9.2.1.49989/elasticsearch/lib/elasticsearch-7.14.1.jar)
jvm 1    | WARNING: Please consider reporting this to the maintainers of org.elasticsearch.bootstrap.Security
jvm 1    | WARNING: System::setSecurityManager will be removed in a future release
jvm 1    | 2021.12.13 14:33:47 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
jvm 1    | 2021.12.13 14:33:47 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [D:\programs\sonarqube-9.2.1.49989]: C:\Program Files\Java\jdk-17.0.1\bin\java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=D:\programs\sonarqube-9.2.1.49989\temp -XX:-OmitStackTraceInFastThrow --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Dcom.redhat.fips=false -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/sonar-application-9.2.1.49989.jar;D:\programs\sonarqube-9.2.1.49989\lib\jdbc\h2\h2-1.4.199.jar org.sonar.server.app.WebServer D:\programs\sonarqube-9.2.1.49989\temp\sq-process14026979473995193028properties
jvm 1    | WARNING: A terminally deprecated method in java.lang.System has been called
jvm 1    | WARNING: System::setSecurityManager has been called by org.sonar.process.PluginSecurityManager (file:/D:/programs/sonarqube-9.2.1.49989/lib/sonar-application-9.2.1.49989.jar)
jvm 1    | WARNING: Please consider reporting this to the maintainers of org.sonar.process.PluginSecurityManager
jvm 1    | WARNING: System::setSecurityManager will be removed in a future release
jvm 1    | 2021.12.13 14:34:17 INFO  app[][o.s.a.SchedulerImpl] Process[web] is up
jvm 1    | 2021.12.13 14:34:17 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [D:\programs\sonarqube-9.2.1.49989]: C:\Program Files\Java\jdk-17.0.1\bin\java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=D:\programs\sonarqube-9.2.1.49989\temp -XX:-OmitStackTraceInFastThrow --add-opens=java.base/java.util=ALL-UNNAMED --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.management/sun.management=ALL-UNNAMED --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED -Dcom.redhat.fips=false -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/sonar-application-9.2.1.49989.jar;D:\programs\sonarqube-9.2.1.49989\lib\jdbc\h2\h2-1.4.199.jar org.sonar.ce.app.CeServer D:\programs\sonarqube-9.2.1.49989\temp\sq-process11723127385223217487properties
jvm 1    | 2021.12.13 14:34:18 WARN  app[][startup] ####################################################################################################################
jvm 1    | 2021.12.13 14:34:18 WARN  app[][startup] Default Administrator credentials are still being used. Make sure to change the password or deactivate the account.
jvm 1    | 2021.12.13 14:34:18 WARN  app[][startup] ####################################################################################################################
jvm 1    | WARNING: A terminally deprecated method in java.lang.System has been called
jvm 1    | WARNING: System::setSecurityManager has been called by org.sonar.process.PluginSecurityManager (file:/D:/programs/sonarqube-9.2.1.49989/lib/sonar-application-9.2.1.49989.jar)
jvm 1    | WARNING: Please consider reporting this to the maintainers of org.sonar.process.PluginSecurityManager
jvm 1    | WARNING: System::setSecurityManager will be removed in a future release
jvm 1    | 2021.12.13 14:34:21 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1    | 2021.12.13 14:34:21 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

系统默认启动的web服务页面在当前系统的9000端口,访问http://127.0.0.1:9000/进入登录页面,默认的账号密码都是:admin。

创建项目

在首页找到create Project 创建一个Manually项目,选择Locally,因为我采用的是本地的代码

生成token,然后选择项目的语言,操作系统,我这里使用的是JavaScript Vue项目和windows,拿到生成的sonar.projectKey、sonar.login和sonar.host.url等字段,到这里服务器端的sonarqube已经配置好了。

扫描项目

首先安装sonar-scanner全局安装

cnpm i -g sonar-scanner

进去自己的JavaScript项目的根目录下,添加文件sonar-project.properties,大概配置如下:

# 本地自己起的sonarqube服务地址
sonar.host.url=http://127.0.0.1:9000/
sonar.login=a3d88c9bede392a64c46c40ffd62507fdb96b766
sonar.projectKey=test-project
# 中文的字段需要用Unicode转码,展示到sonarqube的web中才不会乱码
sonar.projectName=\u6d4b\u8bd5\u9879\u76ee

# 公共可用的配置项
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.sources=./src
sonar.exclusions=/node_modules/
sonar.tests=./src
sonar.test.inclusions=**/*.spec.ts

然后直接在当前根目录下运行shell命令:

sonar-scanner

等运行结束后就可以得到项目的分析结果了,命令行可以看到分析结果的地址:

INFO: ANALYSIS SUCCESSFUL, you can browse http://127.0.0.1:9000/dashboard?id=bt-frontend-pc

扫描结果的一些概念

官网文档

拷贝一些翻译的内容:

Concept 概念 定义
bug 漏洞 表示代码中出现错误的问题。如果这还没有打破,它会,而且可能是在最糟糕的时刻。这需要修复。昨天。
Code Smell 代码气味 代码中与可维护性相关的问题。保持原样意味着维护人员充其量将比对代码进行更改更难。最糟糕的是,他们会对代码的状态感到困惑,以至于在进行更改时会引入额外的错误。
Cost 成本 查看修复成本
Debt 债务 见技术债
Issue 问题 当一段代码不符合规则时,快照会记录一个问题。问题可以记录在源文件或单元测试文件中。有 3 种类型的问题:错误、代码异味和漏洞
Measure 措施 给定时间给定文件或项目的度量值。例如,类 MyClass 上的 125 行代码或项目 myProject 上 30.5% 的重复行密度
Metric 公制 一种测量。随着时间的推移,指标可以具有不同的值或度量。示例:代码行数、复杂性等。度量可以是定性的(给出组件的质量指示、重复行的 EG 密度、测试的行覆盖率等)或定量的(不给出质量指示)在组件上,EG 代码行数,复杂度等)
New Code definition 新代码定义 您密切关注代码中引入新问题的变更集或时期。理想情况下,这是因为previous_version,但如果您不使用类
Quality Profile 质量简介 一套规则。每个快照都基于单个质量配置文件。另见质量概况
Rule 规则 应遵循的编码标准或实践。不遵守编码规则会导致错误、漏洞、安全热点和代码异味。规则可以检查代码文件或单元测试的质量。
Remediation Cost 修复成本 修复漏洞和可靠性问题所需的估计时间。
Snapshot 快照 在给定时间针对给定项目的一组措施和问题。每次分析都会生成一个快照。
Security Hotspot 安全热点 需要手动审查的安全敏感代码段。经过审查,您要么会发现不存在威胁​​,要么会发现存在需要修复的易受攻击的代码。
Technical Debt 技术债 修复所有可维护性问题/代码异味所需的估计时间
Vulnerability 漏洞 一个与安全相关的问题,代表攻击者的后门。另请参阅安全相关规则。

开始查看扫描结果

然后就快乐的查看sonarqube中扫描出来的问题,并开始快乐的解决问题了,javascript的扫描规则。

你可能感兴趣的:(vue.js,前端)