TeamCity集成SonarQube代码分析构建失败求助
我之前在TeamCity环境下也碰到过几乎一模一样的问题,排除了官方提示的三个原因后还是卡壳,后来通过几个方向的排查解决了,分享给你试试:
检查SonarQube工具链版本兼容性
你用的是SonarQube 5.3,这是2016年发布的老版本,而MSBuild 15.0是VS2017对应的版本。SonarQube对MSBuild的支持是逐步迭代的,旧版Runner可能无法正确适配MSBuild 15的构建流程。建议你确认MSBuild.SonarQube.Runner.exe的版本是否支持MSBuild 15.0——通常SonarQube 6.x及以上版本的Runner才对MSBuild 15有完善支持,你可以先尝试升级SonarQube服务器和对应的Runner版本,或者临时降级到MSBuild 14.0(VS2015)验证是否是版本兼容问题。确认TeamCity各步骤的工作目录完全一致
虽然你在步骤里加了cd %projectDirectory%,但TeamCity每个构建步骤默认可能有独立的工作目录设置。你可以进入每个步骤的「高级」选项,查看「工作目录」是否都明确设置为%projectDirectory%。如果begin步骤在A目录生成了临时文件,而build步骤在B目录执行,那end步骤自然找不到ProjectInfo.xml。检查MSBuild构建日志中的SonarQube痕迹
去TeamCity的build步骤日志里搜索SonarQube或者ProjectInfo.xml关键词:- 如果看不到任何SonarQube相关的任务输出,说明
begin步骤没有成功向MSBuild注入分析任务,大概率是Runner版本和MSBuild不兼容,或者begin参数有误。 - 如果能找到生成ProjectInfo.xml的日志,记下它的生成路径,再去end步骤的日志里看是否在同一个路径下查找这个文件——如果路径不一致,就是工作目录的问题。
- 如果看不到任何SonarQube相关的任务输出,说明
验证begin步骤的参数完整性
确保begin命令里包含了必要的参数,比如/d:sonar.projectKey、/d:sonar.projectName、/d:sonar.projectVersion这些核心参数,缺少这些可能导致分析任务没有正确初始化,进而不生成ProjectInfo.xml。脱离TeamCity本地复现
在本地机器上用同样的命令序列(begin -> MSBuild -> end)手动执行,看是否能成功:- 如果本地成功,说明问题出在TeamCity的环境配置上,比如代理的环境变量、用户权限(比如构建代理用户没有读写项目目录的权限)。
- 如果本地也失败,那肯定是工具链版本不匹配或者命令参数的问题,建议先升级SonarQube Runner到对应MSBuild 15的版本再试。
检查构建代理的权限
TeamCity构建代理运行的用户账号需要对%projectDirectory%有完整的读写权限,包括SonarQube Runner生成的临时目录(通常在项目目录下的.sonarqube文件夹)。如果权限不足,可能导致MSBuild无法写入ProjectInfo.xml,或者end步骤无法读取它。
内容的提问来源于stack exchange,提问作者K V

