Tfs SonarQube MSBuild集成失败-正在为生成.Net应用程序使用MSBuild定义

Tfs SonarQube MSBuild集成失败-正在为生成.Net应用程序使用MSBuild定义,tfs,msbuild,sonarqube,build-definition,build-process-template,Tfs,Msbuild,Sonarqube,Build Definition,Build Process Template,这是我的第一个博客或查询。我对TFS管理员角色和sonarqube工具非常陌生 我们在项目中使用TFS 2013作为ALM,该项目基于.Net应用程序(也是.Net的新应用程序) 根据客户的要求,我正在尝试将“SonarQube 5.2”与定制的构建过程模板而不是默认模板集成 我在“ABC服务器”上安装了“SonarQube 5.2”,我的“TFS服务器/构建代理”在“XYZ”上。 我在XYZ服务器上安装了用于MSBuild 2.1的SonarQube扫描程序,并相应地更新了环境变量&Sonar

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

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

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

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

根据标准链接,我没有使用默认模板:- 并使用定制的构建模板,该模板没有构建前/构建后参数选项

因此,我在定制的构建过程模板中进行了编辑,为构建前/构建后脚本活动添加了挂钩,并更新了与上述链接类似的属性:-

注意:根据上面的链接,我没有更新流程模板中的“挑战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无法收集有关项目的所需信息

可能的原因:

一,。项目尚未生成-项目必须在开始和结束步骤之间生成

二,。生成项目时使用了不受支持的MSBuild版本。目前支持MSBuild 12.0以上版本

三,。开始、生成或结束步骤并非都从同一文件夹启动*

注意:在XYZ服务器(TFS build server)上,我们确实有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
-MSBuild.SonarQube.Runner begin/n:/v:/k:
-“C:\Program Files(x86)\MSBuild\12.0\Bin\MSBuild.exe”“ApplicationName.sln”/p:Configuration=Debug/p:Platform=“任何CPU”
-MSBuild.SonarQube.Runner结束
请通过这将是一个很大的帮助,如果有人可以指导我,并提供一些具体的解释来解决这个问题


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

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

/k:“SonarQube项目的项目密钥,该项目的构建 定义涉及“

/n:“SonarQube项目的项目名称”

另外,尝试将
测试后脚本路径
设置为
MSBuild.SonarQube.Runner.exe的完整路径
,而不是生成后脚本路径和生成后脚本参数,并将
测试后脚本参数
设置为
结束

查看下面的屏幕截图:


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


MSBuild.SonarQube.Runner安装在“C:\sonarquberunner\”上,并且 MSBuild正在运行 “C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe”和我的 TFS服务器上的生成目录为 “D:\data\Build\$(BuildAgentId)\$(BuildDefinitionPath)”(文件的位置) 构建的源代码)

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

为了实现这一点,您需要修改构建过程模板


在生成模板中查找“运行MSBuild”活动,并设置ToolPath=“C:\Program Files(x86)\MSBuild\12.0\bin\”或MSBuild 12的路径

是否尝试使用默认生成模板?结果如何?我尝试使用pqr.sln文件的默认模板,遇到了很多DLL和其他人工制品的访问和复制问题。甚至开发人员也无法纠正它。但是,我们在另一个具有自定义生成模板(不包括sonarqube参数和路径)的生成定义中使用了相同的pqr.sln。能否检查MSBuild.sonarqube.Runner和MSBuild是否从同一工作目录运行?MSBuild.sonarqube.Runner安装在“C:\SonarQuberRunner\”上,而MSBuild正在运行“C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe”,我在TFS服务器上的生成目录是“D:\data\build\$(BuildAgentId)\$(BuildDefinitionPath)”(生成的源代码位置).现在,在构建定义和构建过程模板的属性中,我提到了SourceDirectory作为工作目录,因此在builddirectory/SourceDirectory.at“.sonarqube/out”文件夹中创建.sonar-project.properties(获取可能的原因)