什麼是 SonarQube

SonarQube 是一個由 Sonar 公司所推出的原始碼檢測平台,支援多種程式語言與專案框架。使用 SonarQube 掃描專案程式碼,平台會將品質不良或有資安疑慮的程式列出,並提供可行的修復方式,協助開發者撰寫品質與安全兼具的程式。

SonarQube 系列有許多不同的產品,其中原始碼檢測的服務有區分 Server 與 Cloud 兩種產品,兩者間最大的差異就是自架或是雲端,功能與價錢的差異可以直接到它的官網上查看。

今天要介紹的是免費的社群版本 SonarQube Server Community Build

SonarQube Server Community Build

SonarQube Server Community Build 是 Sonar 公司釋出的開源版本,相對於付費的 Server / Cloud 功能有些刪減,最大的差別就是支援的語言種類。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面1

如果你要檢測的專案開發語言並沒有在上面這張圖中,就需要升級到 Developer edition 或是 Enterprice edition 才有辦法做檢測,更詳細的說明可以看這裡

安裝

0. 確認 SonarQube 環境需求

安裝前建議先到 Server host requirements 查看所需的環境設定。

以 SonarQube Community Build v25.11.0.114957 來說,會需要安裝 Java 17 或 Java 21,這可以到 OpenJDK 下載指定的版本。

1. 下載安裝檔

至官網下載 Community Edition,並將下載完成的 Zip 檔解壓縮到你喜好的路徑。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面2

2. 開啟解壓縮目標內的 bin 資料夾

以 Windows 11 來說,請選擇 windows-x86-64 這個資料夾。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面3

3. 開啟命令提示字元,並執行 StartSonar.bat

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面4

啟動會需要一段時間,但只要最後有看到 SonarQube is operational 這行出現,就代表有啟動成功了。

4. 網頁開啟預設路徑 localhost:9000 執行登入。

輸入預設的登入帳號 (admin) 與密碼 (admin)。

5. 更新預設密碼

首次登入後,SonarQube 會提示更新預設密碼,更新完成之後就會看到歡迎畫面了。

使用 (以 Android 專案為例)

1. 建立新專案

點選畫面右上角的 Create project 並選擇 Manually 建立新專案。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面5

如果是要搭配 DevOps 使用,點選下拉選單的 Import from DevOps Platforms 會看到下面這個畫面,可以選擇程式碼所使用的平台。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面6

這裡我們選擇建立 Local Project,並依序填寫以下資料。

  • Project display name:專案在 SonarQube 所顯示的名稱。
  • Project key:專案在 SonarQube 裡的唯一碼,這部分的命名可以看團隊有沒有統一的格式,不然就是不要重複就可以了。
  • Main branch name:專案主分支的名稱,如果預設填入的 main 跟你的專案不同,記得要改成與專案一致的名稱。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面7

2. 選擇 New Code 的定義

這裡的 New Code 設定,是要讓 SonarQube 知道哪些異動會是新的變更,如果沒有特殊需求,可以選 Follows the instance's default 這個預設值。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面8

3. 選擇分析的執行方式

這裡我們沒有要搭配 CI,所以選擇 Locally。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面9

4. 設定專案 Token 與 IDE Plugin

1. Provide a token

  • Token 在執行分析時會帶入,用來辨識執行的是哪一個分析任務。
  • 可以單獨替專案建立 Token,也可以使用帳號的 Token。
  • Token 權限與時效通常在團隊使用上比較會用到,如果是個人使用可以隨意。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面10

選擇專案建置平台 Run analysis on your project

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面11

因為是 Android 專案所以選 Gradle,並將 Code block 裡的設定值複製到 Android 專案裡的 build.gradle。因為每個人的專案環境不盡相同,可以參考SonarQube Gradle 設定文件,或者文章下面留言,我來幫你看看。

基本上這裡設定完後,專案應該要能夠正常 sync & build

5. 建立 SonarQube 的 Run Config 並執行

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面12

