1

这是我的第一个博客或查询。我对 TFS 管理员角色和 sonarqube 工具非常陌生。

我们在项目中使用 TFS 2013 作为 ALM,该项目基于 .Net 应用程序(也是 .NET 的新手)。

根据客户要求,我正在尝试将“SonarQube 5.2”与自定义构建过程模板而不是默认模板集成。

我在“ABC 服务器”上安装了“SonarQube 5.2”,而我的“TFS 服务器/构建代理”在“XYZ”上。我在 XYZ 服务器上安装了适用于 MSBuild 2.1 的 SonarQube 扫描仪,并相应地更新了环境变量和 sonarqube runner xml。

根据标准链接,我没有使用默认模板:- http://docs.sonarqube.org/display/SCAN/From+Team+Foundation+Server+2013 并使用自定义的构建模板,它没有 pre/构建后参数选项。

因此,我在自定义构建过程模板中进行了编辑,为构建前/后构建脚本活动添加了钩子,并更新了类似于上述链接的属性:- http://www.colinsalmcorner.com/post/build-script-hooks-for- tfs-2012-builds

注意:根据上面的链接,我没有更新流程模板中的“挑战 2 - 环境变量”部分,因为我没有运行任何 powershell 脚本,只想执行 MSBuild.SonarQube.Runner.exe。

在自定义流程模板中使用以下活动和属性(请参阅上面的链接):

*ConvertWorkspaceItem 活动,设置以下属性:

• DisplayName: “Get pre-build script local path”
• Input: PreBuildScriptPath
• Result: preBuildScriptLocalPath
• Workspace: Workspace

在 InvokeProcess 活动中设置以下属性:

• Arguments: String.Format(" ""& '{0}' {1}"" ", prebuildScriptLocalPath, PreBuildScriptArgs)
• DisplayName: “Run pre-build script”
• FileName: “PowerShell”
• Working Directory: SourcesDirectory*

注意:对后期构建脚本做同样的事情

随后,我将这些脚本前和脚本后活动置于流程模板的“尝试、编译和测试”活动下。

在使用自定义过程模板的 MS 构建定义中,我在构建过程参数(XYZ 服务器上 runner.exe 的位置/路径)中设置以下值:

预编译脚本路径:C:\SonarQube\bin\MSBuild.SonarQube.Runner.exe

预构建脚本参数:开始 /n: /v:< 项目版本 #> /k:

构建后脚本路径:C:\SonarQube\bin\MSBuild.SonarQube.Runner.exe

构建后脚本参数:结束

但在所有这些更改之后,我的构建部分成功,sonarqube 集成失败,出现以下错误:

*SonarQube MSBuild 集成失败:SonarQube 无法收集有关您的项目的所需信息。

可能的原因:

  1. 项目尚未构建 - 项目必须在开始和结束步骤之间构建

  2. 使用了不受支持的 MSBuild 版本来构建项目。目前支持 MSBuild 12.0 以上

  3. begin、build 或 end 步骤并非都从同一个文件夹启动*

注意:在 XYZ 服务器(TFS 构建服务器)上,我们确实有 MSBuild 12.0,并且在 SourcesDirectory 下进行构建,因为在同一目录中创建了“.sonarqube”文件夹。

同样在 XYZ 服务器的命令提示符下(在 SourceDirectory 的位置或 ApplicationName.sln 可用的位置),我运行了以下 sonarqube 命令,我的分析成功并在 Sonarqube 仪表板上生成了报告:

- MSBuild.SonarQube.Runner begin /n:<project name>  /v:< project version #>  /k: <project key>
- "C:\Program Files (x86)\MSBuild\12.0\Bin\Msbuild.exe" "ApplicationName.sln" /p:Configuration=Debug /p:Platform="Any CPU"
- MSBuild.SonarQube.Runner end

请仔细阅读,如果有人可以指导我并提供一些具体的解释来解决这个问题,那将是一个很大的帮助。

如果您需要任何其他信息,请告诉我。

4

2 回答 2

2

正如我在你的评论中读到的:

MSBuild.SonarQube.Runner 安装在“C:\sonarquberunner\”上,MSBuild 位于 “C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe”下,我在 TFS 服务器上的构建目录是“D: \data\Build\$(BuildAgentId)\$(BuildDefinitionPath)"(构建源代码的位置)。

您已安装 MSBUILD 12,但 Build 代理正在调用版本 4.0

您需要修改构建过程模板才能实现这一目标。

在构建模板中找到 Run MSBuild 活动并设置 ToolPath = “C:\Program Files (x86)\MSBuild\12.0\bin\” 或 MSBUILD 12 的路径

于 2016-11-16T19:35:20.507 回答
0

您可以尝试指定/n:/k:参数:

/k:"与构建定义相关的 SonarQube 项目的项目密钥"

/n:"SonarQube 项目的项目名称"

此外,尝试将 设置Post-test script path为 的完整路径MSBuild.SonarQube.Runner.exe,并将 设置为Post-test script arguments,而不是构建后脚本路径和构建后脚本参数end

检查下面的屏幕截图:

在此处输入图像描述

于 2016-09-13T06:56:10.667 回答