1.SonarQube
Sonar的功能:是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量
sonarQube能带来什么?
Developers' Seven Deadly Sins
1.糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
2.重复
显然程序中包含大量复制粘贴的代码是质量低下的, sonar可以展示源码中重复严重的地方
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率
4.没有代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降
而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
6.潜在的bug
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系
可以检测自定义的架构规则
通过sonar可以管理第三方的jar包
可以利用LCOM4检测单个任务规则的应用情况
检测耦合
2.centos7 Sonarqube安装流程
安装包unzip解压分别放在 /usr/local/sonarqube-和 /usr/local/sonar-scanner-
yum install -y unzip
-d表示指定目录
unzip sonarqube-6.7.1.zip -d /usr/local/
安装目录
/usr/local/sonarqube-6.7.1
/usr/local/sonar-scanner-3.0.3.778-linux
设置sonar-scanner环境变量 vim /etc/profile
SONAR_SCANNER_HOME=/usr/local/sonar-scanner-3.0.3.778-linux
export PATH=$SONAR_SCANNER_HOME/bin
cd /usr/local/sonar-scanner-3.0.3.778-linux/conf
sonar.host.url=http://localhost:9010
数据库配置修改
sonarqube 启动(两种方式)
/usr/local/sonarqube-6.5/bin/linux-x86-64/sonar.sh console
/usr/local/sonarqube-6.5/bin/linux-x86-64/sonar.sh start
配置sonar
配置sonar.properties文件 /usr/local/sonarqube-6.5/conf/sonar.properties
a.配置启动的http端口:
sonar.web.host: localhost(或者你的IP)
sonar.web.port: 9000(默认是9000,你可以修改,不然会和Jenkins的端口号冲突)
sonar.web.context: /
b.MYSQL
----- MySQL 5.x
Comment the embedded database and uncomment the following line to use MySQL
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
:mysql是指你要连接的事Mysql数据库,这里我给Sonar的权限是管理员所以可以用localhost,否则你要使用的你的IP地址,3306是你使用的端口号,sonar是创建的数据库。
create database sonar;
Optional properties
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
sonar.jdbc.validationQuery: select 1
c.重新运行sonar
/usr/local/sonarqube-6.5/bin/linux-x86-64/sonar.sh restart
/usr/local/sonarqube-6.5/logs/web.log
后来冲突了,port设置为9010 访问http://120.79.72.250:9010/about admin admin,可以看到管理页面了
broom: 97667722e1e9cdcdaee0c766199f007b9ab256c0
mvn sonar:sonar \
-Dsonar.host.url=http://120.79.72.250:9010 \
-Dsonar.login=97667722e1e9cdcdaee0c766199f007b9ab256c0
d.安装插件
把jar 文件放到/usr/local/sonarqube-6.5/extensions/plugins里,重启 Sonar,该插件就在 Sonar 的平台上运行并开始工作。
启动失败多看日志
插件不要随便倒进来,用到再用
Web server startup failed: Found two files for the same plugin [javascript]: sonar-javascript-plugin-3.0.0.4962.jar and sonar-javascript-plugin-3.1.1.5128.jar
6.7之后有这个问题还没解决,暂时用6.5------------------------------------------启动不了可以看日志/usr/local/sonarqube-6.7.1/logs
说的是运行不能用root用户
新建用户组和用户
groupadd sonarqube
useradd sonarqube -g sonarqube -p sonarqube
在 google上搜索到:https://stackoverflow.com/questions/47731102/cant-run-sonar-server-caused-by-elasticsearch-cannot-running-as-root
编辑usr/local/sonarqube-6.7.1/bin/linux-x86-64/sonar.sh - 找到RUN_AS_USER条目,取消注释并设定为刚刚创建的用户、
运行,又出问题
不能解决的时候,可以把/usr/local/sonarqube-6.7.1/conf/wrapper.conf 日志等级开高DEBUG
————————以下是当时做的一些尝试--------------------------
切换回root su root
su sonarqube
又有问题。。
sudo chmod -R 777 /usr/local/sonarqube-6.7.1
root用户下,运行passwd <username>来重设<username>的密码。修改密码broomqwer
修改用户组吗
sudo chown -R sonarqube:sonarqube /usr/local/sonarqube-6.7.1
sudo chown -R sonarqube:sonarqube /root/java/
sudo chmod -R 777 /root/java/
sudo chown -R root:root /root/java
在数据库中创建新用户sonar 密码为sonar 并给用户赋权
CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';
说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.
GRANT ALL ON . TO 'sonar'@'%';
4.安装maven
5.安装Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
sudo service jenkins start //启动jenkins服务
安装会出现三个问题
1.说没有某个目录,mkdir就行
2.Starting jenkins (via systemctl): Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details. [FAILED]
检查自己的JDK是否安装,如果已经安装,检查 /etc/init.d/Jenkins 文件(可通过vi编辑器修改)中JDK路径是否与本地路径一致,不一致则将Java的正确路径加入
[root@izwz9dbnlmwmv1co13jzbqz init.d]# whereis java
java: /root/java/jdk1.8.0_151/bin/java
jenkins端口要配置一下(默认是8080)
vi /etc/sysconfig/jenkins
JENKINS_PORT=“9005”
3.Starting Jenkins bash: /home/renrui/java/jdk1.7/bin/java: Permission denied
vi /etc/sysconfig/jenkins
启动用户改为root
http://120.79.72.250:9005/可以访问 admin 123456
配置sonar插件
去这个url下载phi文件: http://updates.jenkins-ci.org/latest/sonar.hpi
进入jenkins:jenkins -》插件管理-》高级
点击上传,又是小等待后,重启。
进入jenkins-》系统管理-》系统配置后,就可以出现配置sonarqube server的地方
全局工具配置-sonar scanner 没找到
安装git plugin (安装插件)全局工具配置
新建工程
6.sonar-scanner
配置 /usr/local/sonar-scanner-3.0.3.778-linux/conf
----- Default SonarQube server
sonar.host.url=http://localhost:9010
----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://39.107.103.173:3306/sonar?useUnicode=true&characterEncoding=utf8
在需要分析的工程下新建sonar-project.properties
must be unique in a given SonarQube instance
sonar.projectKey=my:smart-classroom-web-backend
this is the name displayed in the SonarQube UI
sonar.projectName=smart-classroom-web-backend
sonar.projectVersion=1.0
sonar.language=java
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
其中:
sonar.projectKey必须在整个SonarQube中全局唯一;
sonar.projectName用于在网页中显示的项目名称;
sonar.projectVersion用于标识源代码版本;
sonar.language用于标识项目源代码所使用的开发语言;
sonar.sources用于指定源代码在整个文件中的起始路径;在Java Maven项目中默认都会有个src目录存放源代码,因此这里的值为“src”,当然如果不存在类似目录结构,也可以用“.”标识当前路径。
sonar.sourceEncoding:项目中源代码文件的编码,用Visual Studio创建的项目默认都是UTF-8编码,用Eclipse作为IDE的需要在IDE中进行设置,当然如果难以转码也可以用实际编码
运行sonar-scanner
出现错误Please provide compiled classes of your project with sonar.java.binaries property
先不管吧,配置Jenkins
遗留问题
Jenkins配置失败