1、SonarQube的介紹
創(chuàng)新互聯(lián)公司長(zhǎng)期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為常寧企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),常寧網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
官網(wǎng):https://www.sonarqube.org/
SonarQube是一個(gè)管理代碼質(zhì)量的開(kāi)放平臺(tái)。
1.1 可以從七個(gè)維度檢測(cè)代碼質(zhì)量(為什么要用SonarQube)
(1)復(fù)雜度分布(complexity):代碼復(fù)雜度過(guò)高將難以理解、難以維護(hù)
(2)重復(fù)代碼(duplications):程序中包含大量復(fù)制粘貼的代碼是質(zhì)量低下的表現(xiàn)
(3)單元測(cè)試(unit tests):統(tǒng)計(jì)并展示單元測(cè)試覆蓋率
(4)編碼規(guī)范(coding rules):通過(guò)Findbugs,PMD,CheckStyle等規(guī)范代碼編寫
(5)注釋(comments):少了可讀性差,多了看起來(lái)費(fèi)勁
(6)潛在的Bug(potential bugs):通過(guò)Findbugs,PMD,CheckStyle等檢測(cè)潛在的bug
(7)結(jié)構(gòu)與設(shè)計(jì)(architecture & design):依賴、耦合等
Sonar可以集成不同的測(cè)試工具、代碼分析工具、持續(xù)集成工具、IDE。
Sonar通過(guò)對(duì)代碼質(zhì)量分析結(jié)果數(shù)據(jù)進(jìn)行再加工處理,通過(guò)量化的方式來(lái)度量代碼質(zhì)量的變化,從而可以方便地對(duì)工程進(jìn)行代碼質(zhì)量管理。
支持的語(yǔ)言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。
1.2 SonarQube平臺(tái)的組成
數(shù)據(jù)庫(kù):存放SonarQube的配置數(shù)據(jù)、代碼質(zhì)量的快照數(shù)據(jù)
Web服務(wù):用于查看SonarQube的配置數(shù)據(jù)、代碼質(zhì)量的快照數(shù)據(jù)
分析器:對(duì)項(xiàng)目代碼進(jìn)行分析,生成質(zhì)量結(jié)果數(shù)據(jù)并存入數(shù)據(jù)庫(kù)中(分析器有多種,我們選用 SonarQube Maven Plugin)
2、安裝
2.1 配置MySQL
結(jié)合SonarQube,Mysql數(shù)據(jù)庫(kù)的引擎最好使用InnoDB,可以提高性能。
查看當(dāng)前引擎:
mysql> show engines;
查看當(dāng)前默認(rèn)的引擎:
mysql> show variables like '%storage_engine%';
修改 MySQL 存儲(chǔ)引擎為 InnoDB, 在配置文件/etc/my.cnf
[root@localhost ~]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #加入這條default-storage-engine=INNODB default-storage-engine=INNODB [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
設(shè)置innodb_buffer_pool_size參數(shù)值
設(shè)置得盡可能大一點(diǎn),這個(gè)參數(shù)主要作用是緩存 innodb 表的索引,數(shù)據(jù),插入數(shù)據(jù)時(shí)的緩沖
默認(rèn)值:128M,專用 mysql 服務(wù)器設(shè)置的大小:操作系統(tǒng)內(nèi)存的 70%-80%最佳。
[root@localhost ~]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 default-storage-engine=INNODB #加入這條innodb_buffer_pool_size = 256M innodb_buffer_pool_size = 256M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
設(shè)置查詢緩存query_cache_size,最少設(shè)置15M
[root@localhost ~]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 default-storage-engine=INNODB innodb_buffer_pool_size = 256M #加入下面兩條query_cache_type=1 query_cache_size=32M query_cache_type=1 query_cache_size=32M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
重啟后,驗(yàn)證緩存設(shè)置是否生效
mysql> show variables like '%query_cache%';
2.2 創(chuàng)建sonarqube數(shù)據(jù)庫(kù)( UTF8 編碼 )
2.3 安裝SonarQube的WebServer,這里使用sonarqube-4.5.4.zip
壓解,并重命名為sonarqube
[root@localhost opt] unzip sonarqube-4.5.4.zip [root@localhost opt] mv sonarqube-4.5.4/ sonarqube
編輯數(shù)據(jù)庫(kù)連接配置:
[root@localhost sonarqube]# cd /opt/sonarqube/conf/ [root@localhost conf]# vi sonar.properties #數(shù)據(jù)庫(kù)用戶名和密碼 sonar.jdbc.username=root sonar.jdbc.password=123456 #----- MySQL 5.x sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.web.host=0.0.0.0 sonar.web.context=/sonarqube sonar.web.port=9090
2.4 啟動(dòng) SonarQube Web Server
/opt/sonarqube/bin/linux-x86-64/sonar.sh start
(初次啟動(dòng)會(huì)自動(dòng)建表和做相應(yīng)的初始化)
瀏覽器輸入:http://192.168.175.9:9090/sonarqube/
默認(rèn)用戶名/密碼為 admin/admin
設(shè)置自啟動(dòng):
1、新建文件/etc/init.d/sonar,輸入如下內(nèi)容:
#!/bin/sh # # rc file for SonarQube # # chkconfig: 345 96 10 # description: SonarQube system (www.sonarsource.org) # ### BEGIN INIT INFO # Provides: sonar # Required-Start: $network # Required-Stop: $network # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # Short-Description: SonarQube system (www.sonarsource.org) # Description: SonarQube system (www.sonarsource.org) ### END INIT INFO /opt/sonarqube/bin/linux-x86-64/sonar.sh $* exit $?
2、授權(quán)與添加系統(tǒng)服務(wù)
chmod 755 /etc/init.d/sonar chkconfig --add sonar
3、修改/opt/sonarqube/conf/wrapper.conf
wrapper.java.command=/home/jdk1.7.0_71/bin/java