1. 程式人生 > 實用技巧 >Window 環境下SonarQube的安裝與部署

Window 環境下SonarQube的安裝與部署

SonarQube 簡介

Sonar (SonarQube)是一個開源平臺,用於管理原始碼的質量。 Sonar 不只是一個質量資料報告工具,更是程式碼質量管理平臺。 支援java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十幾種程式語言的程式碼質量管理與檢測。 Sonar可以從以下七個維度檢測程式碼質量,而作為開發人員至少需要處理前5種程式碼質量問題。

1、不遵循程式碼標準:sonar可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具規範程式碼編寫。

2、潛在的缺陷:sonar可以通過PMD,CheckStyle,Findbugs等等程式碼規則檢測工具檢 測出潛在的缺陷。

3、糟糕的複雜度分佈:檔案、類、方法等,如果複雜度過高將難以改變,這會使得開發人員難以理解它們, 且如果沒有自動化的單元測試,對於程式中的任何元件的改變都將可能導致需要全面的迴歸測試。

4、重複:顯然程式中包含大量複製貼上的程式碼是質量低下的,sonar可以展示原始碼中重複嚴重的地方。

5、註釋不足或者過多:沒有註釋將使程式碼可讀性變差,特別是當不可避免地出現人員變動時,程式的可讀性將大幅下降而過多的註釋又會使得開發人員將精力過多地花費在閱讀註釋上,亦違背初衷。

6、缺乏單元測試:sonar可以很方便地統計並展示單元測試覆蓋率。

7、糟糕的設計:通過sonar可以找出迴圈,展示包與包、類與類之間的相互依賴關係,可以檢測自定義的架構規則 通過sonar可以管理第三方的jar包,可以利用LCOM4檢測單個任務規則的應用情況, 檢測耦合。

SonarQube 單體架構

1、SonarQube Server 包含3個主要服務程序 ①WebServer ②SearchServer 使用elastic search 做為搜尋的工具ui ③ComputeEngineServer 分析並且儲存到sonar資料庫中。

2、SonarQube Database ① 配置例項項、外掛安裝等 ② 專案質量快照檢視。

3、SonarQube Plugins 各種外掛:如 語言外掛、認證外掛、程式語言檢查外掛等等。

4、SonarQube Scanners 分析專案的工具。

SonarQube 叢集

1、在IDE中使用sonarlint執行本地分析。

2、開發者將程式碼提交到scm工具中。

3、持續整合工具自動觸發檢查程式碼執行SonarQube Scanner 執行sonarqube分析。

4、分析報告傳遞給sonarqube server進行加工處理。

5、進行處理分析、將資料儲存到資料庫中、將效果通過ui展示出來。

6、開發者通過sonarqube ui檢視自己的bug和技術債等。

7、專案經理、運維經理、測試經理通過程式碼報表進行檢視管理。

SonarQube 的安裝

1、從官網下載所需要的SonarQube的安裝包:https://www.sonarqube.org/downloads/。一般情況下,只需要安裝社群版免費的SonarQube服務即可,可以基於二進位制檔案安裝或者直接使用Docker下載映象啟動,二進位制檔案安裝的過程比較複雜,因為SonarQube內部依賴內建的ElasticSearch做搜尋,在Linux系統中需要新增一個非root使用者,並且修改一些列的系統引數例如系統支援的最大可開啟的檔案數等等。此外,SonarQube是一個Java應用,需要本地安裝JDK。自SonarQube的7.9版本開始放棄支援MySQL資料庫,8.3.1版本下只支援記憶體模式、PostgreSQL、Microsoft SQL Server和Oracle四種儲存引擎。下面會詳細記錄基於Window環境下SonarQube服務安裝的過程。

2、安裝JDK 1.8,在SonarQube8.3.1版本中需要安裝Jdk11+, 考慮到採用mysql實現資料持久化,所以本文我們以SonarQube7.7版本進行講解,JDK的最低版本要求為1.8。

3、將下載好的sonarqube-7.7.zip安裝包,解壓到安裝目錄。

4、進入到sonarqube-7.7\bin\windows-x86-64目錄中,雙擊StartSonar.bat啟動服務。當看到Process[ce] is up,SonarQube is up 表示服務啟動成功;

5、訪問http://localhost:9000/進入SonarQube登入介面,SonarQube的預設使用者名稱密碼為admin/admin

6、安裝中文外掛包

Administration --> Marketplace --> 搜尋輸入框中輸入chinese --> install,安裝完後重啟服務。

如果Install失敗,可以直接去官網https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下載對應版本的中文包,放到Sonar的外掛目錄下。

7、SonarQube支援Gradle、Maven、Ant等多種方式的掃描,我們以Maven為例。

a)修改apache-maven-3.6.1\conf目錄下的settings.xml檔案

  <pluginGroups>
    <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
  </pluginGroups>

  <proxies>
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <sonar.host.url>
              http://localhost:9000 #根據自己的實際情況進行配置
            </sonar.host.url>
        </properties>
    </profile>
  </proxies>

b)在Maven工程中通過命令執行掃描,或者通過開發工具也可以完成掃描工作。

mvn clean install sonar:sonar

c)執行完掃描後,訪問http://localhost:9000可以直接看到掃描結果。

SonarQube 資料持久化

1、SonarQube 預設的資料庫使用的是記憶體資料庫H2,我們可以通過H2官網http://www.h2database.com/html/main.html下載軟體進行訪問,也可以通過IDEA連線訪問。

Url:jdbc:h2:tcp://localhost:9092/sonar

使用者名稱,密碼預設為空,H2的預設埠為9092

2、如果我們需要資料持久化,就需要修改Sonar的配置檔案sonarqube-7.7\conf\sonar.properties。7.7版本保留了對mysql的支援,但是隻支援5.6到8.0之間的版本,不包括8.0本身。

#--------------------------------------------------------------------------------------------------
# DATABASE
#
# IMPORTANT:
# - The embedded H2 database is used by default. It is recommended for tests but not for
#   production use. Supported databases are MySQL, Oracle, PostgreSQL and Microsoft SQLServer.
# - Changes to database connection URL (sonar.jdbc.url) can affect SonarSource licensed products.

# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=root
sonar.jdbc.password=root

#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092

#----- DEPRECATED 
#----- MySQL >=5.6 && <8.0
# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

在Eclipse、IntelliJ IDEA 中通過外掛,完成對專案的程式碼掃描

1、 以Idea為例,Setting --> Plugins--> 輸入sonar--> install 安裝SonarLint外掛

2、針對需要掃描的工程反鍵執行SonarLint外掛即可。

轉載於:https://www.cnblogs.com/jiangyaxiong1990/p/12943886.html