為了保證項目代碼質(zhì)量,需要控制每個Pull Request的代碼單元測試覆蓋率。翻看了Sonar文檔,發(fā)現(xiàn)Sonar是一款保證代碼質(zhì)量的工具,可以滿足此類需求。
下面就用一個Demo來體驗一下Sonar的功能。
安裝SonarQube
- 以Docker容器運行:
docker run -d --name sonarqube -p 9000:9000 sonarqube
- 訪問http://localhost:9000
image.png
使用默認的用戶名密碼admin/admin登陸。
注意:為了簡化建立 SonarQube 的步驟,所有的內(nèi)容我都使用了默認值。比如,我直接使用了 SonarQube 內(nèi)建的數(shù)據(jù)庫,端口也采用了默認的 9000。但是,在實際工程項目中,為了 Sonar 數(shù)據(jù)的長期可維護和升級,我們通常會使用自己的數(shù)據(jù)庫。
安裝Sonar Scanner
SonarQube平臺搭建完成后,需要安裝Sonar Scanner以及創(chuàng)建項目??梢詮囊韵鹿俜教峁┑腟canner中挑選滿足需要的進行安裝。
- Gradle - SonarScanner for Gradle
- MSBuild - SonarScanner for MSBuild
- Maven - use the SonarScanner for Maven
- Jenkins - SonarScanner for Jenkins
- Azure DevOps - SonarQube Extension for Azure DevOps
- Ant - SonarScanner for Ant
- anything else (CLI) - SonarScanner
我這里需要掃描的是一個Golang項目,選擇安裝anything else (CLI) - SonarScanner。
-
點擊下載MacOS安裝包
image.png -
下載完成之后解壓,修改配置文件conf/sonar-scanner.properties,將sonar.host.url指向我們剛剛搭建的本地SonarQube平臺http://localhost:9000
image.png -
將sonar-scanner/bin加入$PATH
image.png -
執(zhí)行
sonar-scanner -h可以驗證我們已經(jīng)成功安裝了Sonar Scanner
image.png
靜態(tài)代碼掃描
在進行靜態(tài)代碼掃描之前需要對項目進行配置,在項目目錄下創(chuàng)建sonar-project.properties文件,以我這里分析的Golang項目為例
# must be unique in a given SonarQube instance
sonar.projectKey=play-golang
# --- optional properties ---
# defaults to project key
sonar.projectName=play-golang
# defaults to 'not provided'
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
完成之后在項目根目錄下執(zhí)行sonar-scanner進行靜態(tài)代碼分析,掃描結(jié)束后可以在SonarQube查看掃描結(jié)果。

參考:
https://docs.sonarqube.org/latest/setup/get-started-2-minutes/
https://docs.sonarqube.org/latest/analysis/overview/
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/




