Search code examples
c#msbuildsonarqube-4.5sonarqube-msbuild-runner

I am trying to install SonarQube Scanner for MSBuild


I've successfully set up SonarQube and the C# plugin. I am running into trouble getting the Sonarqube Scanner to work.

I've the following SonarQube.Analysis.xml

<SonarQubeAnalysisProperties  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1">

  <Property Name="sonar.host.url">sonar.dnbad.nl</Property>

  <Property Name="sonar.login">...</Property>
  <Property Name="sonar.password">....</Property>

  <Property Name="sonar.verbose">true</Property>

  <!-- Required only for versions of SonarQube prior to 5.2 -->
  <!--
  <Property Name="sonar.jdbc.url">jdbc:jtds:sqlserver://mySqlServer/sonar;instance=SQLEXPRESS;SelectMethod=Cursor</Property>
  <Property Name="sonar.jdbc.username">sonar</Property>
  <Property Name="sonar.jdbc.password">sonar</Property>
  -->

</SonarQubeAnalysisProperties>

When I run the examples in SonarSource-sonar-examples-3e5f679 I get the following output:

SonarQube Scanner for MSBuild 2.0
Default properties file was found at D:\ServApps\SonarQubeScannerForMSBuild\SonarQube.Analysis.xml
Loading analysis properties from D:\ServApps\SonarQubeScannerForMSBuild\SonarQube.Analysis.xml
sonar.verbose=true was specified - setting the log verbosity to 'Debug'
Pre-processing started.
Using environment variables to determine the download directory...
Preparing working directories...
Removing the existing directory: E:\test\projects\languages\csharp\ConsoleApplication1\.sonarqube
Creating directory: E:\test\projects\languages\csharp\ConsoleApplication1\.sonarqube
Creating directory: E:\test\projects\languages\csharp\ConsoleApplication1\.sonarqube\bin
SonarQube server url: sonar.dnbad.nl
Checking for updates...
Downloading SonarQube.MSBuild.Runner.Implementation.zip from sonar.dnbad.nl/static/csharp/SonarQube.MSBuild.Runner.Implementation.zip to E:\test\projects\languages\csharp\ConsoleApplication1\.sonarqube\bin\SonarQube.MSBuild.Runner.Implementation.zip

Unhandled Exception: System.Net.WebException: Could not find a part of the path 'E:\test\projects\languages\csharp\ConsoleApplication1\sonar.dnbad.nl\static\csharp\SonarQube.MSBuild.Runner.Implementation.zip'. ---> System.Net.WebException: Could not find a part of the path 'E:\test\projects\languages\csharp\ConsoleApplication1\sonar.dnbad.nl\static\csharp\SonarQube.MSBuild.Runner.Implementation.zip'. ---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'E:\test\projects\languages\csharp\ConsoleApplication1\sonar.dnbad.nl\static\csharp\SonarQube.MSBuild.Runner.Implementation.zip'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
   at System.Net.FileWebStream..ctor(FileWebRequest request, String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async)
   at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)
   --- End of inner exception stack trace ---
   at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)
   at System.Net.FileWebRequest.GetResponseCallback(Object state)
   --- End of inner exception stack trace ---
   at System.Net.WebClient.DownloadFile(Uri address, String fileName)
   at System.Net.WebClient.DownloadFile(String address, String fileName)
   at SonarQube.Bootstrapper.BuildAgentUpdater.TryUpdate(String hostUrl, String targetDir, ILogger logger)
   at SonarQube.Bootstrapper.Program.PreProcess(IBuildAgentUpdater updater, IBootstrapperSettings settings, ILogger logger)
   at SonarQube.Bootstrapper.Program.Execute(String[] args, IBuildAgentUpdater updater, ILogger logger)
   at SonarQube.Bootstrapper.Program.Main(String[] args)

It looks as if the runner is trying to create a path but it is including the sonar url in the path, rather than the directory .sonarcube\bin

Any suggestions?


Solution

  • You're passing a hostname instead of a URL to sonar.host.url, so the scheme to use is ambiguous. You should fully define the URL instead:

    <Property Name="sonar.host.url">http://sonar.dnbad.nl</Property>