SonarQube部署及程式碼質量掃描入門教程
一、前言
1、本文主要內容
- CentOS7下SonarQube部署
- Maven掃描Java專案並將掃描結果提交到SonarQube Server
- SonarQube掃描報表介紹
2、環境資訊
工具/環境 |
版本 |
---|---|
CentOS |
CentOS 7.6(IP:192.168.88.45) |
SonarQube |
7.5 |
JDK |
1.8.0 |
MySQL |
5.7 |
3、準備工作
- 安裝JDK1.8
參考:https://ken.io/note/centos-java-setup
- 安裝MySQL
參考:https://ken.io/note/centos-mysql57-setup
二、部署SonarQube
1、基礎準備
- 安裝必要的軟體包
yum install -y wget zip unzip
- 調整系統引數
sysctl -w vm.max_map_count=262144 sysctl -w fs.file-max=65536 ulimit -u 4096 sonarqube ulimit -n 65536 sonarqube
- 建立專用賬號sonar
#建立賬號並授權 useradd sonar passwd sonar #授予sudo許可權 visudo #在檔案末尾增加 sonar ALL=(ALL) ALL
sonar 7.5版本必須在非root賬號下啟動
2、準備資料庫及賬號
#進入mysql-shell mysql -u root -p #新建使用者 CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar@2019'; CREATE USER 'sonar'@'%' IDENTIFIED BY 'Sonar@2019'; #新建資料庫 CREATE DATABASE sonar; #賦予資料庫訪問許可權 GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost'; GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%'; #重新整理許可權 FLUSH PRIVILEGES; #退出 quit;
3、下載
- 準備軟體以及資料目錄
mkdir -p /usr/sonar mkdir -p /sonar/data mkdir -p /sonar/temp
- 下載
#進入下載目錄 cd /home/downloads #下載軟體包 sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip #解壓 sudo unzip sonarqube-7.5.zip -d /usr/sonar/
- 授權
#授予相關目錄許可權 chown -R sonar:sonar /usr/sonar chown -R sonar:sonar /sonar
4、配置環境變數
#修改profile檔案 sudo vi /etc/profile #在檔案末尾增加變數:SONAR_HOME export SONAR_HOME=/usr/sonar/sonarqube-7.5 #使變數生效 source /etc/profile #測試 echo $SONAR_HOME
5、配置Sonar
#修改配置檔案 sudo vi $SONAR_HOME/conf/sonar.properties #在配置檔案開頭增加以下配置 #資料庫配置 sonar.jdbc.username=sonar sonar.jdbc.password=Sonar@2019 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useConfigs=maxPerformance&rewriteBatchedStatements=true&characterEncoding=utf8&useUnicode=true&serverTimezone=GMT%2B08:00 #檔案配置 sonar.path.data=/sonar/data sonar.path.temp=/sonar/temp #Web配置 sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.web.context=/
這裡要強調的是,埠號需要>1000
,因為sonar啟動是使用的非root賬號,預設是不能使用1000以下的埠的,否則會啟動失敗
6、開放埠
sudo firewall-cmd --add-port=9000/tcp --permanent sudo firewall-cmd --reload
7、啟動Sonar
#切換到sonar賬號 su sonar #啟動 sh $SONAR_HOME/bin/linux-x86-64/sonar.sh start #啟動完成會看到以下輸出 Starting SonarQube... Started SonarQube. #如果未完成啟動可以使用console命令檢視啟動過程中的問題 sh $SONAR_HOME/bin/linux-x86-64/sonar.sh console
sonar支援的啟動引數: console | start | stop | restart | status | dump
如果啟動完成,但是依然不能訪問,可以通過以下命令檢視啟動日誌
cat $SONAR_HOME/logs/web.log
成功啟動後,可以訪問 http://192.168.88.45:9000
這時候SonarQube會進行初始化,比如:初始化資料庫。初始化完成後將看到首頁
三、掃描專案示例
1、初始化Token
通過預設賬號密碼 admin
,admin
登入SonarQube,這時候會彈出引導
輸入TokenName,然後點選Generate
就會生成token,點選Continue
然後選擇Java-Maven專案,這時候
token建立後,一旦視窗關閉就不能查詢,只能再次建立,所以我們要先將token複製下來儲存。
token建立:http://192.168.88.45:9000/account/security/
2、專案準備
本次我們以Java專案作為示例進行掃描,本機需要配置好了Java&Maven環境 參考:https://ken.io/note/java-quickstart-sde
如果已有Java專案可以忽略這一步
- 建立專案
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DremoteRepositories=http://maven.aliyun.com/nexus/content/groups/public \ -DgroupId=io.ken.sonar \ -DartifactId=sonardemo \ -Dpackage=io.ken.sonar \ -Dversion=1.0
- 修改pom.xml
增加build節點,指定預設build動作以及JDK版本
<build> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
3、掃描並提交
#進入專案根目錄 cd sonardemo #執行掃描 mvn sonar:sonar \ -Dsonar.host.url=http://192.168.88.45:9000 \ -Dsonar.login=8e359701283af794e8b77f3029863a1be7ad8ee4
掃描完成訪問:http://192.168.88.45:9000
即可看到掃描結果
點選專案名字可以檢視掃描詳情
4、報表指標簡介
指標 |
簡介 |
---|---|
Bugs |
bug個數及評分 |
Vulnerabilities |
安全漏洞個數及評分 |
Debt |
債務(程式碼問題)持續時間 |
Code Smells |
輕微問題:程式碼風格等等 |
Coverage |
單元測試覆蓋率 |
Duplications |
程式碼重複率 |
Duplicated Blocks |
程式碼重複塊數 |
四、備註
1、附錄
- https://docs.sonarqube.org/7.5/setup/install-server/
本文首發於我的獨立部落格:https://ken.io/note/sonarqube-install-and-code-scan-tuto