環境準備
-
Jenkins 服務器
- 確保 Jenkins 已安裝并運行(推薦 LTS 版本)。
- 安裝插件:
- SonarQube Scanner for Jenkins(用于集成 SonarQube 掃描)
- NodeJS Plugin(可選,用于 JavaScript 項目)
- Pipeline Utility Steps(Pipeline 項目可能需要)
-
SonarQube 服務器
- 安裝 SonarQube 并啟動(版本需兼容語言插件)。
- 安裝語言插件:
- SonarJava(Java)
- SonarPython(Python)
- SonarJS(JavaScript/TypeScript)
- SonarCFamily(C/C++,需企業版或社區版插件)| Sonar-cxx插件
- SonarGroovy(Groovy)
- SonarRust(Rust,需社區插件)
- 生成 SonarQube Token:
登錄 SonarQube → 用戶頭像 → My Account → Security → 生成 Token。
1
Jenkins 全局配置
-
配置 SonarQube 服務器
- 進入 Jenkins → Manage Jenkins → System Configuration → Configure System。
- 找到 SonarQube servers → 點擊 Add SonarQube:
- Name: 自定義名稱(如
SonarQube-Prod
) - Server URL: SonarQube 服務器地址(如
http://sonar.example.com:9000
) - Server authentication token: 選擇預存的 SonarQube Token(需提前在 Jenkins Credentials 中配置)。
- Name: 自定義名稱(如
-
配置 SonarScanner
- 進入 Jenkins → Manage Jenkins → Tools → SonarScanner installations。
- 添加 SonarScanner 版本(自動下載或指定本地路徑)。
三、項目配置(以 Pipeline 項目為例)
-
Pipeline 腳本模板
pipeline {agent anyenvironment {SONAR_SCANNER_HOME = tool 'SonarScanner' // 與全局配置的名稱一致}stages {stage('Checkout') {steps {git url: 'https://github.com/your-project.git', branch: 'main'}}stage('Build & Test') {steps {// 根據語言執行編譯和測試(例如 Maven、Gradle、Make 等)sh 'mvn clean package' // Java 示例}}stage('SonarQube Analysis') {steps {withSonarQubeEnv('SonarQube-Prod') { // 與全局配置的名稱一致sh """${SONAR_SCANNER_HOME}/bin/sonar-scanner \-Dsonar.projectKey=your-project-key \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.example.com:9000 \-Dsonar.login=${SONARQUBE_TOKEN} \-Dsonar.language=java # 指定語言(可選)"""}}}} }
-
多語言項目配置
- 在
sonar-scanner
命令中指定語言相關參數,或通過sonar-project.properties
文件配置。 - 示例
sonar-project.properties
:sonar.projectKey=your-project sonar.sources=src sonar.language=java # 或 cpp, python, js 等 sonar.java.binaries=target/classes # Java 編譯目錄 sonar.cfamily.build-wrapper-output=bw-output # C/C++ 編譯輸出
- 在
各語言特殊配置
-
Java
- 使用 Maven/Gradle 插件:
mvn sonar:sonar -Dsonar.login=<TOKEN>
- 需生成單元測試覆蓋率報告(如 Jacoco)。
- 使用 Maven/Gradle 插件:
-
C/C++
- 安裝 SonarBuildWrapper(生成編譯數據庫):
build-wrapper --out-dir bw-output make clean all
- 掃描時指定編譯輸出目錄:
sonar-scanner -Dsonar.cfamily.build-wrapper-output=bw-output
- 安裝 SonarBuildWrapper(生成編譯數據庫):
-
Python
- 安裝依賴:
pip install pytest coverage # 生成測試覆蓋率
- 掃描時指定測試框架:
sonar.python.coverage.reportPaths=coverage.xml
- 安裝依賴:
-
JavaScript
- 安裝 Node.js 環境。
- 生成 LCOV 覆蓋率報告:
npm test -- --coverage
-
Rust
- 使用社區插件(如
sonar-rust
),需手動配置規則。 - 掃描時指定源碼路徑:
sonar.rust.sources=src
- 使用社區插件(如
-
Groovy
- 使用
sonar.groovy.file.suffixes=.groovy
指定文件后綴。
- 使用
注意事項
- 權限問題
- 確保 Jenkins 用戶有權限訪問代碼倉庫和 SonarQube 服務器。
- 版本兼容性
- 檢查 SonarQube 插件與語言版本的兼容性(如 Python 3.10+ 需要最新插件)。
- 代碼覆蓋率
- 大多數語言需手動生成覆蓋率報告(如 Jacoco、Coverage.py、LCOV)。
- 增量分析
- 使用
sonar.scm.provider=git
啟用增量分析以加速掃描。
- 使用
驗證結果
- 在 Jenkins 控制臺查看掃描日志,確認無報錯。
- 登錄 SonarQube 控制臺,查看項目分析結果。
- 根據 SonarQube 提示修復代碼質量問題。
通過以上步驟,可實現 Jenkins 與 SonarQube 的自動化代碼質量檢查,支持多種語言靜態分析。