从SonarQube 5.1(MySQL)升级到5.6.6(Oracle DB)后Jenkins构建失败求助
首先明确你的核心问题:SonarQube从5.1(MySQL)升级到5.6.6(Oracle)后实例正常运行,但Jenkins构建时抛出如下错误:
[ERROR] Failed to execute goal org.source.scanner.maven:-maven-plugin:3.2:****** (default-cli) on project XXXXXXXX: Unable to load component class org..core.platform.PluginLoader: Unable to load component class org..core.platform.PluginClassl...
结合升级背景和报错信息,重点从以下几个方向排查:
Maven扫描插件版本兼容性问题
你当前使用的sonar-maven-plugin:3.2和SonarQube 5.6.6存在版本不匹配的可能性——SonarQube 5.6.x系列官方推荐的Maven扫描插件版本是3.3。版本不兼容会直接导致插件加载失败,建议先更新插件版本:
在项目pom.xml或Jenkins构建的Maven配置中修改插件版本:<plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.3</version> </plugin>同时确认Jenkins全局配置里的SonarQube服务器地址已经更新到新的5.6.6实例,没有残留旧的5.1配置。
Jenkins构建节点的工作目录问题
报错里的“Failed to create working path”提示构建节点的临时工作目录可能存在异常:- 检查Jenkins运行用户(比如
jenkins用户)对项目工作空间下的.sonar目录、以及Jenkins全局临时目录是否有实际可写权限(不要只看目录权限数字,要确认用户所属组和目录权限的匹配)。 - 检查构建节点的磁盘空间是否充足,临时目录所在分区是否已满。
- 手动在构建节点上用Jenkins运行用户创建测试文件,验证写入权限是否正常。
- 检查Jenkins运行用户(比如
SonarQube插件缓存与兼容性问题
升级后旧插件可能不兼容,而且Jenkins扫描时会依赖本地缓存的插件信息:- 登录SonarQube后台,进入「Administration > Marketplace」,检查所有已安装插件是否支持5.6.6版本,卸载掉不兼容的第三方插件或旧版本插件。
- 清理Jenkins构建节点上的Sonar缓存:删除Jenkins运行用户home目录下的
~/.sonar/cache文件夹,以及项目工作空间下的.sonar目录,避免旧缓存干扰加载。
Oracle数据库的隐性配置问题
虽然SonarQube实例正常,但Jenkins扫描时可能需要读取数据库中的插件元数据:- 检查SonarQube的
sonar.properties配置文件,确认Oracle连接参数(sonar.jdbc.url、sonar.jdbc.username、sonar.jdbc.password)正确,且使用的Oracle JDBC驱动版本符合5.6.6的要求(推荐12c及以上版本)。 - 确认数据库用户拥有读取
plugins等相关表的权限,避免扫描时权限不足导致插件信息加载失败。
- 检查SonarQube的
Jenkins Sonar插件版本匹配问题
检查Jenkins上安装的「SonarQube Scanner」插件版本,确保它和SonarQube 5.6.6兼容——SonarQube 5.6.x对应的Jenkins Sonar插件推荐版本是2.6左右,过高的版本可能会出现兼容性问题。可以在Jenkins的「插件管理」中调整插件版本后重试构建。
内容的提问来源于stack exchange,提问作者SudhirD

