介紹
Sonar是一個代碼質量管理的開源平臺,基於Java開發的,用於管理源代碼的質量,通過插件形式,可以支持包括java、C#、JavaScript等二十餘種編程語言的代碼質量管理與檢測。
它具有免費的社區版本和其他付費版本。
利用SonarQube的主要好處是:它集成了數千種自動的靜態代碼分析規則,旨在提高開發人員的代碼質量和安全性,使得開發人員編寫更加乾淨,更加安全的代碼。
主要提供了三個比較大的功能:
-
代碼可靠性支持:提前捕獲和提示代碼中的錯誤,從而避免未定義的行爲影響到終端用戶。
-
應用安全支持:修復可能危害到應用程序的漏洞,並通過安全熱點學習AppSec(簡單理解就是會學習和識別新的漏洞)。
-
技術債務支持:確保管理的代碼庫乾淨並且可維護,以便提高開發人員的開發效率。
這可以幫助你確保代碼在合併之前達到預期的質量!
-
只需一行命令即可輕鬆集成到CI/CD管道中。
-
也可以集成到Maven和Gradle構建週期中
-
檢查幾乎所有內容,如代碼質量,格式,變量聲明,異常處理等。
實際上,研發團隊可以基於SonarQube做下面的事情:
-
CI/CD流程加入一個SonarQube掃描的環節
-
實施代碼質量閾值,只有通過了這個質量閾值檢測才能進入下一個流程
-
代碼質量低於閾值的項目要及時調整對應的代碼
質量閾值可以進行自定義,SonarQube中針對每個項目會有詳細的面板信息,裏面會給出項目當前的健康狀態,不同級別漏洞的分類和明細,漏洞對應提交者等多維度的統計信息,方便進行問題的追蹤和修復。
針對不同的項目,SonarQube可設定了不同等級的閾值,對於老項目,會使用最低等級的閾值:阻斷性的錯誤數量要求爲0,對於一些新的項目,則嚴格要求質量如嚴重性的錯誤要求爲0等,只要無法通過質量閾值檢查,那麼項目是無法上線的。
組成
1、SonarQube服務器
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服務器和數據庫應安裝在單獨的主機上,並且服務器主機應爲專用主機。服務器和數據庫主機應位於同一網絡上。
所有主機都必須進行時間同步