最近研究了下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
问题
在配置了 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
这里总结下步骤,避免踩坑:
在 conf/sonar.properties 中设置sonar.web.javaAdditionalOpts=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8001
将插件打包部署到 extensions/plugins 中
如果你安装了SonarQube服务,请先关掉 ,然后用 bin/StartSonar启动,可以检查是否出现:Listening for transport dt_socket at address: 8001
在IDE中新建远程调试,打上断点 ,启动调试,打开localhost:8001 ,此时IDE会进到debug模式
好了,学会了调试,接下来就可以进一步打造我们的插件了