当前位置:坤哥网-kwan-Sonar 安装与使用实战记录

Sonar 安装与使用实战记录

2021/6/25 16:10:51 IT综合阅读(116) 评论(0)

目录

一、准备工作

需要安装 jdk。

sonarqube,下载地址:http://www.sonarqube.org/downloads/ ,【Show all versions】选择需要下载的版本,本次下载的版本是 sonarqube-6.2。

sonar-scanner 下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

选择需要下载的版本,本次下载的版本是 sonar-scanner-2.8。

二、sonarqube 安装与配置

windows 系统运行 bin\windows-x86-64\StartSonar.bat:

StartSonar.bat_click

浏览中打开【http://localhost:9000/】,出现如下界面表示运行成功:

sonar_http_9000

在 sqlserver 中新建一个 sonar 数据库,并进行如下设置:

sonar_db

数据库配置,修改配置文件【sonarqube-6.2\conf\sonar.properties】,主要修改内容:

sonar.jdbc.username=sa
sonar.jdbc.password=123456@

sonar.jdbc.url=jdbc:sqlserver://10.139.60.153:1433;databaseName=sonar

sonar.jdbc.maxActive=60sonar.jdbc.maxIdle=5sonar.jdbc.maxWait=5000sonar.jdbc.minEvictableIdleTimeMillis=600000sonar.jdbc.timeBetweenEvictionRunsMillis=30000

下载 Microsoft SQL JDBC 驱动,下载地址:https://www.microsoft.com/en-US/download/details.aspx?id=11774

解压下载的文件,将文件【sqljdbc_auth.dll】放到目录【sonarqube-6.2\lib\jdbc\mssql】中。

重启 sonarqube 服务,重新访问 http://localhost:9000/ 进行初始化数据库,完成后:

sonar.122702

注:重启 sonarqube 服务可能会失败,详细查看失败解决(Process.P2)。

三、安装插件

