Sonar是一個程式碼質量管理的開源平臺,基於Java開發的,用於管理原始碼的質量,通過外掛形式,可以支援包括java、C#、JavaScript等二十餘種程式語言的程式碼質量管理與檢測。
它具有免費的社群版本和其他付費版本。
利用SonarQube的主要好處是:它整合了數千種自動的靜態程式碼分析規則,旨在提高開發人員的程式碼質量和安全性,使得開發人員編寫更加乾淨,更加安全的程式碼。
主要提供了三個比較大的功能:
程式碼可靠性支援:提前捕獲和提示程式碼中的錯誤,從而避免未定義的行為影響到終端使用者。
應用安全支援:修復可能危害到應用程式的漏洞,並通過安全熱點學習AppSec(簡單理解就是會學習和識別新的漏洞)。
技術債務支援:確保管理的程式碼庫乾淨並且可維護,以便提高開發人員的開發效率。
這可以幫助你確保程式碼在合併之前達到預期的質量!
只需一行命令即可輕鬆整合到CI/CD管道中。
也可以整合到Maven和Gradle構建週期中
檢查幾乎所有內容,如程式碼質量,格式,變數宣告,例外處理等。
實際上,研發團隊可以基於SonarQube做下面的事情:
CI/CD流程加入一個SonarQube掃描的環節
實施程式碼質量閾值,只有通過了這個質量閾值檢測才能進入下一個流程
程式碼質量低於閾值的專案要及時調整對應的程式碼
質量閾值可以進行自定義,SonarQube中針對每個專案會有詳細的面板資訊,裡面會給出專案當前的健康狀態,不同級別漏洞的分類和明細,漏洞對應提交者等多維度的統計資訊,方便進行問題的追蹤和修復。
針對不同的專案,SonarQube可設定了不同等級的閾值,對於老專案,會使用最低等級的閾值:阻斷性的錯誤數量要求為0,對於一些新的專案,則嚴格要求質量如嚴重性的錯誤要求為0等,只要無法通過質量閾值檢查,那麼專案是無法上線的。
sonarqube是sonar的伺服器端,相當於一個web伺服器,用來發布應用,線上瀏覽、設定分析等。
開發人員和管理員操作頻繁,用於瀏覽程式碼質量和設定伺服器。
整合ElasticSearch做搜尋服務,用於返回通過UI搜尋內容。
整合計算引擎處理程式碼分析後的報告,並將報告儲存到資料庫。
image.png
每個資料夾的作用
bin:sonarqube執行命令資料夾
conf:sonarqube組態檔夾
data:嵌入式資料庫的資料(H2資料庫引擎),建議只用於測試和演示
extensions:sonarqube的外掛等存放資料夾
lib:sonarqube存放的執行庫資料夾(jar)
logs:sonarqube紀錄檔資料夾
temp:sonarqube臨時資料夾
web:sonarqube系統UI介面資料夾
```
### 2、SonarQube資料庫
* 儲存程式碼分析資料包告。
* 支援oracle、PostgreSQL、MySQL。
### 3、Sonarqube-Scanner
sonarqube-scanner相當於sonar使用者端, sonarqube-scanner如下圖所示。每個資料夾的作用和sonar類似,具體不在贅述。
* 使用者端工具,用於掃描專案。
* 將掃描結果上傳到伺服器。
![](https://img2023.cnblogs.com/blog/108082/202309/108082-20230910233936421-622703806.png)
### 4、SonarQube Plugins
* 通過外掛使平臺功能更加強大,
* 常用的外掛分類:SCM、整合、身份驗證、管理維護等外掛。
外部整合
----
下面的模式展示了SonarQube如何與其他ALM工具整合,以及使用SONARQUE的各種元件。
1. 開發人員在IDE中編寫程式碼,並使用SonarLint來執行本地分析。
2. 開發人員將他們的程式碼推到他們最喜歡的SCM:Git,Svn,TFVC,…
3. 連續整合伺服器觸發自動構建,執行SONARQUE掃描器需要執行SONARQUE分析。
4. 分析報告被傳送到SONARQUE伺服器進行處理。
5. SONARQUE伺服器在SONARQUE資料庫中處理和儲存分析報告結果,並將結果顯示在UI中。
6. 開發人員審查、評論、挑戰他們的問題,通過SONARQUE UI管理和減少他們的技術債務。
7. 管理者從分析中得到報告;使用API來自動設定並從SONARQUE中提取資料;使用JMX監控SONARQUBE伺服器
![](https://img2023.cnblogs.com/blog/108082/202309/108082-20230910233936717-211760692.png)
SonarLint
---------
SonarLint是一個Sonar IDE外掛,可以接收和連線SonrarQube對程式碼庫掃描的結果從而通知Developer, SonarLint本身也可以基於一些規則對程式碼IDE中的程式碼進行即時的檢測。它的目的是在您鍵入程式碼時提供即時反饋。
![](https://img2023.cnblogs.com/blog/108082/202309/108082-20230910233936817-1917286195.png)![](https://img2023.cnblogs.com/blog/108082/202309/108082-20230910233936719-717063249.png)
**注意:**為了獲得最佳效能,Sonar Qube伺服器和資料庫應安裝在單獨的主機上,並且伺服器主機應為專用主機。伺服器和資料庫主機應位於同一網路上。
所有主機都必須進行時間同步