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
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
說的是運行不能用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配置失敗