我正在升级TeamCity 2017.1.4和SonarQube 6.7.1,并且正在升级分析方法以使用Sonar Scanner for MsBuild(4.0.2)而不是之前使用过的Sonar Runner。
我们使用MsBuild脚本,以便我们可以控制更改,我正在努力让Sonar扫描仪工作。
问题似乎是当我使用MSBuild任务构建项目时Sonar抱怨声称它没有构建或者没有使用较新版本的MsBuild构建。 但是,如果我使用Exec命令指定构建,它会正确处理所有内容。
使用Exec运行MsBuild(不是我想要做的):
<Exec Command="$(SonarScannerMSBuildPath) begin /d:sonar.verbose=$(SonarScannerVerboseLogging) /k:"$(SonarProjectKey)" /n:"$(SonarProjectName)" /v:"$(Build_Number)"" />
<Exec Command=""C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe" @(Solution) /t:Rebuild" />
<Exec Command="$(SonarScannerMSBuildPath) end" />
我想使用的命令是,因为这应该使用在TeamCity中选择的MsBuild版本:
<Exec Command="$(SonarScannerMSBuildPath) begin /d:sonar.verbose=$(SonarScannerVerboseLogging) /k:"$(SonarProjectKey)" /n:"$(SonarProjectName)" /v:"$(Build_Number)"" />
<MSBuild Targets="Rebuild" Properties="Configuration=Debug" Projects="@(Solution)" />
<Exec Command="$(SonarScannerMSBuildPath) end" />
我注意到当我运行Exec命令来构建解决方案时,我看到了Analyzer警告,但是当通过MsBuild命令运行构建时,这些警告不会出现。 teamcity输出意味着正在使用正确的MsBuild版本:
[11:40:34] [Step 1/1] Starting: D:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MsBuildBootstrap.exe /workdir:D:\TeamCity\buildAgent\work\488e6f245ac98af3 "/msbuildPath:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\bin\MSBuild.exe"
错误信息说明:
[12:23:07] [Exec] The SonarQube MSBuild integration failed: SonarQube was unable to collect the required information about your projects.
[12:23:07] [Exec] Possible causes:
[12:23:07] [Exec] 1. The project has not been built - the project must be built in between the begin and end steps
[12:23:07] [Exec] 2. An unsupported version of MSBuild has been used to build the project. Currently MSBuild 14.0 upwards are supported
[12:23:07] [Exec] 3. The begin, build or end steps have not all been launched from the same folder
如果我浏览到TeamCity构建代理上的文件夹,我错过了.sonar和.sonarqube文件夹。
答案 0 :(得分:1)
我建议在TeamCity中使用普通的Commnand line runner来运行SonarQube Scanner。您可以毫无问题地在那里设置工作目录。以下是我的自定义脚本示例:
"%sonar.scanner.msbuild%\SonarQube.Scanner.MSBuild.exe" begin^
/k:"ProjectKey"^
/n:"ProjectName"^
/v:"%build.vcs.number%.%build.counter%"
"%MSBuildTools15.0_x64_Path%\MSBuild.exe" SolutionFile.sln /t:Rebuild
"%sonar.scanner.msbuild%\SonarQube.Scanner.MSBuild.exe" end
哪里
%sonar.scanner.msbuild%
是我的自定义参数 - SonarQube.Scanner.MSBuild.exe的完整路径,以及
%MSBuildTools15.0_x64_Path%
是来自TeamCity的参数,指向Visual Studio 2017构建工具。
我的工作目录设置为
%teamcity.build.checkoutDir%
整个配置的打印屏幕:
答案 1 :(得分:0)
Scanner for MSBuild期望从同一目录运行 begin , build 和 end 步骤。我的猜测是 Exec 和 MSBuild 任务正在使用不同的工作目录。
您可以尝试设置 Exec 任务的 WorkingDirectory 参数,看看是否有帮助(我首先尝试将其设置为包含解决方案的目录)。< / p>