【发布时间】:2017-08-24 07:58:46
【问题描述】:
美好的一天 今天我用 ms build runner 和 mercurial scm provider 设置了 sonarqube 我有下一个存储库结构(示意图):
<ROOT>
-.hg
-src
----prj.infrastructure
----prj.domain
----prj.application
----prj.sln
我使用下一个命令进行运行分析:
"%env.SonarMsBuildRunner%\MSBuild.SonarQube.Runner" begin /n:prj /k:prj /v:1.0
"%env.MsBuildLocation%\msbuild" src\prj.sln /p:Configuration=Debug
"%env.SonarMsBuildRunner%\msbuild.sonarqube.runner" end
所有分析都运行良好,但 scm 不起作用(我看到类似“缺少以下文件的责任信息:”这样的消息)
当我看到生成的 sonar-project.properties 时,我发现问题出在 projectBaseDir 中 - 它分别为解决方案中的每个项目生成
我尝试在命令行中指定 /d:sonar.projectBaseDir=... 但没有更改 - 它完全被忽略
所以我的问题是 - 我可以将 ms build runner 和 scm 提供程序与我的存储库结构一起使用吗?
更新 1 我在我的脚本中添加了详细标志.. 现在我使用下一个命令运行分析:
MSBuild.SonarQube.Runner begin /n:projectName /k:projectKey /v:1.0 /d:sonar.scm.enabled=true /d:sonar.scm.provider=hg /d:sonar.projectBaseDir=d:\work\project1 /d:sonar.verbose=true
msbuild project1\src\solution.sln /p:Configuration=Debug
msbuild.sonarqube.runner end
在日志中我可以看到以下消息:
[14:18:20] : [Step 4/4] 14:18:20.403 DEBUG: Working directory: D:\work\project1\src\
[14:18:20] : [Step 4/4] 14:18:20.416 DEBUG: Executing: hg blame -w -v --user --date --changeset API/AssignmentsController.cs
[14:18:20] : [Step 4/4] 14:18:20.423 DEBUG: Executing: hg blame -w -v --user --date --changeset API/Commands/ImportCommand.cs
[14:18:20] : [Step 4/4] 14:18:20.424 DEBUG: Executing: hg blame -w -v --user --date --changeset API/Dto/Assignment.cs
[14:18:20] : [Step 4/4] 14:18:20.600 DEBUG: The mercurial blame command [hg blame -w -v --user --date --changeset API/AssignmentsController.cs] failed: abort: no repository found in 'D:\work\project1\src\' (.hg not found)!
[14:18:20] : [Step 4/4]
这是正确的 - 在文件夹 d:\work\project1\src 中没有 .hg 目录,因为它位于 d:\work\project1
更新2
好的,最后我发现我的错误...在构建机器文件夹上 .hg 因某些原因丢失...
【问题讨论】:
-
您的项目在哪里? SonarQube 根项目 baseDir 被计算为您的解决方案引用的所有项目的共同祖先。
-
在每个 prj.* 位于 csproj 文件 foreach 模块中,我还找到了有关共同祖先的信息,但在生成的 .properties 文件中我可以看到 basedir 设置为 src\prj.infrastructure, src\prj .domain 等等...但事件共同祖先不是我的情况的答案 - 因为共同祖先是 src,而 .hg 目录位于 src 的父级...