將 SonarQube 網頁上的 gradle command 複製下來,並根據下面步驟建立 Run Config。

  1. 開啟 Android Studio 的 Run/Debug Configurations。
  2. 左上角加號建立一個新的 Config
  3. 設定名稱為 SonarQube
  4. 在 Run 中貼上指令並清除不必要的斜線 \ 與換行,看起來應該要類似下面這樣。
1
sonar Dsonar.projectKey=YOUR_PROJECT_KEY -Dsonar.projectName='YOUR_PROJECT_NAME' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=THIS_IS_MY_TOKEN
  1. 儲存後就可以在下拉選單中執行,等 IDE 跑完就可以在 SonarQube 上看到結果。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面13

延伸補充

如何切換分支

Community Build 的版本預設是不能切換檢測的分支,除非升級到 Developer 以上。 根據爬文出來的結果,但只要安裝 sonarqube-community-branch-plugin 就可以了。

以下是簡易的安裝流程:

測試環境資訊 作業系統:Windows 11 平台版本:SonarQube Community Build - v25.11.0.114957 套件版本:SonarQube Community Branch Plugin - v25.9.0

  1. Plugin 的 Release page 下載 sonarqube-community-branch-plugin-25.9.0.jarsonarqube-webapp.zip 這兩個檔案。
  2. 開啟 SonarQube 所安裝的資料夾,並將前一步驟下載的 jar 複製到 extensions\plugins 路徑下。
  3. 同樣在安裝資料夾內,尋找 conf\sonar.properties 這個檔案,並更新下列兩個參數後存檔。(可以用 javaAdditionalOpts 作為關鍵字在檔案內查詢。)
    1. sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-25.9.0.jar=web
    2. sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-25.9.0.jar=ce
  4. 開啟 SonarQube 安裝路徑內的 web 資料夾,將其清空並貼上 sonarqube-webapp.zip 解壓縮的內容。
  5. 啟動 SonarQube,如果順利跑完,登入後應該會出現 Installation of plugins 的警告,按下 I understand the risk 就可以了。

在嘗試安裝的過程中有出現 Elasticsearch 失敗的錯誤,問 Gemini 後查出來是 java.exe 卡住了 9001 port,手動關閉它後嘗試重啟依然不行。最後是電腦重開機才順利啟動 SonarQube 。

接下來是專案這裡的 Run Config 要調整。

在原本的 Gradle command 加上 -Dsonar.branch.name=${YOUR_BRANCH_NAME} 這條,完整的樣子應該會像這樣。(一開始我查到的參數是使用 sonar.branch,但都會跑出指令不支援請升級到 Developer 版的錯誤訊息。後來才發現是參數的問題,所以務必確認輸入的參數正確。)

1
2
3
4
5
6
sonar 
-Dsonar.projectKey=YOUR_PROJECT_KEY 
-Dsonar.projectName='YOUR_PROJECT_' 
-Dsonar.branch.name=YOUR_BRANCH_NAME
-Dsonar.host.url=http://localhost:9000 
-Dsonar.token=YOUR_TOKEN

成功執行 Gradle 任務後,在 SonarQube 應該就可以看到該分支的檢測結果了。

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面14

另外補充,SonarQube v10.6 + plugin 1.22.0 這樣的組合測試過可使用。 提供給用舊版的人參考。

防患於未然 - 裝個 SonarQube for IDE 吧

SonarQube Community Build 新手指南:從安裝到整合 Android 專案的完整教學操作畫面15

除了 SonarQube Server/Cloud 之外,我個人也滿推薦搭配使用 SonarQube for IDE。它能夠在開發階段就即時顯示出程式的潛在問題,讓開發者可以快速修正,不用等到 SonarQube Server 掃描時再解決。它支援大部分主流的 IDE,例如 JetBrains、VSCode、Visual Studio 等。更重要的一點是,它免費。XD


以上就是如何使用 SonarQube Community Build,替 Android 專案執行原始碼檢測的操作流程。如果對於文章內容,或是 SonarQube 這個檢測工具有任何疑問,歡迎留言討論~

下次見!👋


參考資料