Jenkins+SonarQube 集成与部署指南
一、SonarQube 部署方案
1. 单机 Docker 部署 (适合开发/测试)
特点:快速启动、资源占用少、适合体验和小团队测试。
Docker Compose 配置 (保存为 docker-compose.yml):
version: '3'
services:
sonarqube:
image: sonarqube:community # 或 lts版 (推荐)
container_name: sonarqube
ports:
- "9000:9000"
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
depends_on:
- db
networks:
- sonarnet
db:
image: postgres:13
container_name: postgres
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- sonarnet
volumes:
sonarqube_data:
sonarqube_extensions:
postgres_data:
networks:
sonarnet:
driver: bridge
启动命令:
docker-compose up -d
访问地址: - URL: http://<服务器IP>:9000 - 默认账号:admin/admin
二、Jenkins 与 SonarQube 集成
1. 安装 SonarQube Scanner 插件
- 登录 Jenkins 管理界面
- 进入 Manage Jenkins > Manage Plugins
- 在 Available 标签页搜索 "SonarQube Scanner"
- 安装插件并重启 Jenkins

2. 配置 SonarQube 服务器
- 进入 Manage Jenkins > Configure System
- 找到 SonarQube servers 部分
- 点击 Add SonarQube,填写配置:
- Name:SonarQube Server
- Server URL:http://
:9000 - Server authentication token:点击 Add > Jenkins,选择 Secret text,在 Secret 字段输入 SonarQube 生成的令牌

3. 配置 SonarQube Scanner
- 进入 Manage Jenkins > Global Tool Configuration
- 找到 SonarQube Scanner 部分
- 点击 Add SonarQube Scanner,填写配置: - Name:sonar-scanner - Install automatically:勾选 - 选择合适的版本
- 点击 Save

三、SonarQube 检测结果导出为 CSV
3.1 导出方式概述
SonarQube 支持多种方式导出检测结果,包括: - Web 界面导出:直接从 SonarQube 项目页面导出 - API 导出:通过 SonarQube API 编程获取数据 - 命令行工具:使用 sonar-tools 工具导出
3.2 使用 sonar-tools 导出 CSV
3.2.1 安装 sonar-tools
pip install sonar-tools
3.2.2 自动导出脚本
创建 Python 脚本实现自动导出 SonarQube 检测结果为 CSV 格式:

import subprocess
import datetime
import os
# 配置参数
SONAR_URL = "http://10.100.20.206:9000" # SonarQube 服务器地址
TOKEN = "用户token" # SonarQube 访问令牌
PROJECT_KEY = "org.open.zou.pre:zou-pre-api" # 项目密钥
OUTPUT_DIR = r"D:\trea\dev" # 输出目录
# 生成带时间戳的输出文件名
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
safe_proj = PROJECT_KEY.replace(":", "_") # 处理项目密钥中的特殊字符
OUTPUT = os.path.join(OUTPUT_DIR, f"{safe_proj}_{timestamp}.csv")
# 构建 sonar-findings-export 命令
cmd = [
"sonar-findings-export",
"-u", SONAR_URL,
"-t", TOKEN,
"-k", PROJECT_KEY,
"--format", "csv", # 导出格式为 CSV
"-f", OUTPUT # 输出文件路径
]
# 执行命令并打印结果
print("执行命令:", " ".join(cmd))
subprocess.run(cmd, check=True)
print(f"导出完成:{OUTPUT}")
6.2.3 脚本使用说明
-
配置参数: -
SONAR_URL:替换为你的 SonarQube 服务器地址 -TOKEN:在 SonarQube 个人设置中生成访问令牌 -PROJECT_KEY:项目的唯一标识符,可在 SonarQube 项目页面查看 -OUTPUT_DIR:CSV 文件的保存目录 -
运行脚本:
bash python sonar_export_csv.py -
输出结果: - 脚本会在指定目录生成带有时间戳的 CSV 文件 - 文件名格式:
{项目密钥}_{时间戳}.csv- 包含所有检测到的代码质量问题