Jenkins向SonarQube提交代码报错:Project home目录异常求助
Jenkins SonarQube扫描失败:路径重复错误
问题描述
在Jenkins执行SonarQube扫描时出现失败,核心报错如下:
java.lang.IllegalStateException: Project home必须是已存在的目录:/C:/Jenkins/workspace/Generali/C:/Jenkins/workspace/Generali at org.sonarsource.scanner.api.Dirs.initProjectDirs(Dirs.java:51) at org.sonarsource.scanner.api.Dirs.init(Dirs.java:41) at org.sonarsource.scanner.api.EmbeddedScanner.initAnalysisProperties(EmbeddedScanner.java:158) at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:137) at org.sonarsource.scanner.cli.Main.execute(Main.java:112) at org.sonarsource.scanner.cli.Main.execute(Main.java:75) at org.sonarsource.scanner.cli.Main.main(Main.java:61) ERROR: SonarQube扫描器以非零代码退出:1
错误原因分析
从日志和报错信息可以看出两个关键问题:
- 路径格式不匹配:你的Jenkins运行在Linux节点(日志显示
Linux 3.10.0-957.12.2.el7.x86_64 amd64),但你指定的sonar.projectBaseDir是Windows格式的路径C:/Jenkins/workspace/Generali,Linux系统无法识别这种路径。 - 路径重复拼接:报错里的路径是
/C:/Jenkins/workspace/Generali/C:/Jenkins/workspace/Generali,说明SonarScanner把指定的路径和当前工作区路径重复拼接了——大概率是Jenkins已经自动设置了工作区路径,你额外指定sonar.projectBaseDir导致冲突。
解决方案
按照以下步骤修复:
- 移除重复的
sonar.projectBaseDir参数:Jenkins在执行任务时会自动切换到当前工作目录,不需要手动指定该参数。从扫描命令中删除-Dsonar.projectBaseDir=C:/Jenkins/workspace/Generali这一项。 - 若必须指定工作区,使用Linux格式路径:如果确实需要手动指定,比如工作区有特殊结构,请使用Linux风格路径,例如
-Dsonar.projectBaseDir=/jenkins/workspace/Generali。 - 验证修改后的扫描命令:调整后的命令应该类似这样:
/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/ADOP_Sonar/bin/sonar-scanner -X -Dsonar.host.url=https://alm.accenture.com/sonar -Dsonar.language=java "-Dsonar.projectName=Connected Vehicle Platform Sonar" -Dsonar.sourceEncoding=UTF-8 -Dsonar.projectKey=adop:CVPIFBNE:cvp -Dsonar.java.binaries=target/classes -Dsonar.sources=src/main/java - 额外检查:确认Jenkins节点上的工作区目录真实存在,且扫描用户拥有该目录的读写权限;另外你的Scanner版本(4.2.0)和SonarQube服务器版本(7.9.1)是兼容的,这部分无需调整。
内容的提问来源于stack exchange,提问作者Raghunath Dhara
相关产品推荐
相关产品推荐

