SonarQube - 安装使用调试

最近研究了下SonarQube工程,发现其如此强大,可以用于质量保证的任何阶段,刚好由于项目需要建立一个完整的基础质量保证”设施”,所以快马加鞭,赶紧安装部署了下,这里总结一些问题和经历

安装与运行

SonarQube分为两个部分:Server 和 Scanner,其中

Server:https://www.sonarqube.org/downloads/

Scanner:https://docs.sonarqube.org/display/SCAN/Analyzing+Source+Code

其余安装环境就不赘述了:MySQL 和 Java

参考这篇文章:http://blog.csdn.net/hunterno4/article/details/11687269

问题
  1. 在配置了 sonar-project.properties 之后,运行 sonar-scanner 报如下错误:
1
org.sonarqube.ws.client.HttpException: Error 500 on http://localhost:9000/api/ce/submit?projectKey=xxx&projectName=yyy : {"errors":[{"msg":"An error has occurred. Please contact your administrator."}]}

解决方法如下:

  • 查看 /logs/web.log 得知详细原因是:Packet for query is too large (6082109 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable

  • 修改 MySQL 的配置,用命令行登入执行:show VARIABLES like '%max_allowed_packet%'; SET GLOBAL max_allowed_packet=268435456;

  • 重启 MySQL 和 Sonar-Server 服务

尝试分析一个工程,发现已经成功打通的整套流程,SonarQube的高集成特性以及丰富的插件,可以根据实际项目需要丰富的定制。接下来我会围绕它打造一个后期的基础质量保障“设施”,首先来看看如何调试自定义扩展插件

扩展插件

官方给出了扩展插件的示例:https://github.com/SonarSource/sonar-custom-plugin-example,下载下来导入工程,可以清晰的看到

  • org.sonarsource.plugins.example, 插件入口目录,相当于 Main 函数的作用

  • org.sonarsource.plugins.example.hooks ,工具钩子,可以在各个阶段自定义一些需要的操作,继承自:PostJob/PostProjectAnalysisTask

  • org.sonarsource.plugins.example.languages ,自定义语言支持,继承自:AbstractLanguage

  • org.sonarsource.plugins.example.measures, 自定义质量阀的衡量标准,继承自:Metrics

  • org.sonarsource.plugins.example.rules,自定义代码规则,继承自:Sensor

  • org.sonarsource.plugins.example.settings,自定义设置,继承自:Sensor

  • org.sonarsource.plugins.example.web,自定义网页显示部分,继承自:web.xxx

以上这些自定义的各个模块,分别作用于 SonarQube 的基本流程里,即:

1
2
3
4
5
6
7
8
9
10
11
12
13
public void execute(Project project) {  
...
sensorsExecutor.execute(sensorContext);
decoratorsExecutor.execute();
persistenceManager.dump();
persistenceManager.setDelayedMode(false);
if (project.isRoot()) {
if (updateStatusJob != null) {
updateStatusJob.execute();
}
postJobsExecutor.execute(sensorContext);
}
...

首先,初始化整个分析过程,包括加载所有的分析任务,其次,分析这些任务(Sensor和Decorator),并且把结果存储到数据库,最后,执行postjob,做相关的一些分析,因此需要根据插件作用需要,可以自行在各个阶段模块中进行扩展

调试

官方提供了调试方法:https://docs.sonarqube.org/display/DEV/Build+Plugin#BuildPlugin-Debug

这里总结下步骤,避免踩坑:

  1. 在 conf/sonar.properties 中设置sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8001

  2. 将插件打包部署到 extensions/plugins 中

  3. 如果你安装了SonarQube服务,请先关掉,然后用 bin/StartSonar启动,可以检查是否出现:Listening for transport dt_socket at address: 8001

  4. 在IDE中新建远程调试,打上断点,启动调试,打开localhost:8001,此时IDE会进到debug模式

好了,学会了调试,接下来就可以进一步打造我们的插件了

如需转载,请注明出处