1. 程式人生 > >SonarQube部署及程式碼質量掃描入門教程

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