【发布时间】:2017-01-20 09:02:37
【问题描述】:
这是我的第一篇博客或查询。我对 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/post 构建参数选项。
所以我在自定义的构建过程模板中进行了编辑,为构建前/后构建脚本活动添加了钩子,并更新了类似于上述链接的属性:- 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*
注意:对后期构建脚本做同样的事情
依次,我将这些 pre 和 post 脚本活动放在流程模板的“Try, Compile and Test”活动下。
在使用自定义过程模板的 MS 构建定义中,我在构建过程参数中设置以下值(XYZ 服务器上 runner.exe 的位置/路径):
预编译脚本路径:C:\SonarQube\bin\MSBuild.SonarQube.Runner.exe
预构建脚本参数 : begin /n: /v: /k:
构建后脚本路径:C:\SonarQube\bin\MSBuild.SonarQube.Runner.exe
构建后脚本参数:结束
但在所有这些更改之后,我的构建部分成功,声纳库集成失败并出现以下错误:
*SonarQube MSBuild 集成失败:SonarQube 无法收集有关您的项目所需的信息。
可能的原因:
1. 项目尚未构建 - 项目必须在开始和结束步骤之间构建
2. 使用了不受支持的 MSBuild 版本来构建项目。目前支持 MSBuild 12.0 以上版本
3. 开始、构建或结束步骤并非都从同一个文件夹启动*
注意:在 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
请仔细阅读,如果有人可以指导我并提供一些具体的解释来解决这个问题,那将是一个很大的帮助。
如果您需要任何其他信息,请告诉我。
【问题讨论】:
-
您是否尝试过使用默认构建模板?结果如何?
-
我尝试了使用 pqr.sln 文件的默认模板,但遇到了很多 dll 和其他人工制品访问和复制问题。甚至开发人员也无法纠正它。但是,我们在另一个构建定义中使用了相同的 pqr.sln,并且自定义构建模板 (不包括声纳参数和路径) 已成功构建。
-
你能检查一下 MSBuild.SonarQube.Runner 和 MSBuild 是否从同一个工作目录运行?
-
MSBuild.SonarQube.Runner 安装在“C:\sonarquberunner\”上,MSBuild 位于“C:\Windows\Microsoft.Net\Framework\v4.0.30319\MSBuild.exe”和我的构建下TFS 服务器上的目录是“D:\data\Build\$(BuildAgentId)\$(BuildDefinitionPath)”(构建源代码的位置)。现在在构建定义和构建过程模板的属性中,我提到了 SourceDirectory 作为工作目录,因此 .sonarqube 正在构建目录/源目录中创建。在“.sonarqube/out”文件夹中,sonar-project.properties 没有被创建(可能导致问题)。
标签: tfs msbuild sonarqube build-definition build-process-template