.NET Core 使用 Sonarqube 问题

内容纲要

.NET Core 使用 Sonarqube 问题

运行 Sonarqube 的简单方法

docker run -d --name sonarqube -p 9000:9000 sonarqube

默认账号密码是 admim

登陆后创建项目和 token,直接按照提示选择 C#.NET。

.NET Core 项目

先运行一下命令

dotnet tool install --global dotnet-sonarscanner

.NET FX 项目

到这里下载最新版本的 工具

https://github.com/SonarSource/sonar-scanner-msbuild/releases

解压到英文目录,将目录路径复制,打开环境变量,点击 Path,添加目录。

进入 sonar 文件目录,文件如下

.
├── Newtonsoft.Json.dll
├── SonarQube.Analysis.xml
├── sonar-scanner-4.2.0.1873
│   ├── bin
│   ├── conf
│   └── lib
├── SonarScanner.MSBuild.Common.dll
├── SonarScanner.MSBuild.dll
├── SonarScanner.MSBuild.PostProcessor.dll
├── SonarScanner.MSBuild.PreProcessor.dll
├── SonarScanner.MSBuild.runtimeconfig.json
├── SonarScanner.MSBuild.Shim.dll
├── SonarScanner.MSBuild.Tasks.dll
└── SonarScanner.MSBuild.TFS.dll

如果是 .NET Core ,就使用 dotnet sonarscanner,如果 .NET Fx,就用
dotnet SonarScanner.MSBuild.dll后面带的参数一致。

执行一下命令登陆 Sonarqube

dotnet sonarscanner begin /k:"{项目名称}" /d:sonar.host.url="http://{ip地址}:9000" /d:sonar.login="{Token密钥}"
Using the .NET Core version of the Scanner for MSBuild
Pre-processing started.
Preparing working directories...
09:39:30.41  Updating build integration targets...
09:39:30.444  Fetching analysis configuration settings...
09:39:32.229  Provisioning analyzer assemblies for cs...
09:39:32.232  Installing required Roslyn analyzers...
09:39:33.903  Provisioning analyzer assemblies for vbnet...
09:39:33.904  Installing required Roslyn analyzers...
09:39:34.034  Pre-processing succeeded.

分析、编译项目

打开项目目录,执行

 dotnet build {解决方案.sln}
 或者
 dotnet build {项目.csproj}

如果后面的代码报错

No analysable projects were found. SonarQube analysis will not be performed. Check the build summary report for details.
Generation of the sonar-properties file failed. Unable to complete SonarQube analysis.
13:04:37.856  Post-processing failed. Exit code: 1

就使用

 dotnet build 

将分析结果推送到 Sonarqube

在当前项目目录下执行

dotnet sonarscanner end /d:sonar.login="{Token}"

或者

dotnet {安装目录\SonarScanner.MSBuild.dll} end /d:sonar.login="{Token}"

如果出现

SonarScanner for MSBuild 4.3.1
Using the .NET Core version of the Scanner for MSBuild
Default properties file was found at C:\Users\GW\.dotnet\tools\.store\dotnet-sonarscanner\4.3.1\dotnet-sonarscanner\4.3.1\tools\netcoreapp2.1\any\SonarQube.Analysis.xml
Loading analysis properties from C:\Users\GW\.dotnet\tools\.store\dotnet-sonarscanner\4.3.1\dotnet-sonarscanner\4.3.1\tools\netcoreapp2.1\any\SonarQube.Analysis.xml
Post-processing started.
10:01:01.135  SonarQube analysis could not be completed because the analysis configuration file could not be found: H:\MQTT\Gw.MqttService\GwMqttClient.STD\.sonarqube\conf\SonarQubeAnalysisConfig.xml.
10:01:01.138  Post-processing failed. Exit code: 1

以上三个步骤的命令都需要在下面执行。

如果根据原文档和 Sonarqube 的提示去做,可能会出现

Pre-processing started.
Preparing working directories...
09:36:45.742  Updating build integration targets...
09:36:45.769  Fetching analysis configuration settings...
09:36:47.863  Failed to request and parse 'http://localhost:9000/api/server/version': 由于目标计算机积极拒绝,无法连接。 由于目标计算机积极拒绝,无法连接。

Unhandled Exception: System.Net.WebException: 由于目标计算机积极拒绝,无法连接。 由于目标计算机积极拒绝,无法连接。 ---> System.Net.Http.HttpRequestException: 由于目标计算机积极拒绝,无法连接。 ---> System.Net.Sockets.SocketException: 由于 目标计算机积极拒绝,无法连接。
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at System.Net.HttpWebRequest.SendRequest()
   at System.Net.HttpWebRequest.GetResponse()
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at System.Net.WebClient.GetWebResponse(WebRequest request)
   at System.Net.WebClient.DownloadBits(WebRequest request, Stream writeStream)
   at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   at System.Net.WebClient.DownloadString(Uri address)
   at SonarScanner.MSBuild.PreProcessor.SonarWebService.<>c__DisplayClass15_0.<DownloadServerVersion>b__0()
   at SonarScanner.MSBuild.PreProcessor.SonarWebService.DoLogExceptions[T](Func1 op, String url, Action1 onError)
   at SonarScanner.MSBuild.PreProcessor.SonarWebService.DownloadServerVersion()
   at SonarScanner.MSBuild.PreProcessor.SonarWebService.GetServerVersion()
   at SonarScanner.MSBuild.PreProcessor.SonarWebService.GetProperties(String projectKey, String projectBranch)
   at SonarScanner.MSBuild.PreProcessor.TeamBuildPreProcessor.FetchArgumentsAndRulesets(ISonarQubeServer server, ProcessedArgs args, TeamBuildSettings settings, IDictionary2& serverSettings, List1& analyzersSettings)
   at SonarScanner.MSBuild.PreProcessor.TeamBuildPreProcessor.DoExecute(ProcessedArgs localSettings)
   at SonarScanner.MSBuild.BootstrapperClass.PreProcess()
   at SonarScanner.MSBuild.BootstrapperClass.Execute()
   at SonarScanner.MSBuild.Program.Execute(String[] args, ILogger logger)
   at SonarScanner.MSBuild.Program.Main(String[] args)
点赞
  1. cheap effexor说道:

    My husband and i ended up being absolutely delighted Edward could complete his homework from the ideas he discovered from your very own site. It's not at all simplistic just to be giving away helpful hints that many people could have been making money from. And we discover we've got the blog owner to give thanks to for that. The most important illustrations you have made, the simple web site navigation, the relationships you will help foster - it's got many incredible, and it's really helping our son in addition to the family know that the situation is exciting, which is quite mandatory. Thank you for everything!

  2. 痴者工良说道:

    首先要在 项目下执行 `dotnet sonarscanner begin /k:"{项目名称}" /d:sonar.host.url="http://{ip地址}:9000" /d:sonar.login="{Token密钥}"`,才能创建 .sonarqube目录

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You must enable javascript to see captcha here!