sonarqube

   了解sonarqube分析步骤

       我们在使用sonarqube的时候,会遇到这样的问题。为什么我本地扫描显示执行成功,但是在sonarqube平台界面上看到的信息还是前一次的内容。

       比如我通过mvn clean package sonar:sonar,mvn编译执行日志中已经显示执行成功,我通过提示跳转链接http://ip:9000/sonarqube/api/ce/task?id=AVo_WHJYU5rNTJ7ZmiZq去sonarqube平台访问,结果展示的却并不是想要的当次新扫描的结果信息。然后你会看到sonarqube对应跳过去的项目的界面上有一个提示,提示当前项目在后台运行。为什么本地扫描提示明明是构建成功,并且跳转sonarqube的档次task链接都发出来了,但是访问过去后状态却提示我是PENGDING,SonarQube网页界面上也看不到当次扫描的最新报告。

       针对这个问题,就需要了解下sonarqube分析步骤。

sonarqube分析分为两个步骤:

  1. SonarQube客户端工具在你的本地代码上运行,编译分析报告,然后将其提交给sonarqube服务器。
  2. 分析报告在服务器端处理,并在数据库中更新对应项目数据。

步骤#1同步进行。步骤2是异步进行的。

       所以,在相关的后台任务完成之前,分析尚未完成。即使SonarScanner的日志显示出来EXECUTION SUCCESS,在完成后台任务之前,分析结果也不会在SonarQube项目中显示。SonarScanner完成对代码的分析之后,分析结果(源,问题,指标)(分析报告)将发送到SonarQube Server,由Compute Engine进行最终处理。分析报告按顺序排队和处理。

       在SonarQube平台上,我们可以在后台任务中看到本地扫描对应的项目的状态,当指定项目的服务器端的分析/报告处于PENDING状态时,这意味着它已排队并等待处理。当分析/报告移至IN_PROGRESS时,表示它已经到达队列的开头,并且正在服务器端进行集成。这种集成不是立即发生的。需要计算对应项目的汇总指标和更新对应项目数据库数据。另外项目的大小和服务器可用的资源,会影响它的执行时长。

要查看处理队列中正在发生的事情,请查看管理>项目>后台任务,关于后台任务,如果想要了解更多一点,可以访问:https://docs.sonarqube.org/latest/analysis/background-tasks/

       当我们接入sonarqube平台越来越多,尤其是需要获取当次执行的quality gates,这时候可能会出现同一时间由于并发提交到sonarqube平台的项目量大,造成后台任务区项目堵塞,大量项目状态显示为PENDING,并且等待好几个小时后,状态依然是排队等待。这时候该如何去做处理,或者该如何配置操作,以防止这个问题的出现。

具体操作见:https://docs.sonarqube.org/latest/instance-administration/monitoring/ 菜单下Memory settings,对$SONARQUBE-HOME/conf/sonar.properties文件进行设置。

按需设置,sonar.ce.javaOpts、sonar.search.javaOpts、sonar.web.javaOpts。

关于sonarqube平台后台任务分析时间长,想了解的可以看这篇文章:https://docs.sonarqube.org/latest/instance-administration/compute-engine-performance/

 

存一些链接:

关于简单解释sonarqube架构的https://zhuanlan.zhihu.com/p/38291578

关于获取扫描状态的https://xbuba.com/questions/45693418

官方文档(很全很值得看的文档,从细节到插件开发,规则开发都有):https://docs.sonarqube.org/

一套整理的老的sonarqube指标:https://www.cnblogs.com/ioufev/articles/12693967.html

sonarqube论坛,可以在这里快速查找其他人遇到的问题,或快速提问:https://community.sonarsource.com/

 

你可能感兴趣的:(sonarqube)