环境准备
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 any environment { 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 的自动化代码质量检查,支持多种语言静态分析。