1、下载压缩包https://www.sonarqube.org/downloads/
2、解压到/usr/local或者其他自定义目录
3、修改sonar.properties文件的数据库配置(此处使用了mysql数据库,也可支持oracle等其他数据库,properties文件中有对应的模板):
sonar.jdbc.username=uuu
sonar.jdbc.password=uuu
sonar.jdbc.url=jdbc:mysql://IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=IP
sonar.web.port=9000 //设置访问端口
4、启动sonar,/bin下sonar.sh start|stop|restart
5、启动报错es无法用root用户启动,新建sonar用户,将sonar解压文件夹权限设置给sonar用户,su sonar后使用sonar用户启动
adduser sonar
passwd sonar修改密码
cd /usr/local
chown -R sonar /sonarqube-6.7.1
su sonar
sonar.sh start
6、sonar 6+需要java 1.8 版本的支持,低版本java会报错
在部署了java 1.8 之后,日志打印正常。说明如果环境中有多个java版本,并且缺省java 不是 jdk 1.8 怎么办呢? 可以通过修改 conf/wrapper.conf 中的属性
wrapper.conf:wrapper.java.command=java
通过修改“java”来设置1.8版本的jdk,如通过下面方式:
wrapper.conf:wrapper.java.command=/usr/java/jdk1.8.0_112/jre/bin/java
7、http://IP:9000/ 登录用户名密码默认是admin/admin
与jenkins集成:
1、jenkins安装SonarQube Scanner for Jenkins
2、jenkins>系统管理>系统设置>SonarQube servers
server url是sonar web访问的地址
Server authentication token是sonar web中的我的账号>安全下生成的令牌,在第一次登录会显示,并且只显示一次,除非再次自己生成,需要自己保存下来
3、创建JOB进行代码检查,
其他都与正常部署代码一致,只需添加一个构建过程:sonarqube scanner
sonar.projectKey=xx:scanner
sonar.projectName=xx
sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.modules=module1,module2 //根据实际项目结构
module1.sonar.projectBaseDir=xx/
module2.sonar.projectBaseDir=xx/
sonar.java.binaries=target/classes
4、执行JOB,然后访问sonar web看配置>项目>后台管理的分析进度;分析完毕后可以在项目菜单下看到分析结果
5、如果需要与jacoco结合使用查看代码覆盖率,需要在代码中最外层的pom添加
org.jacoco
jacoco-maven-plugin
0.7.1.201405082137
default-prepare-agent
prepare-agent
default-report
prepare-package
report
default-check
check
org.apache.maven.plugins
maven-surefire-plugin
2.17
${argLine}
1
true
default-test
test
test
6、jenkins JOB配置需要进行简单修改
mvn命令:clean -Dmaven.test.failure.ignore=true org.jacoco:jacoco-maven-plugin:prepare-agent package org.jacoco:jacoco-maven-plugin:report -P betaA -U
sonar scanner执行参数:
sonar.projectKey=xx:scanner
sonar.projectName=xx
sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.modules=module1,module2,module3
module1.sonar.projectBaseDir=xx/
module2.sonar.projectBaseDir=xx/
module3.sonar.projectBaseDir=xx/
sonar.java.binaries=target/classes
sonar.tests=src/test/java
sonar.junit.reportPaths=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
sonar.forceAnalysis=true
sonar.java.codeCoveragePlugin=jacoco
sonar.jacoco.reportPaths=target/jacoco.exec
sonar.dynamicAnalysis=reuseReports
7、再次执行JOB会分析并上传代码覆盖率到sonar平台
2.4%:2.4%行的代码被测试到;
3.5% line coverage:3.5%的普通代码行被测试到;
0.0% branch coverage:0.0%的分支代码行被测试到;(如if - elseif - else如果只測到if內的code就只有33%,若測到 if - elseif就是66%,if - elseif - else全測到就是100%)