Sonar 是一个很优秀的代码分析工具,可以帮助程序员们发现很多潜在的问题和BUG。
最近作者重新安装部署的Sonar的最新版,安装中遇到了很多的坑,给大家讲讲,少走弯路。
- 架构篇
SonarQube平台主要由4个组件组成:
A. SonarQube服务器:
主要包括web服务器,基于ElasticSearch的搜索服务器,计算引擎服务器。
其中,web服务器,顾明思义,就是供开发人员浏览查看代码分析结果,进行相应的配置等。 计算引擎服务器主要是处理代码分析报表并将其存储在数据库。
B. SonarQube 数据库:
存储配置信息和代码分析报表。
C. 多个Soanr插件:包括分析各种语言的插件。
D. 多个Sonar Scanner,主要运行在开发人员的代码端,可以单独部署,也可以集成在Maven,Gradle等。
架构图描述如下:
2.环境篇
对于Linux 环境,一定要检查环境
vm.max_map_count 大于等于 262144
fs.file-max 大于等于 65536
the user running SonarQube 至少能打开 65536 file descriptors
the user running SonarQube 至少能打开 2048 threads
检查上述参数的命令:
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
修改机器参数的命令:
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048
ElasticSearch注意事项
Sonar会用到ElasticSearch,因为大家知道,ElasticSearch 不支持root账号执行。
所以需要创建一个Sonar的账号。
常见的异常如下:
2018.05.23 23:39:21 ERROR es[][o.e.b.Bootstrap] Exception
java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.3.jar:5.6.3]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.3.jar:5.6.3]
同时,ElasticSearch会检查system_call_filter
在安装Sonar的过程中,需要关闭system_call_filter的检查。
步骤如下:
1>. sonar.properties
设置:
sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false"
2>. wrapper.conf
设置
wrapper.java.additional.1=-Dsonar.wrapped=true
-Dbootstrap.system_call_filter=false
3>. /sonarqube-7.1/elasticsearch/config/elasticsearch.yml
添加:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
以上是SonarQube需要特别注意的事项,其他的操作都很容易了,大家可以参考官网。
热门评论
你好,关于sonar有个问题,以java为例,假设我安装了第三方插件,为方便描述,我们称之为插件B,而sonar本身带有一个sonar way的插件,我们称之为A,我的问题是能不能再同一个项目当中既使用A的规则,也使用B的规则,如何做到?