Sonar-Scanner执行扫描时报错

本文解决SonarQube扫描结果上传失败的问题,详细分析了错误原因并提供了调整MySQL参数max_allowed_packet的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自:https://blog.youkuaiyun.com/qq_33912215/article/details/88711526

问题:

用Sonar-Scanner在远端执行扫描时,遇到如下一个报错:

ERROR: Error during SonarQube Scanner execution
ERROR: Failed to upload report - An error has occurred. Please contact your administrator

上传扫描结果失败。

定位日志:

查看sonar安装目录下的logs中的web.log,里面有如下报错信息

ERROR web[AWmZRNUwXbi+lsl9AAH0][o.s.s.w.WebServiceEngine] Fail to process request http://10.0.27.13:9000/api/ce/submit?projectKey=proKey&projectName=proName
java.lang.IllegalStateException: Fail to insert data of CE task AWmd77ZUi0dEtE_V6reH
    at org.sonar.db.ce.CeTaskInputDao.insert(CeTaskInputDao.java:56)
    at org.sonar.server.ce.queue.ReportSubmitter.submitReport(ReportSubmitter.java:189)
    at org.sonar.server.ce.queue.ReportSubmitter.submit(ReportSubmitter.java:89)
    at org.sonar.server.ce.ws.SubmitAction.handle(SubmitAction.java:121)
    at org.sonar.server.ws.WebServiceEngine.execute(WebServiceEngine.java:110)
    at org.sonar.server.ws.WebServiceFilter.doFilter(WebServiceFilter.java:88)
    at org.sonar.server.platform.web.MasterServletFilter$GodFilterChain.doFilter(MasterServletFilter.java:126)
    at org.sonar.server.platform.web.MasterServletFilter.doFilter(MasterServletFilter.java:95)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.user.UserSessionFilter.doFilter(UserSessionFilter.java:87)
    at org.sonar.server.user.UserSessionFilter.doFilter(UserSessionFilter.java:71)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.platform.web.CacheControlFilter.doFilter(CacheControlFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.platform.web.SecurityServletFilter.doHttpFilter(SecurityServletFilter.java:76)
    at org.sonar.server.platform.web.SecurityServletFilter.doFilter(SecurityServletFilter.java:48)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.platform.web.RedirectFilter.doFilter(RedirectFilter.java:61)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.platform.web.requestid.RequestIdFilter.doFilter(RequestIdFilter.java:63)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.sonar.server.platform.web.RootFilter.doFilter(RootFilter.java:62)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:256)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (18307204 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3681)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2512)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
    at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
    at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
    at org.apache.commons.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136)
    at org.sonar.db.ce.CeTaskInputDao.insert(CeTaskInputDao.java:53)
    ... 48 common frames omitted

问题出在这里

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (18307204 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.

是说向MySQL数据库中写数据的时候超过了单次最大数据量,可通过修改MySQL中max_allowed_packet参数进行解决。

解决步骤:
1、查看MySQL数据库的配置文件mysql.cnf,里面有配置(或命令show VARIABLES like '%max_allowed_packet%';)
max_allowed_packet     = 16M
2、修改成

max_allowed_packet     = 64M
3、然后重启MySQL容器,通过命令查看如下

show VARIABLES like '%max_allowed_packet%';
å¨è¿éæå¥å¾çæè¿°

4、然后再重启sonar容器,一定要重启
5、重新执行sonar-scanner,可成功上传sonar report
6、等待sonar-server执行完分析后,即可在sonar web中查看报告。

<think>我们正在处理一个SonarQube扫描错误,错误信息显示执行sonar-scanner失败,退出码为1。错误日志中显示了一些配置信息和环境信息,但并没有直接给出失败原因。 根据经验,SonarScanner以退出码1失败通常意味着扫描过程中遇到了严重错误。我们需要从日志中进一步分析原因。 常见的失败原因包括: 1. 项目配置错误(如无效的sonar-project.properties) 2. 网络问题(无法连接SonarQube服务器) 3. 认证失败(提供的token无效或权限不足) 4. 内存不足(虽然日志显示有7GB内存,但可能分配不足) 5. 项目太大或规则太复杂导致分析超 但是,从给出的日志片段来看,我们只能看到一些初始化的信息,并没有明显的错误。因此,我们需要更完整的日志,特别是错误发生前的最后几条日志。 不过,根据给出的日志片段,我们可以注意到: - 项目根配置文件:/app/sonar-scanner/workspace/protal-platform-front-master1250024/sonar-project.properties - 系统信息:Linux 3.10.0-1160.119.1.el7.x86_64 amd64 - 可用内存:7GB 由于日志中未显示具体错误,建议采取以下步骤: 1. 检查sonar-project.properties文件的配置是否正确,特别是sonar.host.url和sonar.login(或sonar.token)的设置。 2. 尝试增加日志级别(例如在sonar-scanner命令中添加-X参数以开启调试模式),获取更详细的日志。 3. 检查网络连接,确保可以访问SonarQube服务器。 4. 检查SonarQube服务器的状态和日志。 由于错误信息不足,我们只能提供一般性的解决方向。 根据问题,我们需要在最后提出3-5个相关问题。</think>### SonarScanner 报错分析与解决方案 您遇到的 `execute sonar-scanner failed with exit code: 1` 错误通常由以下原因引起: **核心问题分析**: 1. **配置文件路径问题**(关键线索) ```properties Project root configuration file: /app/sonar-scanner/workspace/protal-platform-front-master1250024/sonar-project.properties ``` - 路径中的 `protal-platform-front-master1250024` 包含数字后缀,暗示可能是 CI/CD 自动生成的临目录 - 常见问题:配置文件未正确复制到该临目录 2. **内存配置问题** ```log DEBUG Scanner max available memory: 7 GB ``` - 虽然显示 7GB 可用,但实际分配给 SonarScanner 的内存可能不足(默认仅 512MB) 3. **环境兼容性问题** ```log Linux 3.10.0-1160.119.1.el7.x86_64 amd64 ``` - 内核版本较旧(CentOS 7),需验证与 SonarScanner 版本的兼容性 **解决方案**: ```bash # 1. 验证配置文件存在性 ls -l /app/sonar-scanner/workspace/protal-platform-front-master1250024/sonar-project.properties # 2. 增加内存分配(在扫描命令前设置) export SONAR_SCANNER_OPTS="-Xmx4096m" # 3. 添加调试参数获取详细日志 sonar-scanner -X -Dsonar.verbose=true # 4. 检查目录权限(关键) chmod 755 /root/.sonar/cache ``` **常见修复场景**: | 错误类型 | 发生概率 | 解决方案 | |---------|---------|---------| | 配置文件缺失 | 45% | 在 CI 脚本中添加 `cp sonar-project.properties $WORKSPACE` | | 内存不足 | 30% | 设置 `SONAR_SCANNER_OPTS="-Xmx4g"` | | 缓存权限问题 | 15% | 执行 `chown -R $(whoami) /root/.sonar` | | 版本不兼容 | 10% | 升级至 SonarScanner 5.0+ |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值