一舔痪、sonar簡(jiǎn)介
sonar是一款靜態(tài)代碼質(zhì)量分析工具寓调,支持Java、Python辙喂、PHP捶牢、JavaScript、CSS等25種以上的語言巍耗,而且能夠集成在IDE秋麸、Jenkins、Git等服務(wù)中炬太,方便隨時(shí)查看代碼質(zhì)量分析報(bào)告灸蟆;
sonar通過配置的代碼分析規(guī)則,從可靠性亲族、安全性炒考、可維護(hù)性、覆蓋率霎迫、重復(fù)率等方面分析項(xiàng)目斋枢,風(fēng)險(xiǎn)等級(jí)從A~E劃分為5個(gè)等級(jí);
(1)?不遵循代碼標(biāo)準(zhǔn)知给。
(2)?潛在的缺陷?瓤帚。
(3)?糟糕的復(fù)雜度分布?描姚。
(4)?重復(fù)?。
(5)?注釋不足或者過多戈次。
(6)?缺乏單元測(cè)試?轩勘。
(7)?糟糕的設(shè)計(jì)。
同時(shí)怯邪,sonar可以集成pmd绊寻、findbugs、checkstyle等插件來擴(kuò)展使用其他規(guī)則來檢驗(yàn)代碼質(zhì)量悬秉;
二澄步、環(huán)境配置
環(huán)境配置大致分為以幾個(gè)步驟
1.下載SonarQube server
2.下載SonarScanner
3.配置環(huán)境變量
4.配置數(shù)據(jù)庫
5.下載Swift/OC的插件
6.啟動(dòng)SonarQube server.
重點(diǎn)說明
安裝不同版本的SonarQube有不同的要求。
1.例如SonarQube 7.9之后數(shù)據(jù)庫就不再支持MySQL了和泌。所以按照本文安裝要先看下你要安裝SonarQube對(duì)應(yīng)版本的要求驮俗。這個(gè)也是我一開始,安裝最新版本SonarQube允跑,數(shù)據(jù)庫配置了MySQL,所以服務(wù)一直沒有起來的原因搪柑。
2.Sonar 7.9及更高版本需要JAVA 11聋丝。
本次測(cè)試環(huán)境
系統(tǒng)環(huán)境
Mac OS 10.15.7
必要條件
運(yùn)行SonarQube的唯一前提條件是在計(jì)算機(jī)上安裝Java(Oracle JRE 11或OpenJDK 11),即JDK 11工碾。
數(shù)據(jù)庫支持PostgreSQL(推薦)弱睦、Microsoft SQL Server、Oracle
1).安裝JDK
到Oracle官網(wǎng)-Java SE Downloads下載JDK 11(訪問Oracle官網(wǎng)速度很慢渊额,花錢買了個(gè)VPN况木,速度杠杠的~)
安裝成功后可以在/Library/Java/JavaVirtualMachines看到j(luò)dk-11.0.10.jdk
再在終端上執(zhí)行java --version,可以看到當(dāng)前JDK版本信息
2).安裝PostgreSQL
安裝完成后旬迹,為了在終端使用psql命令火惊,需要配置環(huán)境路徑。
終端執(zhí)行打開~/.bash_profile
添加export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/13/bin
保存后終端執(zhí)行source ~/.bash_profile使設(shè)置生效奔垦。
現(xiàn)在可以在終端執(zhí)行psql --version
3).配置數(shù)據(jù)庫
首先使用postgres用戶登錄數(shù)據(jù)庫
psql postgres
然后創(chuàng)建用戶sonar并設(shè)置密碼屹耐,這里的密碼你可以填寫自己的密碼
CREATE USER sonar WITH PASSWORD 'sonar';
創(chuàng)建屬于用戶sonar的數(shù)據(jù)庫sonar
CREATE DATABASE sonar OWNER sonar;
給sonar用戶加上添加數(shù)據(jù)庫的權(quán)限
ALTER ROLE sonar CREATEDB;
4).安裝SonarQue
下載并解壓soarqube(https://www.sonarqube.org/downloads/)到任意位置,下面用$SONARQUBE-HOME表示sonarqube的目錄位置椿猎。
編輯$SONARQUBE-HOME/conf/sonar.properties以配置數(shù)據(jù)庫設(shè)置:
sonar.jdbc.url=jdbc:postgresql://localhost/sonarsonar.jdbc.username=sonarsonar.jdbc.password=sonar
接下來cd到$SONARQUBE-HOME/bin/macosx-universal-64惶岭,執(zhí)行以下命令來啟動(dòng)SonarQue:
./sonar.sh console
SonarQube常用命令:
./sonar.sh console #Debug信息
./sonar.sh start #啟動(dòng)服務(wù)
./sonar.sh stop #停止服務(wù)
./sonar.sh restart #重啟服務(wù)
SonarQube啟動(dòng)成功,在瀏覽器打開http://localhost:9000犯眠,登錄SonarQube按灶,默認(rèn)賬號(hào)密碼為admin,登錄成功后會(huì)提示修改密碼筐咧。
5).下載Sonar-Scanner
命令行下載:
brew install sonar-scanner
下載完成后鸯旁,執(zhí)行sonar-scanner --version查看版本信息.
下載zip
進(jìn)入SonarScanner(https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/)選擇 Mac OS X 64-bit下載zip并解壓,需要將該目錄下的bin目錄加到系統(tǒng)的環(huán)境變量PATH中,以便在命令行中可以訪問sonar-scanner命令羡亩。
三.Sonar-Scanner 簡(jiǎn)單使用
只需要在你的項(xiàng)目目錄下執(zhí)行如下命令(自行修改相關(guān)值):
sonar-scanner \
-Dsonar.projectKey=projectKey?
-Dsonar.sources=.
-Dsonar.host.url=http://localhost:9000
-Dsonar.login=authenticationToken
Sonar-Scanner 配置參數(shù)再使用
1) 配置全局設(shè)置
在SonarScanner的安裝目錄中找到/conf/sonar-scanner.properties摩疑,通過編輯更新全局設(shè)置:
#----- Default SonarQube server
#sonar.host.url=http://localhost:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
#----- 登錄賬號(hào)密碼
sonar.login=admin
sonar.password=xxxx
2) 配置項(xiàng)目參數(shù)
在項(xiàng)目的根目錄中創(chuàng)建一個(gè)配置文件,名為sonar-project.properties畏铆,配置項(xiàng)目設(shè)置(自行調(diào)整相關(guān)參數(shù)值):
sonar.projectKey=CSSonarDemo#sonar.projectName=CSSonarDemosonar.projectVersion=1.0sonar.language=objcsonar.sources=CSSonarDemosonar.tests=CSSonarDemoTestssonar.projectDescription=測(cè)試SonarQube掃描的demosonar.login=xxxx
其中sonar.login=xxxx需替換為你SonarQube后臺(tái)創(chuàng)建項(xiàng)目時(shí)創(chuàng)建的令牌:
3) 啟動(dòng)分析
便可從項(xiàng)目目錄運(yùn)行以下命令以啟動(dòng)分析:
sonar-scanner
分析后的項(xiàng)目會(huì)自動(dòng)出現(xiàn)在SonarQube服務(wù)器中
關(guān)于iOS代碼分析.
1.下載Swift/OC的插件
(https://github.com/Idean/sonar-swift/releases)
將下載下來的backelite-sonar-swift-plugin-0.4.6.jar雷袋,放到SonarQube/extensions/plugins/目錄下.
2.安裝其他工具
1).安裝OCLint(代碼分析工具)
brew tap oclint/formulaebrew install oclint
2).安裝xcpretty(增加xcodebuild輸出的可讀性)
gem install xcpretty
3).安裝lizard(復(fù)雜度檢測(cè)工具)
sudo pip3 install lizard
4).安裝slather(用于生成覆蓋率報(bào)告)
sudo gem install slather
3.SonarQube設(shè)置“質(zhì)量配置”為OCLint
在sonarqube網(wǎng)頁上,點(diǎn)擊項(xiàng)目-項(xiàng)目配置-質(zhì)量配置-指定一個(gè)質(zhì)量-OCLint-保存辞居。
4.接著重啟SonarQube楷怒,使用sonar-scanner重新分析項(xiàng)目,完了再刷新SonarQube后臺(tái)瓦灶,可以看到剛分析的項(xiàng)目有了報(bào)告信息鸠删。
5.關(guān)于OCLint的使用,在工程目錄中新建run-sonar.sh編輯腳本如下:
PROJECT_NAME="CSSonarDemo.xcworkspace"TARGET_NAME="CSSonarDemo"rm-rf sonar-reportsmkdir sonar-reportsrm-rf./build/derivedDataxcodebuild clean-UseModernBuildSystem=NOxcodebuild-workspace ${PROJECT_NAME}-scheme ${TARGET_NAME}-UseModernBuildSystem=NO-derivedDataPath./build/derivedData-configuration Debug COMPILER_INDEX_STORE_ENABLE=NO|xcpretty-r json-compilation-database-o compile_commands.jsonoclint-json-compilation-database-e Pods---report-typehtml-o oclintReport.htmloclint-json-compilation-database-e Pods---report-typepmd-o sonar-reports/oclint.xml \-max-priority-1=9999\-max-priority-2=9999\-max-priority-3=9999\/bin/sh sonar-scanner-X
然后在工程目錄中執(zhí)行以下命令:
sh run-sonar.sh
5.Sonar結(jié)合OCLint展示分析結(jié)果
在SonarQube后臺(tái)贼陶,我們進(jìn)入項(xiàng)目配置-設(shè)置刃泡,可以在左側(cè)看到前面添加的插件Swift (Backelite),點(diǎn)擊后可以右側(cè)看到一些路徑配置碉怔,OCLint的報(bào)告的相對(duì)路徑(Path to OCLint pmd formatted report)為sonar-reports/*oclint.xml烘贴,我們?cè)诳梢詫CLint分析報(bào)告放置在此路徑中,SonarQube即可顯示出分析結(jié)果撮胧。
四.添加sonar的規(guī)則文件
1.用管理帳號(hào)登錄SonarQube平臺(tái)
2.從質(zhì)量配置菜單進(jìn)入配置頁面新建:
3.輸入規(guī)則名稱桨踪,選擇語言,點(diǎn)擊創(chuàng)建:
4.創(chuàng)建完成:
5.進(jìn)入質(zhì)量配置芹啥,找到你選擇的語言:
6.設(shè)置自己添件的規(guī)則文件:
可以設(shè)置自己規(guī)則為默認(rèn)規(guī)則锻离,去激活自己想要的規(guī)則