4

我正在使用新的 MSBuild SonarQube Runner v1.0 试用 SonarQube。如果我在本地安装新的 SonarQube 服务器,则以下命令可以正常工作,之后我可以直接构建我的解决方案,调用“end”命令,并将结果发布到 SonarQube:

MSBuild.SonarQube.Runner.exe begin /key:TestKey /name:TestName /version:1.0.0.0

但是,如果我对存在于内部网络上的现有 SonarQube 服务器运行它,它总是返回退出代码 1:

15:32:40 Creating config and output folders... 15:32:40 Creating directory: c:\Test\MSBuild.SonarQube.Runner-1.0.itsonar\.sonarqube\conf 15:32:40 Creating directory: c:\Test\MSBuild.SonarQube.Runner-1.0.itsonar\.sonarqube\out 15:32:41 Generating the FxCop ruleset: c:\Test\MSBuild.SonarQube.Runner-1.0.itsonar\.sonarqube\conf\SonarQubeFxCop-cs.ruleset Process returned exit code 1

似乎将很多依赖项下载到 /.sonarqube 中,因此与服务器的通信不是问题

我尝试过的事情:

  • 检查了 access.log、server.log 和事件日志
  • 将现有服务器升级到 v5.1.2(使用指南进行全新安装)
  • 将 sonar-csharp-plugin 升级到 v4.1
  • 右键单击服务器上的所有 .jar 文件并确保它们未被阻止
  • 直接在服务器上尝试了跑步者
  • (进行中)尝试调试源代码(在预处理步骤中某处发生:success返回为true,但错误代码为 1)
  • 在服务器上禁用 UAC 并重新启动
  • 在服务器和客户端上重新安装 JRE,确保JAVA_HOME两者PATH和注册表都设置正确

任何帮助或指针都被广泛接受。我已经坚持了 2 天,除了继续浏览源代码之外,我想不出任何其他尝试。谢谢你。

4

1 回答 1

4

这是一个棘手的问题!查看代码,我只看到一条可以产生此输出的路径:

  1. 为 C# 生成 FxCop 规则集时失败,因为未记录 VB.NET FxCop 规则集消息 - 请参阅TeamBuildPreProcessor.cs#L149TeamBuildPreProcessor.cs#L185
  2. GenerateFxCopRuleset()对 C#的调用抛出了一个WebException,导致调用Utilities.HandleHostUrlWebException()- 必须返回true以使异常被静默吞下 - 请参阅Utilities.cs#L153
  3. 唯一返回true而不记录任何消息的路径是如果HttpStatusCode.NotFound收到 a - 请参阅Utilities.cs#L158
  4. 控制流返回到FetchArgumentsAndRulesets()返回false,然后返回到Execute()返回false- 请参阅TeamBuildPreProcessor.cs#L106
  5. MSBuild SonarQube Runner“开始”阶段(在代码中称为“预处理器”)失败 - 请参阅Program.cs#L42

因此,在某些时候,C# FxCop 规则集生成所需的某些 SonarQube Web 服务会返回 HTTP 404 错误。

你能监控你的网络流量并监听失败的 HTTP 调用吗?[之后我会继续更新这个答案]

编辑:确实错误是由包含特殊字符的质量配置文件名称引起的。这些字符目前被严重的 URL 转义,导致 404。

我创建了以下票证以在即将发布的版本中解决此问题:http: //jira.sonarsource.com/browse/SONARMSBRU-125

于 2015-08-06T19:26:20.167 回答