初衷:
项目要解决sonar扫描出来的bug和漏洞,因此在开发环境搭建一套sonar并集成到jenkins,方便解决之后重新扫描
整个安装过程文章分为三部分,文末有跳转下一篇的链接,涉及到的插件或软件:
- apache tomcat 8
- jenkins.war 2.1+
- sonar 6.7.7
(起初我安装的是7.9.1,sonar目前最新版本是8.1,由于安装过程对jdk版本要求11+,但是我换了jdk11和jdk13,启动都会报类似ABI这种错误,所以经过一番折腾,将版本降低为6.7.7,可以支持jdk1.8)
- sonar scanner 4.2+
- sonarqube scanner for jenkins插件
- jdk 1.8
- sonar汉化包
下载Sonar
服务器创建sonar目录
mkdir -p /opt/xxxx/product/bdc/sonar
安装
- 在线安装:服务器可以访问外网,直接服务器wget下载
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip
- 离线安装:服务器不能访问外网,只能下载后上传到服务器sonar目录
点击下载sonar上传到服务器/opt/xxxx/product/bdc/sonar目录下
解压
[bdc@T5073 sonar]$ unzip sonarqube-6.7.7.zip
[bdc@T5073 sonar]$ ll
总计 201576
drwxr-xr-x 11 bdc bdc 4096 07-10 12:32 sonarqube-6.7.7
-rw-rw-r-- 1 bdc bdc 206192630 10-22 14:35 sonarqube-6.7.7.zip
创建sonar用户和用户组
创建用户组和用户
SonarQube不能以ROOT用户运行
groupadd sonar
useradd sonar -g sonar
为sonar用户分配文件夹权限
chown -R sonar:sonar /opt/xxxx/product/bdc/sonar/sonarqube-6.7.7
启动
修改文件sonar.properties
vim /opt/xxxx/product/bdc/sonar/sonarqube-6.7.7/conf/sonar.properties
- 设置jvm使用的内存大小,Xms初始堆内存,Xmx最大堆内存
sonar.web.javaOpts=-server -Xms1G -Xmx4G -XX:+HeapDumpOnOutOfMemoryError
- 配置持久化数据库的账户、密码、数据库连接信息(此处使用mysql)
注意:
为避免和其他库表混淆,sonar需要单独创建一个库,sonar含53张表
sonar.jdbc.username=bdc_sonar
sonar.jdbc.password=bdc_sonar
sonar.jdbc.url=jdbc:mysql://10.1.203.46:3306/bdc_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
- 设置sonar访问地址
http://10.12.3.123:9000/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.context=/sonar
修改启动脚本bin/linux-x86-64/sonar.sh
vim /opt/xxxx/product/bdc/sonar/sonarqube-6.7.7/bin/linux-x86-64/sonar.sh
- 修改启动用户为sonar(前面创建的sonar)
RUN_AS_USER=sonar
启动sonar
- 切换到sonar用户
su sonar
- 执行启动命令启动,这里选择
console
启动,就像tomcatcatalina.sh run
一样,第一次启动难免有报错,省的start启动还要去看日志,报错又停掉,console
和tomcatcatalina.sh run
类似
sh /opt/xxxx/product/bdc/sonar/sonarqube-6.7.7/bin/linux-x86-64/sonar.sh console
其他命令:
sh sonar.sh start #启动sonar
sh sonar.sh stop #安全停止sonar
sh sonar.sh restart #安全重启sonar
sh sonar.sh console #控制台启动sonar
如果出现以下错误,请参照以下办法
报错信息:
Running SonarQube…
wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM…
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | WrapperSimpleApp: Unable to locate the class org.sonar.application.App: java.lang.UnsupportedClassVersionError: org/sonar/application/App :Unsupported major.minor version 52.0
解决方案:
原因
:sonar启动默认使用系统已安装的java命令(jdk1.7),可能服务器内安装的java版本比较低,sonar 6.7.7最低要求jdk1.8以上,因此需要额外指定sonar的启动java命令的路径
方案
:修改/opt/aspire/product/bdc/sonar/sonarqube-6.7.7/conf/wrapper.conf
将wrapper.java.command=java
改为wrapper.java.command=/opt/aspire/product/bdc/jdk1.8/bin/java
如果修改成jdk11以后,会报如下错误
最终解决方案:sonar使用6.7.7版本,jdk可以使用1.8版本(高版本的sonar使用jdk11或13会出现上图错误,已解决这个问题的请指教一下)
其他版本下载:https://www.sonarqube.org/downloads/
查看日志
如果sonar.sh console方式启动没有异常日志打印,一般情况为启动成功,如果有异常情况,可以进入下面目录查看日志
cd ../../logs
日志分为access.log sonar.log,ce.log,es.log,web.log
access.log
sonar访问记录日志,有点类似nginx 的access.log
sonar.log
sonar启动日志
ce.log
集成方面的日志,比如sonar连接数据源、SCM、SVN、插件等等
es.log
sonar内嵌了es,主要用于存储和搜索,记录es的日志
web.log
启动后,若日志文件均无报错,即可访问http://ip:9000/sonar
,若顺利,则会出现如下界面