sonarqube学习总结

1.SonarQube

Sonar的功能:是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量

sonarQube能带来什么?

Developers' Seven Deadly Sins

1.糟糕的复杂度分布

文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试

image.png

2.重复

显然程序中包含大量复制粘贴的代码是质量低下的, sonar可以展示源码中重复严重的地方

image.jpeg

3.缺乏单元测试

sonar可以很方便地统计并展示单元测试覆盖率

image.png

4.没有代码标准

sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写

5.没有足够的或者过多的注释

没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降

而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷

6.潜在的bug

sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug

image.jpeg

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

image.png

配置sonar

配置sonar.properties文件 /usr/local/sonarqube-6.5/conf/sonar.properties

a.配置启动的http端口:

image.png

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,可以看到管理页面了

image.png

broom: 97667722e1e9cdcdaee0c766199f007b9ab256c0

image.png

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

image.png

说的是运行不能用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

从回答中找到: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条目,取消注释并设定为刚刚创建的用户、

image.png

运行,又出问题

image.png

不能解决的时候,可以把/usr/local/sonarqube-6.7.1/conf/wrapper.conf 日志等级开高DEBUG

————————以下是当时做的一些尝试--------------------------

切换回root su root

su sonarqube

又有问题。。

image.png

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

3.centos7 mysql安装流程

在数据库中创建新用户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

image.png

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

image.png

http://120.79.72.250:9005/可以访问 admin 123456

配置sonar插件

去这个url下载phi文件: http://updates.jenkins-ci.org/latest/sonar.hpi

进入jenkins:jenkins -》插件管理-》高级

image.png

点击上传,又是小等待后,重启。

进入jenkins-》系统管理-》系统配置后,就可以出现配置sonarqube server的地方

image.png

全局工具配置-sonar scanner 没找到

安装git plugin (安装插件)全局工具配置

image.png

新建工程

image.png
image.png

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

image.png

在需要分析的工程下新建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配置失败

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容