前期準備
安裝需求:
https://docs.sonarqube.org/latest/requirements/requirements/
安裝文檔:
https://docs.sonarqube.org/latest/setup/install-server/
硬件要求:
SonarQube服務器的小規模(單個或小型團隊)實例需要至少2GB的RAM才能高效運行,而操作系統則需要1GB的空閒RAM。如果要爲大型團隊或企業安裝實例,則要求更高的要求。
我在VM上運行,分配的3G的內存空間。
Java:
我安裝的是 JDK 11,安裝請參考:CentOS 7 安裝 jdk11
數據庫:
我用的數據庫是: SQL Server 2014
創建數據庫:SonarQubeDB
排序規則:Chinese_PRC_CS_AS
因爲: 排序規則必須區分大小寫(CS)和區分重音(AS)
READ_COMMITED_SNAPSHOT 必須在SonarQube數據庫上設置。
MS SQL數據庫的共享鎖定策略可能會影響SonarQube運行時。確保將is_read_committed_snapshot_on其設置爲true防止SonarQube在重負載下面臨潛在的死鎖。
查詢示例is_read_committed_snapshot_on:
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name='SonarQubeDB';
查詢示例更新is_read_committed_snapshot_on:
ALTER DATABASE SonarQubeDB SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
Linux系統配置:
如果在Linux上運行,則必須確保:
vm.max_map_count大於或等於262144
fs.file-max大於或等於65536
運行sonarqube的用戶至少可以打開65536個文件描述符
運行sonarqube的用戶至少可以打開4096個線程
# vim /etc/sysctl.d/99-sonarqube.conf
加入下面兩行:
vm.max_map_count=262144
fs.file-max=65536
# vim /etc/security/limits.d/99-sonarqube.conf
加入下面兩行:
sonarqube - nofile 65536
sonarqube - nproc 4096
SonarQube 平臺安裝
下載:
頁面:https://www.sonarqube.org/downloads/
我下載的是Community版本
# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.0.zip
解壓:
# unzip sonarqube-8.0.zip
創建一個空的架構和一個sonarqube用戶。授予此sonarqube用戶權限create,update和delete對象爲這個架構。
創建用戶 sonarqube:
# adduser sonarqube
設置密碼:
# passwd sonarqube
改變屬主:
# chown -R sonarqube:sonarqube sonarqube-8.0
# ll sonarqube-8.0
把文件部署到要部署的位置:
# mkdir /opt/sonarqube
# mv sonarqube-8.0 /opt/sonarqube/
修改配置文件:
# vim /opt/sonarqube/sonarqube-8.0/conf/sonar.properties
根據自己情況添加如下配置:
sonar.jdbc.url=jdbc:sqlserver://192.168.200.203:1433;databaseName=SonarQubeDB
sonar.jdbc.username=sa
sonar.jdbc.password=123456
sonar.web.host=192.168.80.128
sonar.path.data=/opt/sonarqube/sonarqube-8.0/data
sonar.path.temp=/opt/sonarqube/sonarqube-8.0/temp
保存完文件後,切換用戶到 sonarqube 登錄Linux
# su sonarqube
通過控制檯方式運行:
$ /opt/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh console
如果輸出的最後兩行如下,就說明運行成功了:
jvm 1 | 2019.10.29 01:59:14 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1 | 2019.10.29 01:59:14 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
查看數據庫:
數據庫已經插入了多張表。
訪問:http://192.168.80.128:9000/
要確保防火牆 9000 端口已經打開
管理員賬戶登錄:
用戶名:admin
密碼:admin
安裝中文包:
安裝完成功,它會提示重啓網站,點擊網頁上提示的重啓,等一會兒重啓成功後,自動進入登錄頁面:
用 admin 登錄後,網站已經變成中文的了
再次運行 sonarqube 的時候不用通過 console 啓動了,直接用 start 在後臺運行就好了。
sonarqube 運行參數 console | start | stop | force-stop | restart | status | dump:
$ /opt/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh
Usage: /opt/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh { console | start | stop | force-stop | restart | status | dump }
安裝可能遇到的問題:
1.配置信息的拼寫錯誤
2.不小心用 root 啓動會報錯,這時需要切換到 sonarqube 用戶,在切換前要刪除掉 root 在 data,logs 文件夾中創建的 root 權限的文件。否則就算切換到 sonarqube 用戶,還是啓動不了。
其實大部分啓動不了的原因都是權限問題。
安裝 scanner
SonarQube 平臺安裝完成後,就可以安裝 scanner 了,然後纔可以創建項目:
https://docs.sonarqube.org/latest/analysis/overview/
scanner 支持一下安裝:
- 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
這裏以 Maven 爲例:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/
先決條件
Maven的3.x
至少正在使用SonarQube服務器支持的最低Java版本,JDK8
全局設置
編輯 Maven 的 settings.xml文件,添加 profile 節點
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://192.168.80.128:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
分析
在要分析的Maven項目中運行:
mvn clean verify sonar:sonar
或者分兩步執行:
mvn clean install
mvn sonar:sonar
執行成功後訪問:
http://192.168.80.128:9000/projects
可以看到分析結果,趕緊去修改吧。
祝你成功 ^ _ ^