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 插件

  1. 登录 Jenkins 管理界面
  2. 进入 Manage Jenkins > Manage Plugins
  3. Available 标签页搜索 "SonarQube Scanner"
  4. 安装插件并重启 Jenkins

2. 配置 SonarQube 服务器

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

3. 配置 SonarQube Scanner

  1. 进入 Manage Jenkins > Global Tool Configuration
  2. 找到 SonarQube Scanner 部分
  3. 点击 Add SonarQube Scanner,填写配置: - Name:sonar-scanner - Install automatically:勾选 - 选择合适的版本
  4. 点击 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 脚本使用说明

  1. 配置参数: - SONAR_URL:替换为你的 SonarQube 服务器地址 - TOKEN:在 SonarQube 个人设置中生成访问令牌 - PROJECT_KEY:项目的唯一标识符,可在 SonarQube 项目页面查看 - OUTPUT_DIR:CSV 文件的保存目录

  2. 运行脚本bash python sonar_export_csv.py

  3. 输出结果: - 脚本会在指定目录生成带有时间戳的 CSV 文件 - 文件名格式:{项目密钥}_{时间戳}.csv - 包含所有检测到的代码质量问题

0 子项 · 1 次浏览 · 2026-09-16