iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
IT Operation

迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰系列 第 17

Day 17 SonarQube 擴充:多分支分析與 PR 裝飾實踐

  • 分享至 

  • xImage
  •  

在現代化的 DevOps 流程中,我們希望在程式碼合併到主線之前就能發現問題。然而,SonarQube 社群版(Community Edition)預設僅支援對主分支(Main Branch)進行掃描。這意味著在開發分支(Feature Branch)上的錯誤只有在合併後才會被發現,這顯然不符合「左移測試(Shift-Left Testing)」的原則。

本篇將介紹如何透過開源外掛突破這項限制。

核心解決方案:Community Branch Plugin

為了在不升級到昂貴的商業版(Developer Edition 及以上)的前提下實現多分支掃描,我們需要安裝 sonarqube-community-branch-plugin-1.23.0.jar。此外,建議同時安裝 sonar-cnes-report 插件,這能讓我們生成專業的分析與審計報表,對於團隊內部的合規性檢查非常有幫助。

為什麼它需要 JavaAgent?

這個外掛與一般外掛不同,它需要透過 JVM 的 -javaagent 參數載入。這是因為它需要動態修改 SonarQube 核心的字節碼(Bytecode),以攔截並繞過原本僅限於商業版的「分支檢核邏輯」。

安裝步驟:系統級配置

1. 下載並安置外掛

前往 GitHub Release 下載與您 SonarQube 版本對應的 JAR (本實戰使用 1.23.0)。

# 安裝社群分支插件與 CNES 報表插件
sudo cp sonarqube-community-branch-plugin-1.23.0.jar /home/sonarqube/extensions/plugins/
sudo cp sonar-cnes-report-*.jar /home/sonarqube/extensions/plugins/

2. 配置 JVM 啟動參數

此插件必須同時作用於 Web 服務(處理 UI 顯示)與 Compute Engine (CE)(處理分析報告)。

除了透過 Docker 環境變數,最穩健的做法是在 sonar.properties 中明確指定 -javaagent

sonar.web.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.23.0.jar=web
sonar.ce.javaAdditionalOpts=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.23.0.jar=ce

若您使用 Docker 啟動,請更新環境變數:

sudo docker run -d --name sonarqube-ce \
    -e SONAR_WEB_JAVAADDITIONALOPTS="-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.23.0.jar=web" \
    -e SONAR_CE_JAVAADDITIONALOPTS="-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-1.23.0.jar=ce" \
    -p 9000:9000 \
    sonarqube:lts-community

在 Pipeline 中應用多分支分析

安裝完成後,執行 SonarScanner 時可傳入分支相關參數,這些參數原本在社群版是無效的:

情境 A:掃描特定開發分支

sonar-scanner \
  -Dsonar.projectKey=my-project \
  -Dsonar.branch.name=feature/user-auth

情境 B:掃描 Pull Request (PR) 並進行裝飾

當開發者提交 PR 時,我們可以傳入 PR 的元數據。如果搭配 GitLab/GitHub 配置,掃描結果會直接以留言方式回傳到 PR 頁面。

sonar-scanner \
  -Dsonar.pullrequest.key=42 \
  -Dsonar.pullrequest.branch=feature/user-auth \
  -Dsonar.pullrequest.base=main

外掛帶來的專業級效益

  1. 獨立的分支視圖:在 SonarQube 介面中,每個分支都有獨立的品質狀態,互不干擾。
  2. 品質門檻攔截:我們可以設定只有當 Feature Branch 通過品質門檻(Quality Gate)時,才允許合併。
  3. PR 裝飾 (PR Decoration):開發者無需離開 Git 介面,就能直接看到哪幾行程式碼引入了 Bug 或 Code Smell,極大提升了 Code Review 的效率。

總結

透過 community-branch-plugin,我們以零預算實現了商業版最核心的功能。這讓我們的 CI 流程具備了「預防勝於治療」的能力。在接下來的章節中,我們將探討如何將這些日益複雜的掃描邏輯封裝進 Jenkins Shared Library,實現多專案的快速套用。


上一篇
Day 16 Jenkins 套件管理與安全性配置 — 打造自動化的神經網路
下一篇
Day 18 Jenkins 程式碼化:Shared Library 建立重複使用的 Pipeline 架構
系列文
迎接 AI 開發爆發期:告別手動部署,帶領企業團隊從 Git 規範到 CI/CD 實戰19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言