sonarqube學(xué)習(xí)總結(jié)

1.SonarQube

Sonar的功能:是一個(gè)用于代碼質(zhì)量管理的開(kāi)源平臺(tái),用于管理源代碼的質(zhì)量,可以從七個(gè)維度檢測(cè)代碼質(zhì)量

sonarQube能帶來(lái)什么?

Developers' Seven Deadly Sins

1.糟糕的復(fù)雜度分布

文件、類、方法等,如果復(fù)雜度過(guò)高將難以改變,這會(huì)使得開(kāi)發(fā)人員難以理解它們,且如果沒(méi)有自動(dòng)化的單元測(cè)試,對(duì)于程序中的任何組件的改變都將可能導(dǎo)致需要全面的回歸測(cè)試

image.png

2.重復(fù)

顯然程序中包含大量復(fù)制粘貼的代碼是質(zhì)量低下的, sonar可以展示源碼中重復(fù)嚴(yán)重的地方

image.jpeg

3.缺乏單元測(cè)試

sonar可以很方便地統(tǒng)計(jì)并展示單元測(cè)試覆蓋率

image.png

4.沒(méi)有代碼標(biāo)準(zhǔn)

sonar可以通過(guò)PMD,CheckStyle,Findbugs等等代碼規(guī)則檢測(cè)工具規(guī)范代碼編寫

5.沒(méi)有足夠的或者過(guò)多的注釋

沒(méi)有注釋將使代碼可讀性變差,特別是當(dāng)不可避免地出現(xiàn)人員變動(dòng)時(shí),程序的可讀性將大幅下降

而過(guò)多的注釋又會(huì)使得開(kāi)發(fā)人員將精力過(guò)多地花費(fèi)在閱讀注釋上,亦違背初衷

6.潛在的bug

sonar可以通過(guò)PMD,CheckStyle,Findbugs等等代碼規(guī)則檢測(cè)工具檢測(cè)出潛在的bug

image.jpeg

7.糟糕的設(shè)計(jì)(原文Spaghetti Design,意大利面式設(shè)計(jì))

通過(guò)sonar可以找出循環(huán),展示包與包、類與類之間的相互依賴關(guān)系

可以檢測(cè)自定義的架構(gòu)規(guī)則

通過(guò)sonar可以管理第三方的jar包

可以利用LCOM4檢測(cè)單個(gè)任務(wù)規(guī)則的應(yīng)用情況

檢測(cè)耦合

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

設(shè)置sonar-scanner環(huán)境變量 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

數(shù)據(jù)庫(kù)配置修改

sonarqube 啟動(dòng)(兩種方式)

/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.配置啟動(dòng)的http端口:

image.png

sonar.web.host: localhost(或者你的IP)

sonar.web.port: 9000(默認(rèn)是9000,你可以修改,不然會(huì)和Jenkins的端口號(hào)沖突)

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數(shù)據(jù)庫(kù),這里我給Sonar的權(quán)限是管理員所以可以用localhost,否則你要使用的你的IP地址,3306是你使用的端口號(hào),sonar是創(chuàng)建的數(shù)據(jù)庫(kù)。

create database sonar;

Optional properties

sonar.jdbc.driverClassName: com.mysql.jdbc.Driver

sonar.jdbc.validationQuery: select 1

c.重新運(yùn)行sonar

/usr/local/sonarqube-6.5/bin/linux-x86-64/sonar.sh restart

/usr/local/sonarqube-6.5/logs/web.log

后來(lái)沖突了,port設(shè)置為9010 訪問(wèn)http://120.79.72.250:9010/about admin admin,可以看到管理頁(yè)面了

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 的平臺(tái)上運(yùn)行并開(kāi)始工作。

啟動(dòng)失敗多看日志

插件不要隨便倒進(jìn)來(lái),用到再用

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之后有這個(gè)問(wèn)題還沒(méi)解決,暫時(shí)用6.5------------------------------------------啟動(dòng)不了可以看日志/usr/local/sonarqube-6.7.1/logs

