应用介绍:sonarqube是一个用于代码质量管理的开源平台,用于管理源代码的质量通过插件形式;可以支持包括Java、C#/C++、PL/SQL、Cobol、javascrip、Groovy等等二十几种编程语言的代码质量管理与检测;
Sonarqube官网:https://www.sonarqube.org/
环境:Java环境:jdk1.8+
Mysql数据库:mysql5.6+
系统:centos6.9
安装步骤:
官方文档:https://docs.sonarqube.org/display/SONAR/Installing+the+Server
官方下载:https://www.sonarqube.org/downloads/
1、下载及准备:
[root@dxm-oss02 src]#pwd
/usr/local/src
[root@dxm-oss02 src]#wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.zip
[root@dxm-oss02 src]#unzip sonarqube-6.7.zip
[root@dxm-oss02 src]#useradd sonar //新建一个普通用户,然后用普通用户启动sonarqube服务
[root@dxm-oss02 src]#chown -R sonar. Sonarqube-6.7
[root@dxm-oss02 src]#vim /etc/sysctl.conf //增加下面这行,不然启动sonarqube的时候会报错
vm.max_map_count=262144
[root@dxm-oss02 src]#sysctl -p //使配置生效
首先创建数据库和用户密码
>CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
>grant all privileges on sonar.* to 'sonar'@'%' identified by 'sonar123654';
>GRANT ALL ON sonar.* TO ‘sonar’@’localhost’ IDENTIFIED BY ‘sonar123654’;
>flush privileges;
下面进入到sonarqube的主目录:
2、编辑sonarqube和elasticsearch的配置文件:
(1) 、首先编辑sonarqube的配置文件:$sonarqube-6.7/conf/sonar.properties
(2) 、修改elasticsearch配置文件:$sonarqube/elasticsearch/config/elasticsearch.yml
修改这两行配置的原因是:在启动sonarqube的时候它会先启动elasticsearch服务,然而没有做上面两行修改的话,会报下面这个错误:
ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your
configuration or disable system call filters at your own risk
报这个错的原因是:这是在因为Centos6不支持SecComp,而ES5.2.0以上版本默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
3、运行脚本启动服务:
[root@dxm-oss02
sonarqube-6.7]#su sonar ./bin/linux-x86-64/sonar.sh start
//以普通用户起服务,不然es启动会报错,用户:console、start、status、stop、restart
[root@dxm-oss02
sonarqube-6.7]#su sonar ./bin/linux-x86-64/sonar.sh status
注意:这里立即查看状态,短时间内意义不大,因为一开始显示running,并不代表会一定在后面的时间内running!也就是说,在启动彻底完成前不可信!什么叫启动"彻底完成"? 见下面:
这里全部启动成功了才真的启动成功了!
再次确认下:
至此,sonarqube就启动成功了。
排错说明:可以先跟着sonar.log日志,如果报了es错误,可以去查看es.log;如果报了web错误,那么就是查看web.log。我在安装的时候,遇见了"root用户无法启动elasticsearch问题","mysql连接问题","版本太低问题",或"内存溢出"...都可以在日志里有迹可寻。(es.log,web.log跟sonar.log在同一个目录下)
注意:启动成功后需在防火墙和腾讯云开启相应的端口外网才可访问
4、登入web端:在浏览器输入:http://ip:port
默认登入账号和密码:admin/admin
登入后会先叫你生成一个token:
然后还得在maven的settings.xml设置sonar信息:$MAVEN_HOME/conf/settings.xml
<profiles>
<profile>
<id>sonar</id>
<properties>
<sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>
<sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar123654</sonar.jdbc.password>
<sonar.host.url>http://localhost:9090</sonar.host.url>
<!--Sonar服务器访问地址-->
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>sonar</activeProfile>
</activeProfiles>
配置完保存,退出!
5、进到项目里有pom.xml同级目录下,执行下面命令进行代码分析,分析结果会在web客户端显示
mvn sonar:sonar \
-Dsonar.host.url=http://ip:9090 \
-Dsonar.login=feb1256d8b16847ae9a9c4340d5ac759f4f72a3d
这个命令就是刚才生成token那里复制过来的。我在进行分析的时候出现了下面这个错误:
[ERROR] Failed to execute goalorg.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar
(default-cli) on project qishi: Error 500 on
http://sonar/api/ce/submit?projectKey=com.xxx:xxx&;projectName=xxx :
{"errors":[{"msg":"An error has occurred. Please
contact your administrator"}]} -> [Help 1] //上传分析报告失败
通过查看sonarqube的web.log发现是mysql配置项max_allowed_packet的值过小
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for
query is too large (12774723 > 4194304). You can change this value on the
server by setting the max_allowed_packet' variable. at
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3671) at
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2508) at
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673) at
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549) at
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
解决方案:
在mysql配置文件/etc/my.cnf里[mysqld]添加下面这行配置并重启mysql
max_allowed_packet=500M
重启完mysql后把sonar也重启下,否则虽然数据库配置已变更,但对sonarqube的数据库连接不会生效。
6、添加中文插件:
去这个网站下载对应版本的中文包:
https://github.com/SonarQubeCommunity/sonar-l10n-zh
然后把中文包拷贝到$sonarqube-6.7/extensions/plugins/目录下,并重启sonar即可
重启完重新进行扫描,得到结果如下: