MSBuild SonarQube Runner v1.0返回代码1"生成FxCop规则集"

时间:2015-08-06 15:06:07

标签: msbuild sonarqube sonarqube-msbuild-runner

我正在使用新的MSBuild SonarQube Runner v1.0试用SonarQube。如果我在本地安装一个新的SonarQube服务器,以下命令工作正常,我可以直接构建我的解决方案,调用'结束'命令,并将结果发布在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天了,除了继续浏览源代码之外,我还想不出其他任何事情。谢谢。

1 个答案:

答案 0 :(得分:4)

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

  1. 在为C#生成FxCop规则集时失败,因为未记录VB.NET FxCop规则集消息 - 请参阅TeamBuildPreProcessor.cs#L149TeamBuildPreProcessor.cs#L185
  2. GenerateFxCopRuleset()对C#的调用引发了WebException,导致Utilities.HandleHostUrlWebException()的调用 - 必须返回true才能无声吞下异常 - 请参阅{ {3}}
  3. 返回true而不记录任何消息的唯一路径是,如果收到HttpStatusCode.NotFound,请参阅Utilities.cs#L153
  4. 控制流程返回FetchArgumentsAndRulesets(),返回false,然后返回Execute(),同时返回false - 请参阅Utilities.cs#L158
  5. MSBuild SonarQube Runner“开始”阶段(代码中称为“预处理器”)失败 - 请参阅TeamBuildPreProcessor.cs#L106
  6. 因此,在某些时候,生成C#FxCop规则集所需的一些SonarQube Web服务会返回HTTP 404错误。

    您是否可以监控网络流量并监听失败的HTTP呼叫? [我会继续更新这个答案]

    编辑:确实,错误是由包含特殊字符的质量配置文件名称引起的。此类字符目前严重脱网,导致404。

    我在即将发布的版本中创建了以下故障单来解决此问题:Program.cs#L42