【问题标题】:SonarQube, Cake and TeamCity Integration IssueSonarQube、Cake 和 TeamCity 集成问题
【发布时间】:2017-07-11 09:26:08
【问题描述】:

我正在使用 TeamCity 和 Cake 设置一个新的构建服务器来构建一个 c# 类库和测试项目。

我正在尝试将 SonarQube 添加到 Cake 构建脚本中。已经有一个 Cake 插件(https://github.com/AgileArchitect/Cake.Sonar),当从 TeamCity BuildAgent 的工作文件夹中手动运行 cake 构建脚本时,这一切工作得很好,但是当它作为 TeamCity 构建步骤运行时,MSBuild 之间的集成SonarQube 似乎坏了。

我在通过 TC 运行时在构建日志中得到的错误是:

SonarQube MSBuild 集成失败:SonarQube 无法收集有关您的项目的所需信息。
可能的原因:
  1. 项目尚未构建 - 项目必须在开始和结束步骤之间构建
  2. 使用了不受支持的 MSBuild 版本来构建项目。目前支持 MSBuild 12.0 以上
  3. begin、build 或 end 步骤未全部从同一个文件夹启动

这些都不适用于我。蛋糕脚本在这两种情况下都运行开始、构建和结束步骤。我已经注销了当前目录,这两种情况都符合预期,MSBuild 版本完全相同。

在日志中,SonarBegin 任务为命令行和 TC 记录相同的日志。这两个日志的唯一显着差异在于构建步骤:

在我看来,集成应该通过 MSBuild 从 Sonar 中获取一些设置来工作,例如设置 RunCodeAnalysis 目标并将 /ruleset 等参数添加到 csc.exe 调用中,而从 TC 运行时不会发生这种情况。

有人对如何弄清楚发生了什么有任何建议吗?

(工作 - 从 TeamCity 代理工作目录中的 powershell 命令行运行)

验证解决方案配置: 构建解决方案配置“Release|Any CPU”。 在“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\bin\targets\SonarQube.Integration.targets (340,11)”的 BeforeTargets 属性中列出的目标“RunCodeAnalysis”在项目中不存在,并且将被忽略。 在“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\bin\targets\SonarQube.Integration.targets (391,11)”的 AfterTargets 属性中列出的目标“RunCodeAnalysis”在项目中不存在,并且将被忽略。 项目“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\ContractManagement.Common.sln”(1)正在构建“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\src\ContractManagement.Common\ContractManagement.Common.csproj”(2 ) 在节点 1(默认目标)上。 GenerateTargetFrameworkMonikerAttribute: 跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件都是最新的。 创建项目特定目录: 目录“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\out\\ContractManagement.Common_AnyCPU_Release_5799”不存在。跳过。 创建目录“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\out\\ContractManagement.Common_AnyCPU_Release_5799”。 目录“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\conf\\ContractManagement.Common_AnyCPU_Release_5799”不存在。跳过。 创建目录“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\conf\\ContractManagement.Common_AnyCPU_Release_5799”。 核心编译: C:\Program Files (x86)\MSBuild\14.0\bin\amd64\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva+ /reference:C:\ TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Dapper.1.50.2\lib\net451\Dapper.dll /reference:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Microsoft.ApplicationInsights.2.2.0\lib\net45 \Microsoft.ApplicationInsights.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Microsoft.CSharp.dll" /reference:C:\TeamCity\buildAgent\work \fd1026da6d1bbdb9\packages\morelinq.2.1.0\lib\net35\MoreLinq.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\mscorlib.dll" /参考:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\ Framework\.NETFramework\v4.5.2\System.Configuration.dll" /reference:"C:\Program Files ( x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\ System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.dll" /reference:"C:\Program Files (x86)\参考 Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Xml.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\UdGroup.ContractManagement.Common.dll /ruleset:C:\ TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\conf\SonarQubeRoslyn-cs.ruleset /errorlog:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\src\ContractManagement.Common\bin\Release\UdGroup.ContractManagement.Common.dll。 RoslynCA.json /subsystemversion:6.00 /target:library /warnaserror- /utf8output /analyzer:C:\Users\michael.tong\AppData\Local\Temp\.sonarqube\.static\csharp_1.22.0.1631\SonarAnalyzer-1.22。 0.1631.zip\Google.Protobuf.dll /analyzer:C:\Users\michael.tong\Ap pData\Local\Temp\.sonarqube\.static\csharp_1.22.0.1631\SonarAnalyzer-1.22.0.1631.zip\SonarAnalyzer.CSharp.dll /analyzer:C:\Users\michael.tong\AppData\Local\Temp\。 sonarqube\.static\csharp_1.22.0.1631\SonarAnalyzer-1.22.0.1631.zip\SonarAnalyzer.dll /additionalfile:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\conf\cs\SonarLint.xml /additionalfile:C :\TeamCity\buildAgent\work\fd1026da6d1bbdb9\.sonarqube\conf\\ContractManagement.Common_AnyCPU_Release_5799\ProjectOutFolderPath.txt Authentication\AuthDetails.cs Authentication\Authenticator.cs Authentication\AuthResult.cs Authentication\IAuthenticator.cs Dto\BaseRuleSet.cs Dto\ CompanyCheckResult.cs Dto\CompanyTypeEnum.cs Dto\Contract.cs Dto\ContractHeader.cs Dto\ContractSubmission.cs Dto\CreditCheckData.cs Dto\CreditCheckDecisionEnum.cs Dto\CreditCheckResult.cs Dto\CreditDecision.cs Dto\DbDataValue.cs Dto\ DatabaseLocation.cs Dto\DbMetaData.cs Dto\DbMetaDataDictionary.cs Repositories\BaseContractRepository.cs Managers\ContractManager。 cs Dto\ContractStatus.cs Dto\DbDataValueDictionary.cs Dto\FieldValueDictionary.cs Managers\ContractStatusManager.cs Managers\IContractStatusManager.cs Managers\ICreditVetRuleSet.cs Util\AppInsights.cs Util\Constants.cs Util\ContractSubmissionGenerator.cs Repositories\IContractRepository。 cs Dto\IFieldWithDependencySupport.cs Dto\ISiteFieldValidator.cs Dto\PopulatedField.cs Dto\FieldMetaData.cs Dto\StatusResponse.cs Dto\ValidatedSiteField.cs Dto\ValidationFailureType.cs Dto\ValidationRequest.cs Dto\ValidationResponse.cs Properties\AssemblyInfo。 cs Util\IContractSubmissionGenerator.cs Repositories\IEntityDataRepository.cs Repositories\IFieldMetaDataRepository.cs Repositories\QuickQuoteRepository.cs Repositories\RegistrationRepository.cs Repositories\ContractDataRepository.cs Repositories\FieldMetaDataRepository.cs Dto\EntityType.cs Util\AppConfigReader.cs Util\EnumHelper。 cs Util\Extensions.cs Repositories\IEntityRepository.cs Util\FieldDependencyHelper.cs Util\IUDLogger.cs Util\SiteDetails ConfigDecorator.cs Util\IConfigReader.cs Util\TypeHelper.cs "C:\Users\michael.tong\AppData\Local\Temp\.NETFramework,Version=v4.5.2.AssemblyAttributes.cs" ...这里的警告

(不工作 - 由 TeamCity 运行)

验证解决方案配置: 构建解决方案配置“Release|Any CPU”。 项目“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\ContractManagement.Common.sln”(1)正在构建“C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\src\ContractManagement.Common\ContractManagement.Common.csproj”(2 ) 在节点 1(默认目标)上。 核心编译: C:\Program Files (x86)\MSBuild\14.0\bin\amd64\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva+ /reference:C:\ TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Dapper.1.50.2\lib\net451\Dapper.dll /reference:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Microsoft.ApplicationInsights.2.2.0\lib\net45 \Microsoft.ApplicationInsights.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\Microsoft.CSharp.dll" /reference:C:\TeamCity\buildAgent\work \fd1026da6d1bbdb9\packages\morelinq.2.1.0\lib\net35\MoreLinq.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\mscorlib.dll" /参考:C:\TeamCity\buildAgent\work\fd1026da6d1bbdb9\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\ Framework\.NETFramework\v4.5.2\System.Configuration.dll" /reference:"C:\Program Files ( x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\ System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.dll" /reference:"C:\Program Files (x86)\参考 Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Xml.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\UdGroup.ContractManagement.Common.dll /subsystemversion:6.00 /target :library /utf8output Authentication\AuthDetails.cs Authentication\Authenticator.cs Authentication\AuthResult.cs Authentication\IAuthenticator.cs Dto\BaseRuleSet.cs Dto\CompanyCheckResult.cs Dto\CompanyTypeEnum.cs Dto\Contract.cs Dto\ContractHeader.cs Dto \ContractSubmission.cs Dto\CreditCheckData.cs Dto\CreditCheckDecisionEnum.cs Dto\CreditCheckResult.cs Dto\CreditDecision.cs Dto\DbDataValue.cs Dto\DatabaseLocation.cs Dto\DbMetaData.cs Dto\DbMetaDataD ictionary.cs Repositories\BaseContractRepository.cs Managers\ContractManager.cs Dto\ContractStatus.cs Dto\DbDataValueDictionary.cs Dto\FieldValueDictionary.cs Managers\ContractStatusManager.cs Managers\IContractStatusManager.cs Managers\ICreditVetRuleSet.cs Util\AppInsights.cs Util\ Constants.cs Util\ContractSubmissionGenerator.cs Repositories\IContractRepository.cs Dto\IFieldWithDependencySupport.cs Dto\ISiteFieldValidator.cs Dto\PopulatedField.cs Dto\FieldMetaData.cs Dto\StatusResponse.cs Dto\ValidatedSiteField.cs Dto\ValidationFailureType.cs Dto\ ValidationRequest.cs Dto\ValidationResponse.cs Properties\AssemblyInfo.cs Util\IContractSubmissionGenerator.cs Repositories\IEntityDataRepository.cs Repositories\IFieldMetaDataRepository.cs Repositories\QuickQuoteRepository.cs Repositories\RegistrationRepository.cs Repositories\ContractDataRepository.cs Repositories\FieldMetaDataRepository.cs Dto\ EntityType.cs Util\AppConfigReader.cs Util\EnumHelper.cs Util\Extensions.cs Repositories\IEntityR epository.cs Util\FieldDependencyHelper.cs Util\IUDLogger.cs Util\SiteDetailsConfigDecorator.cs Util\IConfigReader.cs Util\TypeHelper.cs "C:\TeamCity\buildAgent\temp\buildTmp\.NETFramework,Version=v4.5.2.AssemblyAttributes 。CS”

【问题讨论】:

    标签: msbuild sonarqube teamcity cakebuild


    【解决方案1】:

    经过几天的侦查工作,我找到了问题所在。根本原因是在运行 MSBuild 时没有拾取与 MSBuild 集成所需的声纳目标。

    原因是 TeamCity 构建代理作为本地系统帐户运行,这意味着它用于存储目标文件的 MSBuild 目录是:

    C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\MSBuild

    但是,SonarQube.Scanner.MSBuild.exe 是为 32 位编译的,因此在 64 位操作系统上的仿真过程中,此路径会更改为:

    C:\Windows\sysWOW4\config\systemprofile\AppData\Local\Microsoft\MSBuild
    

    但是,当 MSBuild 步骤运行时,是 64 位的,所以它会在 system32 文件夹中查找!

    您可以尝试更改运行构建代理的用户,但这不起作用。我相信这是 TeamCity Build 代理如何工作的一个怪癖。基本上,环境设置中的appData文件夹没有得到正确调整。

    我让它工作的方法是下载声纳扫描仪的源代码并编译一个 64 位版本。

    其他可能有效的选项,我现在要研究一下:

    1. 使用 32 位版本的 msbuild
    2. 手动更改指向 msbuild 用于目标的文件夹的 env 变量,使其位于 c:\windows\system32 之外的文件夹

    【讨论】:

    • 最后我选择了选项 2 并创建了以下 TeamCity 环境变量,这些变量修补了在用户帐户下运行 BuildAgent 服务时不会自动设置的怪癖。跨度>
    • env.APPDATA c:\Users\TeamCityAgent\AppData\Roaming env.LOCALAPPDATA c:\Users\TeamCityAgent\AppData\Local env.USERPROFILE c:\Users\TeamCityAgent
    • 仅供参考,此问题正在通过以下票证进行跟踪,并且应该在下一版本的 Scanner for MSBuild 中修复(当前版本为 4.4.2,因此修复版本可能为 4.5): github.com/SonarSource/sonar-scanner-msbuild/issues/465
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2017-01-05
    • 2014-12-22
    • 2013-06-02
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多