当前位置: 首页 > news >正文

Jenkins 集成 SonarQube 代码静态检查使用说明

环境准备

  1. Jenkins 服务器

    • 确保 Jenkins 已安装并运行(推荐 LTS 版本)。
    • 安装插件:
      • SonarQube Scanner for Jenkins(用于集成 SonarQube 扫描)
      • NodeJS Plugin(可选,用于 JavaScript 项目)
      • Pipeline Utility Steps(Pipeline 项目可能需要)
  2. SonarQube 服务器

    • 安装 SonarQube 并启动(版本需兼容语言插件)。
    • 安装语言插件:
      • SonarJava(Java)
      • SonarPython(Python)
      • SonarJS(JavaScript/TypeScript)
      • SonarCFamily(C/C++,需企业版或社区版插件)| Sonar-cxx插件
      • SonarGroovy(Groovy)
      • SonarRust(Rust,需社区插件)
    • 生成 SonarQube Token:
      登录 SonarQube → 用户头像 → My AccountSecurity → 生成 Token。

1

Jenkins 全局配置

  1. 配置 SonarQube 服务器

    • 进入 Jenkins → Manage JenkinsSystem ConfigurationConfigure System
    • 找到 SonarQube servers → 点击 Add SonarQube
      • Name: 自定义名称(如 SonarQube-Prod
      • Server URL: SonarQube 服务器地址(如 http://sonar.example.com:9000
      • Server authentication token: 选择预存的 SonarQube Token(需提前在 Jenkins Credentials 中配置)。
  2. 配置 SonarScanner

    • 进入 Jenkins → Manage JenkinsToolsSonarScanner installations
    • 添加 SonarScanner 版本(自动下载或指定本地路径)。

三、项目配置(以 Pipeline 项目为例)
  1. 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  # 指定语言(可选)
              """
            }
          }
        }
      }
    }
    
  2. 多语言项目配置

    • 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++ 编译输出
      

各语言特殊配置

  1. Java

    • 使用 Maven/Gradle 插件:
      mvn sonar:sonar -Dsonar.login=<TOKEN>
      
    • 需生成单元测试覆盖率报告(如 Jacoco)。
  2. C/C++

    • 安装 SonarBuildWrapper(生成编译数据库):
      build-wrapper --out-dir bw-output make clean all
      
    • 扫描时指定编译输出目录:
      sonar-scanner -Dsonar.cfamily.build-wrapper-output=bw-output
      
  3. Python

    • 安装依赖:
      pip install pytest coverage  # 生成测试覆盖率
      
    • 扫描时指定测试框架:
      sonar.python.coverage.reportPaths=coverage.xml
      
  4. JavaScript

    • 安装 Node.js 环境。
    • 生成 LCOV 覆盖率报告:
      npm test -- --coverage
      
  5. Rust

    • 使用社区插件(如 sonar-rust),需手动配置规则。
    • 扫描时指定源码路径:
      sonar.rust.sources=src
      
  6. Groovy

    • 使用 sonar.groovy.file.suffixes=.groovy 指定文件后缀。

注意事项

  1. 权限问题
    • 确保 Jenkins 用户有权限访问代码仓库和 SonarQube 服务器。
  2. 版本兼容性
    • 检查 SonarQube 插件与语言版本的兼容性(如 Python 3.10+ 需要最新插件)。
  3. 代码覆盖率
    • 大多数语言需手动生成覆盖率报告(如 Jacoco、Coverage.py、LCOV)。
  4. 增量分析
    • 使用 sonar.scm.provider=git 启用增量分析以加速扫描。

验证结果

  1. 在 Jenkins 控制台查看扫描日志,确认无报错。
  2. 登录 SonarQube 控制台,查看项目分析结果。
  3. 根据 SonarQube 提示修复代码质量问题。

通过以上步骤,可实现 Jenkins 与 SonarQube 的自动化代码质量检查,支持多种语言静态分析。

相关文章:

  • 【Rust】一文掌握 Rust 的详细用法(Rust 备忘清单)
  • python打包辅助工具
  • 【视频】OpenCV:色彩空间转换、灰度转伪彩
  • react自定义hook
  • 排序复习_代码纯享
  • batman-adv 优化:基于信号强度(RSSI)选择链路
  • SpringCloud配置中心:Config Server与配置刷新机制
  • 使用 Python 和 python-pptx 构建 Markdown 到 PowerPoint 转换器
  • 华为OD机试 - 核酸最快检测效率 - 动态规划、背包问题(Java 2024 E卷 200分)
  • 深入理解 HTML5 Web Workers:提升网页性能的关键技术解析
  • 基礎複分析習題3.複函數
  • 今天你学C++了吗?——二叉搜索树的拓展
  • API-Arrays
  • 【Python爬虫】使用python脚本拉取汽车网站品牌数据
  • 1.NextJS基础
  • skynet网络包库(lua-netpack.c)的作用解析
  • 关于大数据的基础知识(四)——大数据的意义与趋势
  • AQS是什么,使用应注意什么
  • 【CXX-Qt】4.5 Traits
  • 【AndroidRTC-11】如何理解webrtc的Source、TrackSink
  • 格力电器去年净利增长一成:消费电器营收下滑4%,一季度净利增长26%
  • 又一名90后干部被查,已有多人倒在乡镇领导岗位上
  • 阿联酋启动第三届全球航空奖评选,奖金总额达百万美元
  • 国铁集团:一季度全国海铁运输商品车同比增长33.62%
  • 政企研合力,科学监测分析服务消费
  • 专访倪军:人要有终身学习能力,一张文凭无法像以往支撑那么多年