使用ADO Task v6执行Sonar扫描失败,请求排查
ADO SonarQube Task v6扫描失败,v5正常:归档提取错误
问题描述
使用最新版ADO SonarQube Task v6执行代码扫描时失败,但切换回v5版本可正常运行。核心错误表现为提取SonarQube服务器提供的JRE归档时,找不到指定的classes.jsa文件。
错误日志
/azp/_work/_tasks/SonarQubeAnalyze_6d01813a-9589-4b15-8491-8164aeb38055/6.3.2/sonar-scanner/bin/sonar-scanner 11:25:43.109 INFO Scanner configuration file: /azp/_work/_tasks/SonarQubeAnalyze_6d01813a-9589-4b15-8491-8164aeb38055/6.3.2/sonar-scanner/conf/sonar-scanner.properties 11:25:43.116 INFO Project root configuration file: NONE 11:25:43.147 INFO SonarScanner CLI 6.1.0.4477 11:25:43.149 INFO Java 17.0.12 Ubuntu (64-bit) 11:25:43.150 INFO Linux 5.4.0-189-generic amd64 11:25:43.160 DEBUG Scanner max available memory: 15 GB 11:25:43.200 DEBUG uname -m returned 'x86_64' 11:25:43.202 DEBUG Create: /home/agent/.sonar/cache 11:25:43.203 INFO User cache: /home/agent/.sonar/cache 11:25:43.204 DEBUG Create: /home/agent/.sonar/cache/_tmp 11:25:43.553 DEBUG Loaded [415] system trusted certificates 11:25:43.828 DEBUG --> GET https://sonarprod.cloud.aero/api/v2/analysis/version 11:25:44.010 DEBUG <-- 200 https://sonarprod.cloud.aero/api/v2/analysis/version (182ms, 12-byte body) 11:25:44.013 INFO JRE provisioning: os[linux], arch[x86_64] 11:25:44.017 DEBUG --> GET https://sonarprod.cloud.aero/api/v2/analysis/jres?os=linux&arch=x86_64 11:25:44.025 DEBUG <-- 200 https://sonarprod.cloud.aero/api/v2/analysis/jres?os=linux&arch=x86_64 (8ms, unknown-length body) 11:25:44.926 INFO EXECUTION FAILURE 11:25:44.927 INFO Total time: 1.870s ##[error]11:25:44.928 ERROR Error during SonarScanner CLI execution java.lang.IllegalStateException: Failed to extract archive at org.sonarsource.scanner.lib.internal.JavaRunnerFactory.extractArchive(JavaRunnerFactory.java:200) at org.sonarsource.scanner.lib.internal.JavaRunnerFactory.getJreFromServer(JavaRunnerFactory.java:145) at org.sonarsource.scanner.lib.internal.JavaRunnerFactory.createRunner(JavaRunnerFactory.java:85) at org.sonarsource.scanner.lib.internal.ScannerEngineLauncherFactory.createLauncher(ScannerEngineLauncherFactory.java:53) at org.sonarsource.scanner.lib.ScannerEngineBootstrapper.bootstrap(ScannerEngineBootstrapper.java:118) at org.sonarsource.scanner.cli.Main.analyze(Main.java:75) at org.sonarsource.scanner.cli.Main.main(Main.java:63) Caused by: java.nio.file.NoSuchFileException: /home/agent/.sonar/cache/bcb1b7b8ad68c93093f09b591b7cb17161d39891f7d29d33a586f5a328603707/jre8181025238927046063/jdk-17.0.11+9-jre/lib/server/classes.jsa
错误原因分析
Task v6新增了JRE自动预配功能,会从SonarQube服务器下载对应操作系统/架构的JRE并缓存到Agent本地。但缓存目录中的JRE归档可能损坏,或提取过程中文件丢失,导致扫描时找不到classes.jsa文件。
解决方案
1. 清理Agent本地Sonar缓存
直接删除Agent上的Sonar缓存目录,让Task重新下载完整的JRE归档:
rm -rf /home/agent/.sonar/cache
下次运行Task v6时,会重新从SonarQube服务器下载并提取JRE,避免损坏的缓存文件影响扫描。
2. 禁用JRE自动预配(强制使用Agent本地Java)
如果不想依赖SonarQube服务器提供的JRE,可以在ADO Task配置中添加参数,强制使用Agent已安装的Java版本:
- 编辑SonarQube Analyze Task的配置
- 在Additional Scanner Arguments中添加:
替换sonar.scanner.javaHome=/path/to/your/local/java/path/to/your/local/java为Agent上已安装的Java路径(例如/usr/lib/jvm/java-17-openjdk-amd64)
3. 检查SonarQube服务器JRE包完整性
如果多个Agent都出现此问题,可能是SonarQube服务器上存储的JRE包本身损坏。可登录SonarQube服务器,检查对应JRE归档文件的MD5或SHA校验值,确保文件未损坏。
内容的提问来源于stack exchange,提问作者vidyak
相关产品推荐
相关产品推荐

