越来越懒得写总结了 好多都是几句话搞定orz...
sonar负责检测代码质量与查看代码覆盖率。这个工具先搭建起来可以正常使用, 但页面上各个功能都是做什么的还没有研究。
sonarqube需要用到的东西 jdk 、 mysql、 中文插件(放在SONARQUBE_HOME/extensions/plugins http://docs.codehaus.org/display/SONAR/Chinese+Pack)。
The onlyprerequisite for running SonarQube is to have Java (Oracle JRE 8 onwards orOpenJDK 8 onwards) installed on your machine.(需要jdk1.8具体信息看官网https://docs.sonarqube.org/display/SONAR/Requirements)
为sonarqube server创建一个数据库
CREATE DATABASE sonar CHARACTER SET utf8 COLLATEutf8_general_ci;
创建访问数据库的用户:
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
配置sonar用户的权限(tips: 'sonar'@'%'可配置用户远程连接数据库 , 可参考 http://www.cnblogs.com/davidgu/p/3706663.html)
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';flush privileges;
在/conf/sonar.properties里面添加数据库信息:
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username: sonar
sonar.jdbc.password: sonar
# Optional properties
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
配置好后保存 到bin目录下启动StartSonar.bat
SonarQube默认的端口号是9000
网页查看http://192.168.100.194:9000
设置SONAR_RUNNER_HOME环境变量 并在PATH中加入%SONAR_RUNNER_HOME%\bin;
如果只是在Jenkins所在服务器上 使用Jenkins系统管理的默认安装就好
我scanner和qube装在了同一台服务器上,scanner下载后安装位置随意。
在scanner的bin目录下sonar-scanner.properties里加上qube的地址(如果不在同一台服务器 localhost改成qube所在ip地址)
sonar.host.url=http://localhost:9000
系统设置中配置sonarqube所在服务器的jdk
下载插件SonarQubeScanner for Jenkins
登录sonarqube页面,在我的账号中找安装项,生成token。
在Jenkins的系统管理中配置sonarqube信息,填入获取的token。
这样以后构建完就可以在Jenkins上链接到qube
Jenkins2中在Global Tool Configuration里配置scanner信息。(经过试验 发现不配置也可以)
在maven命令行中写上
clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true
-Dmaven.test.failure.ignore=true作用:当测试失败时maven会自动停止构建此参数可以告诉maven忽略失败的测试继续构建
该参数的作用与在pom文件中maven-surefire-plugin插件的testFailureIgnore 这个配置属性设置为 true是一样的
使用sonarqube:
sonar.projectKey=dd_Sonar
sonar.projectName=dd_Sonar
sonar.projectVersion=1.0
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=./src (被测代码所在目录)
sonar.java.binaries=./target
sonar.java.coveragePlugin=jacoco
sonar.jacoco.reportPaths=./target/coverage-reports/jacoco-unit.exec
sonar.dynamicAnalysis=reuseReports
坑:
1、maven项目父pom有跳过测试的代码 去掉
2、有的人说jacoco只是分析了单元测试的代码覆盖率 并不能执行测试 需要在pom文件中添加junit插件才可以 但是我实验的结果是 只要加入了jacoco的插件就ok。而且单元测试的结果会直接生成xml 根本不需要此插件。
jacoco插件
有人会遇到sonar中显示了单元测试数量却没有覆盖率的情况但是我发现只要加了jacoco插件后使用clean install 就会成功的