使用默认用户(admin/admin)登录,进入插件安装页面(http://localhost:9000/updatecenter/available),选择需要安装的插件,如本次安装【Chinese Pack】和【c#】。

界面管理中没有适合版本的语言包,特地在网上单独下载下来,下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases?after=sonar-l10n-zh-plugin-1.22

将下载的文件放到目录【sonarqube-6.2\extensions\plugins】中,重启服务就可看到中文了。

四、应用

1.修改【sonar-scanner-2.8\conf\sonar-scanner.properties】配置文件

修改如下:

sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:jtds:sqlserver://10.139.60.153:1433/sonar;SelectMethod=Cursor

2.修改sonar-scanner的环境变量

在 Path 中新增 sonar-scanner 安装的 bin 目录:

sonar.122703

检查是否配置成功,输入命令【sonar-runner -version】出现如下表示配置成功:

C:\Users\wankun>sonar-runner -version
WARN: sonar-runner.bat script is deprecated. Please use sonar-scanner.bat instead.
E:\job\tool\sonar\sonar-scanner-2.8\bin\..ERROR: Unrecognized option: -version
INFO:
INFO: usage: sonar-scanner [options]INFO:
INFO: Options:
INFO:  -D,--define <arg>     Define property
INFO:  -h,--help             Display help information
INFO:  -v,--version          Display version information
INFO:  -X,--debug            Produce execution debug output
INFO:  -i,--interactive      Run interactively

3.分析项目

  1. 在需要代码分析的项目根目录新建【sonar-project.properties】文件,内容如下:

# Required metadatasonar.projectKey=LoanInfoProcess
sonar.projectName=LoanInfoProcess
sonar.projectVersion=1.0# Comma-separated paths to directories with sources (required)sonar.sources=./# sonar.binaries=.# Languagesonar.language=cs# Encoding of the source filessonar.sourceEncoding=UTF-8
  1. 打开命令窗口,进入项目所在根目录,执行命令【sonar-runner】

sonar.122704

如果报错了,详见【Process.P5】

如果使用其他的 sonarqube 平台,如地址【http://10.138.60.82:9000】,修改文件【sonar-scanner.properties】的【sonar.host.url】为【http://10.138.60.82:9000】,执行命令【sonar-runner】,成功如下:

sonar.122705

会在项目的【.sonar】中生成分析报告,如本次是【LoanInfoProcess.pdf】,sonarqube 平台也会有分析报告,在【Project】中:

sonar.122706

点击可看到条目统计信息:

sonar.122707

如何删除Project?

配置->项目->Management,勾选,然后点击【delete】即可:

sonar.123003

五、在vs中使用

vs在【工具】->【扩展和更新】里安装【SonarLint for Visual Studio 2017】。

插件官方地址:https://www.sonarlint.org/visualstudio/。

下载完成后,【分析】->【Manage SonarQube Connections...】,点击后会在团队资源管理器中显示,点击Connect,然后输入 SonarQube 服务器地址、用户、密码,连接:

sonar.123001

如果有多个的话可以输入 project 名称来刷选,双击需要选择的Project即可,如本次为【LoanInfoProcess】:

sonar.123002

P、常见问题

Process.P1

使用高版本 sonarqube-8.0 打开报错,需要使用 Java 11+:

sonarqube-8.0_error_java11

Process.P2

修改配置文件【sonarqube-6.2\conf\sonar.properties】的数据库配置后,保存,将 cmd 窗口关闭之后,再次启动【StartSonar.bat】 报错:

sonar.122701

这种情况需要先关闭 java(为什么是关闭java,详见 Process.P3),在任务管理器的杀掉进程【java.exe】,再重启即可。

Process.P3

重启 sonarqube 服务报错:

sonar.122701

这种情况需要先关闭 java(为什么是关闭java,详见 Process.P4),在任务管理器的杀掉进程【java.exe】,再重启即可。

Process.P4

查出占用文件的进程。

Process.P5

执行命令【sonar-runner】报错如下:

...

INFO: Importing analysis results from D:\svn\Loan\trunk\VBS_Console\LoanInfoProcess\.sonar\output-cs
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 22.720s
INFO: Final Memory: 47M/306M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
java.lang.IllegalArgumentException: Start pointer [line=1, lineOffset=0] should be before end pointer [line=1, lineOffset=0]
        at org.sonar.api.internal.google.common.base.Preconditions.checkArgument(Preconditions.java:145)
        at org.sonar.api.batch.fs.internal.DefaultInputFile.newRangeValidPointers(DefaultInputFile.java:254)
        at org.sonar.api.batch.fs.internal.DefaultInputFile.newRange(DefaultInputFile.java:238)
        at org.sonarsource.dotnet.shared.plugins.SensorContextUtils.toTextRange(SensorContextUtils.java:41)
        at org.sonarsource.dotnet.shared.plugins.protobuf.IssuesImporter.consumeFor(IssuesImporter.java:52)
        at org.sonarsource.dotnet.shared.plugins.protobuf.IssuesImporter.consumeFor(IssuesImporter.java:33)
        at org.sonarsource.dotnet.shared.plugins.protobuf.ProtobufImporter.consume(ProtobufImporter.java:49)
        at org.sonarsource.dotnet.shared.plugins.protobuf.RawProtobufImporter.accept(RawProtobufImporter.java:43)
        at org.sonarsource.dotnet.shared.plugins.AbstractSensor.parseProtobuf(AbstractSensor.java:95)
        at org.sonarsource.dotnet.shared.plugins.AbstractSensor.importResults(AbstractSensor.java:85)
        at org.sonar.plugins.csharp.CSharpSensor.executeInternal(CSharpSensor.java:111)
        at org.sonar.plugins.csharp.CSharpSensor.execute(CSharpSensor.java:82)
        at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
        at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:57)
        at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:49)
        at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:78)
        at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:182)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:247)
        at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:242)
        at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:232)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47)
        at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:86)
        at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
        at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
        at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:115)
        at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:116)
        at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
        at com.sun.proxy.$Proxy0.execute(Unknown Source)
        at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
        at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
        at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:110)
        at org.sonarsource.scanner.cli.Main.execute(Main.java:74)
        at org.sonarsource.scanner.cli.Main.main(Main.java:61)ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

这种情况暂未解决。

Process.P6

启动Sonar【StartSonar.bat】报错:

sonar.122709

经查发现任务管理器中java.exe不存在,打开【D:\install\Java\jdk1.8.0_181\bin\java.exe】,java.exe已经在任务管理器中出现了,但是还是报上面的错误。

查看 Path:

sonar.122708

打了双引号?
发现 PATH 中【%JAVA_HOME%\bin;】有分号,去掉分号。
继续执行发现一闪而过,隐约看到有cache。

重新解压压缩包使用正常了。


标签: 代码检查
分类: 代码健康

有话要说? =>【不用注册,直接登录】,然后刷新本页面来发表您的观点(●'◡'●)