【问题标题】:SonarQube MSBuild integration failed - using MSBuild definition for building .Net ApplicationSonarQube MSBuild 集成失败 - 使用 MSBuild 定义构建 .Net 应用程序
【发布时间】: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


【解决方案1】:

正如我在您的评论中看到的那样:

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 的路径

【讨论】:

    【解决方案2】:

    您可以尝试指定/n:/k:arguments:

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

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

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

    查看下面的截图:

    【讨论】:

    • 由于模板中的帖子活动导致此问题:SonarQube MSBuild 集成失败:SonarQube 无法收集有关您的项目的所需信息。可能的原因: 1. 项目尚未构建 - 项目必须在开始和结束步骤之间构建 2. 使用了不受支持的 MSBuild 版本来构建项目。目前支持 MSBuild 12.0 以上版本 3. 开始、构建或结束步骤并未全部从同一文件夹启动 后处理失败。退出代码:1
    • [build-script-hooks-for-tfs-2012-builds] (colinsalmcorner.com/post/build-script-hooks-for-tfs-2012-builds) :如果您将通过此链接,我使用构建后脚本活动并在测试活动之后添加它自定义模板。是的,我指定了 /n:/k:arguments: 比如开始 /n:bbb /v: /k:bb_2。同样在源目录中创建 .sonarqube 文件夹。唯一的问题是后期建设活动。
    • 您可以分享您的自定义构建过程模板。
    • 无法共享整个自定义构建过程模板,因为它位于客户端计算机上。
    猜你喜欢
    • 2019-10-24
    • 2017-08-17
    • 2018-08-15
    • 1970-01-01
    • 2012-04-30
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多