我们都知道,sonar是用来做代码的质量检测的,并且支持多种语言,之前看到很多地方写搭建sonar,就觉的应该很好搭建,然后昨天自己试着搭建了一下,发现自己真的是想的太简单了,有些坑,还是写出来让大家看看,不要再掉进去了。
准备工作:下载sonar: https://www.sonarqube.org/downloads/ 我下载了一个6.7.7的版本,刚开始我下了最新的8.0的版本,但是一直报错:mysql.driver的报错,然后我还是用了一个稳定版本。
我的环境:ubuntu (本来想找centos的,但是先生买了阿里云的机器,还是ubuntu,所以我也就将就用了,如果你的是centos的,记得修改下安装命令就可以了)
1.安装mysql ,安装好以后,用mysql -V (V大写)查一下版本,如下:
安装好mysql以后,在数据库中创建sonar用户:操作如下:
MySQL> CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar123';
MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';
上面主要做的事情就是:为sonar 创建一个数据库和使用这个数据库的用户,并进行授权
mysql版本要等于5.6或者5.6以上,否则sonar无法启动
2.在opt目录下创建一个softs文件夹,将下载的sonar zip包解压到该目录下。
unzip sonarqube-6.7.7.zip
然后修改/opt/softs/sonarqube-6.7.7/conf/sonar.properties 文件,目前我只配置了一下几项:
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
sonar.web.context=
sonar.web.context=
3.使用sonar用户启动sonar,否则会报es的错(重点:因为安全问题elasticsearch 不让用root用户直接运行)
adduser sonartest #创建sonar用户
passwd 123456 #创建sonar用户的密码
【 原来我写的是:chown -R sonartest:123456 sonarqube-6.7.7 #给sonar目录赋权限 (这里范了一个大错,用户组写成了密码,难怪一直报es的错,害我调试了好久)】
chown -R sonartest:sonartest sonarqube-6.7.7 #给sonar目录赋权限 【这里很重要】
su sonartest #切换到sonar用户
进入到/opt/softs/sonarqube-6.7.7/bin/linux-x86-64目录下,
执行./sonar.sh restart 来启动sonar
(1)es报错:参考https://blog.csdn.net/zdyueguanyun/article/details/79447260
(2)这里我还遇到一个问题,./sonar.sh restart的时候报错了,说temp下的一个yml文件禁止访问,然后我进入/opt/softs/sonarqube-6.7.7/temp,执行ls -all 发现有写文件还是root权限的,我怀疑可能是我没切换用户的时候执行restart生成的,这时只需要再执行一次 “chown -R sonartest:sonartest sonarqube-6.7.7”就可以了。(这里已经不需要了,因为我上面把赋权限写错了,所以如果有问题,多考虑下是不是权限的问题)
(3)还有一个问题,restart的时候报错JVM失败的问题,是因为我切换用户后没有执行source /etc/profile使jdk环境变量生效,这很简单,再执行一次 “ source /etc/profile就可以了”
这里我查了资料,(切换用户,/etc/profile中的环境变量不生效了)解决办法有如下:
(3.1)办法1:用su命令切换用户的时候,/etc/profile会失效,应该使用su - 用户名。
(原理:https://www.cnblogs.com/liujiangyi/p/9455960.html)
(3.2)办法2:/etc/profile.d/ 目录下建一个文件如:java.sh,配置对环境变量。
(3.3)办法3:在 ~/.bashrc 加上如下的代码,(建立在profile已配环境变量,如果没有配,也可以直接把环境变量的配置配到~/.bashrc上)
(https://blog.csdn.net/u011553945/article/details/101516559)
4.成功否
在浏览器输入http://ip:9000,如果看到如下页面,表示安装成功(默认登陆账号是 admin 密码是admin):
5.汉化:用admin admin登陆成功后,按照下图操作:
等待安装完成以后,重启:
再次登陆,就变成中文的了:
6.安装扫描器sonar-scanner
下载:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ (含简单的使用说明)
我下载了sonar-scanner-cli-4.2.0.1873-linux.zip
(6.1)解压到/opt/softs目录下(任意目录都可以,这里只是为了方便管理),得到如下文件夹:
(6.2)切换到root用户,修改/etc/profile,添加sonnar环境变量,如下:
保存退出后,执行source /etc/profile 使环境变量生效
(6.3)输入sonar-scanner -v 显示如下,则表示安装成功了:
(6.4)关联sonarqube 和sonnar scanner
在/opt/softs/sonar-scanner-4.2.0/conf/sonar-scanner.properties中添加如下内容:
sonar.host.url=http://sonnar_ip:9000 sonar.login=admin sonar.password=admin sonar.jdbc.username=sonar sonar.jdbc.password=sonar123 sonar.jdbc.url=jdbc:mysql://sonnar_ip:3306/sonar?useUnicode=true&characterEncoding=utf8
7.使用sonarqube + sonar-scanner做代码检测:
(7.1)打开要进行代码分析的项目根目录,新建sonar-project.properties文件
(7.2)输入以下信息:
# must be unique in a given SonarQube instance sonar.projectKey=my:project # this is the name displayed in the SonarQube UI sonar.projectName=apiautocore sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. # If not set, SonarQube starts looking for source code from the directory containing # the sonar-project.properties file. sonar.sources=src # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8
其中:projectName是项目名字,sources是源文件所在的目录
(7.3)设置成功后,启动sonarqube服务
(7.4)进入项目所在的根目录,输入命令:sonar-runner,分析成功后会有success信息
(7.5)浏览器输入http://sonar_ip:9000登陆sonnarqube,就能看到你刚才扫描的工程信息
sonar 启动失败,es报错(查看logs目录下的es.log即可):
es[][o.e.b.BootstrapChecks] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
参考:
https://blog.csdn.net/zdyueguanyun/article/details/79447701
https://www.cnblogs.com/reblue520/p/7131260.html?utm_source=itdadao&utm_medium=referral (含在jenkins上的配置)
以下是基于postgresql安装的sonarqube8以上的版本的参考文档:
https://blog.csdn.net/africanviolet/article/details/108224618