一、前言
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://ken.io/note/sonarqube-install-and-code-scan-tutorial