SonarQube系列-架構與外部整合

2023-09-11 06:00:45

介紹

Sonar是一個程式碼質量管理的開源平臺,基於Java開發的,用於管理原始碼的質量,通過外掛形式,可以支援包括java、C#、JavaScript等二十餘種程式語言的程式碼質量管理與檢測。

它具有免費的社群版本和其他付費版本。

SonarQube之採購選型參考

利用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伺服器和資料庫應安裝在單獨的主機上,並且伺服器主機應為專用主機。伺服器和資料庫主機應位於同一網路上。

所有主機都必須進行時間同步