【发布时间】:2017-05-26 22:23:58
【问题描述】:
我们刚刚更新到 TFS 2017,我正在为我们的构建设置 SonarQube integration into pull requests。在这个过程中,我遇到了一个我似乎无法弄清楚的问题。
我们有三个构建服务器,每个服务器上都有两组构建代理。我们称它们为 BA1 和 BA2。此外,我们正在为 TFS 使用新的 SonarQube 插件,而不是引用 here 的已弃用插件。
BA2 完美运行。在生成增量分析报告和完整分析报告方面没有遇到任何问题。但是,任何使用 BA1 的构建最终都会使其在结束分析步骤的一半左右失败,并显示类似以下的消息:
ERROR: Error during SonarQube Scanner execution
org.sonar.core.util.ContextException: Unable to write message | file=E:\workingDirectory\_work\3\.sonarqube\out\.sonar\batch-report\component-5072.pb
... //long stacktrace
Caused by: java.io.FileNotFoundException: E:\workingDirectory\_work\3\.sonarqube\out\.sonar\batch-report\component-5072.pb (The directory or file cannot be created)
我很确定这不是权限问题,因为所有构建都在同一个用户帐户下运行。它运行在哪个项目或构建服务器上并不重要。使用 BA2 运行的所有作业都是成功的。使用 BA1 运行的所有作业都会因此错误而失败。我看到了一个类似的问题here,但该问题的解决方案对我不起作用。我对另一个工作排队到同一个工作区没有问题。
只是想看看之前是否有人遇到过这种情况。我检查了_diag 目录下的构建代理日志,但找不到任何有用的东西。我已经没有想法可以检查了。感谢您的任何提示。
【问题讨论】:
-
能分享一下BA1和BA2的.agent文件吗?特别要验证他们没有使用相同的 workingDirectory(即 e:\workingDirectory)
-
BA1和BA2在配置上是一样的吗,有没有在目录下找到一些pb文件?
-
如果您配置另一个构建代理,能否重现此问题?
-
@Jeroen 据我所知,唯一的区别是所有 BA1 构建的工作空间都在
E:驱动器上,而 BA2 的工作空间在D:驱动器上。所以 BA1 的工作空间类似于E:\tfs-build01-agent1\_work\,而 BA2 是 `D:\tfs-build01-agent2_work`。我还没有尝试配置另一个代理。我可以试试看是否有帮助。我只是很困惑为什么它不再工作了。在我们更新 TFS 之前,无论使用何种代理,它都可以正常工作。 -
另外,我可以在日志中看到一些项目正在写入
.sonarqube\out\.sonar目录,但它看起来像是第一次尝试将.pb文件写入.sonarqube\out\.sonar\batch-report目录使用 BA1 失败。
标签: tfs msbuild sonarqube azure-devops