这是我的第一个博客或查询。我对 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
请仔细阅读,如果有人可以指导我并提供一些具体的解释来解决这个问题,那将是一个很大的帮助。
如果您需要任何其他信息,请告诉我。