使用TeamCity中的MsBuild脚本为MsBuild运行Sonar Scanner

时间:2018-03-23 11:44:47

标签: c# sonarqube teamcity sonarqube-scan

我正在升级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:&quot;$(SonarProjectKey)&quot; /n:&quot;$(SonarProjectName)&quot; /v:&quot;$(Build_Number)&quot;" />  
<Exec Command="&quot;C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe&quot; @(Solution)  /t:Rebuild" />
<Exec Command="$(SonarScannerMSBuildPath) end" />

我想使用的命令是,因为这应该使用在TeamCity中选择的MsBuild版本:

<Exec Command="$(SonarScannerMSBuildPath) begin /d:sonar.verbose=$(SonarScannerVerboseLogging) /k:&quot;$(SonarProjectKey)&quot; /n:&quot;$(SonarProjectName)&quot; /v:&quot;$(Build_Number)&quot;" />  
<MSBuild Targets="Rebuild" Properties="Configuration=Debug" Projects="@(Solution)" />
<Exec Command="$(SonarScannerMSBuildPath) end" />

在TeamCity中,我将MsBuild版本设置为: MsBuild2017Configuration

我注意到当我运行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文件夹。

2 个答案:

答案 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%

整个配置的打印屏幕:

enter image description here

答案 1 :(得分:0)

Scanner for MSBuild期望从同一目录运行 begin build end 步骤。我的猜测是 Exec MSBuild 任务正在使用不同的工作目录。

您可以尝试设置 Exec 任务的 WorkingDirectory 参数,看看是否有帮助(我首先尝试将其设置为包含解决方案的目录)。< / p>