image.png

說(shuō)的是運(yùn)行不能用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條目,取消注釋并設(shè)定為剛剛創(chuàng)建的用戶、

image.png

運(yùn)行,又出問(wèn)題

image.png

不能解決的時(shí)候,可以把/usr/local/sonarqube-6.7.1/conf/wrapper.conf 日志等級(jí)開(kāi)高DEBUG

————————以下是當(dāng)時(shí)做的一些嘗試--------------------------

切換回root su root

su sonarqube

又有問(wèn)題。。

image.png

sudo chmod -R 777 /usr/local/sonarqube-6.7.1

root用戶下,運(yùn)行passwd <username>來(lái)重設(shè)<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安裝流程

在數(shù)據(jù)庫(kù)中創(chuàng)建新用戶sonar 密碼為sonar 并給用戶賦權(quán)

CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar';

說(shuō)明:username - 你將創(chuàng)建的用戶名, host - 指定該用戶在哪個(gè)主機(jī)上可以登陸,如果是本地用戶可用localhost, 如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符%. password - 該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器.

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 //啟動(dòng)jenkins服務(wù)

安裝會(huì)出現(xiàn)三個(gè)問(wèn)題

1.說(shuō)沒(méi)有某個(gè)目錄,mkdir就行

2.Starting jenkins (via systemctl): Job for jenkins.service failed. See 'systemctl status jenkins.service' and 'journalctl -xn' for details. [FAILED]

檢查自己的JDK是否安裝,如果已經(jīng)安裝,檢查 /etc/init.d/Jenkins 文件(可通過(guò)vi編輯器修改)中JDK路徑是否與本地路徑一致,不一致則將Java的正確路徑加入

[root@izwz9dbnlmwmv1co13jzbqz init.d]# whereis java

java: /root/java/jdk1.8.0_151/bin/java

image.png

jenkins端口要配置一下(默認(rèn)是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

啟動(dòng)用戶改為root

image.png

http://120.79.72.250:9005/可以訪問(wèn) admin 123456

配置sonar插件

去這個(gè)url下載phi文件: http://updates.jenkins-ci.org/latest/sonar.hpi

進(jìn)入jenkins:jenkins -》插件管理-》高級(jí)

image.png

點(diǎn)擊上傳,又是小等待后,重啟。

進(jìn)入jenkins-》系統(tǒng)管理-》系統(tǒng)配置后,就可以出現(xiàn)配置sonarqube server的地方

image.png

全局工具配置-sonar scanner 沒(méi)找到

安裝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必須在整個(gè)SonarQube中全局唯一;

sonar.projectName用于在網(wǎng)頁(yè)中顯示的項(xiàng)目名稱;

sonar.projectVersion用于標(biāo)識(shí)源代碼版本;

sonar.language用于標(biāo)識(shí)項(xiàng)目源代碼所使用的開(kāi)發(fā)語(yǔ)言;

sonar.sources用于指定源代碼在整個(gè)文件中的起始路徑;在Java Maven項(xiàng)目中默認(rèn)都會(huì)有個(gè)src目錄存放源代碼,因此這里的值為“src”,當(dāng)然如果不存在類似目錄結(jié)構(gòu),也可以用“.”標(biāo)識(shí)當(dāng)前路徑。

sonar.sourceEncoding:項(xiàng)目中源代碼文件的編碼,用Visual Studio創(chuàng)建的項(xiàng)目默認(rèn)都是UTF-8編碼,用Eclipse作為IDE的需要在IDE中進(jìn)行設(shè)置,當(dāng)然如果難以轉(zhuǎn)碼也可以用實(shí)際編碼

運(yùn)行sonar-scanner

出現(xiàn)錯(cuò)誤Please provide compiled classes of your project with sonar.java.binaries property

先不管吧,配置Jenkins

遺留問(wèn)題

Jenkins配置失敗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容