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 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  # 指定语言(可选)"""}}}}
    }
    
  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 的自动化代码质量检查,支持多种语言静态分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyRTC轻量级Webrtc音视频通话SDK,助力带屏IPC在嵌入式设备中的应用

一、市场背景 随着人们生活水平的提高&#xff0c;对于家居安全和远程监控的需求日益增长&#xff0c;带屏IPCam不仅满足了用户实时查看监控画面的需求&#xff0c;还提供了诸如双向语音通话、智能报警等丰富的功能&#xff0c;极大地提升了用户体验。 此外&#xff0c;技术的…

AI编辑器-Trae 玩转AI 编程

参考 掘金社区地址 Trae下载地址 管理插件 Trae 从入门到实践:AI 编码的妙笔生花 掘金社区 掘金社区简介 掘金是面向全球中文开发者的技术内容分享与交流平台。我们通过技术文章、沸点、课程、直播等产品和服务,打造一个激发开发者创作灵感,激励开发者沉淀分享,陪伴开发者…

C语言代码如何操作硬件?

在嵌入式开发中&#xff0c;C代码通过直接操作硬件寄存器来控制硬件&#xff0c;这些寄存器被映射到特定的内存地址。以下是其工作原理的详细分步解释&#xff1a; 1. 内存映射硬件寄存器 微控制器将外设&#xff08;如GPIO、定时器、UART等&#xff09;的寄存器映射到内存地…

Flume-试题

以下是对话中涉及的题目及其简要解析&#xff1a; 1. 哪个 Flume Source 可用于监控某个端口&#xff0c;将流经端口的每一个文本行数据作为 Event 输入&#xff1f; - A. Avro Source - B. exec Source - C. Spooling Directory Source - D. Netcat Source 2. 哪…

C++《红黑树》

在之前的篇章当中我们已经了解了基于二叉搜索树的AVL树&#xff0c;那么接下来在本篇当中将继续来学习另一种基于二叉搜索树的树状结构——红黑树&#xff0c;在此和之前学习AVL树类似还是通过先了解红黑树是什么以及红黑树的结构特点&#xff0c;接下来在试着实现红黑树的结构…

【第23节】windows网络编程模型(WSAEventSelect模型)

目录 引言 一、WSAEventSelect模型概述 二、 WSAEventSelect模型的实现流程 2.1 创建一个事件对象&#xff0c;注册网络事件 2.2 等待网络事件发生 2.3 获取网络事件 2.4 手动设置信号量和释放资源 三、 WSAEventSelect模型伪代码示例 四、完整实践示例代码 引言 在网…

概率预测之NGBoost(Natural Gradient Boosting)回归和分位数(Quantile Regression)回归

概率预测之NGBoost(Natural Gradient Boosting)回归和线性分位数回归 NGBoostNGBoost超参数解释NGBoost.fitscore(X, Y)staged_predict(X)feature_importances_pred_dist 方法来获取概率分布对象分位数回归(Quantile Regression)smf.quantreg 对多变量数据进行分位数回归分…

手撕算法——链表

算法基础——链表-CSDN博客 一、排队顺序 题⽬来源&#xff1a;洛⾕ 题⽬链接&#xff1a;B3630 排队顺序 - 洛谷 难度系数&#xff1a;★ 1. 题目描述 2. 算法原理 本题相当于告诉了我们每⼀个点的后继&#xff0c;使⽤静态链表的存储⽅式能够很好的还原这个队列。 数组中 [1,…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

kotlin init执行顺序

一 代码 kotlin: package test.fclass Test1 { }class TestInit(s: String, i: Int) {var name: String? nullvar age 0private var a :Int 1init {this.name sthis.age iprintln("init代码块: $name, $age")}}转成java // Test1.java package test.f;import…

使用cursor开发java案例——springboot整合elasticsearch

安装elasticsearch 打开cursor&#xff0c;输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip&#xff1a;192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 &#xff0…

Java Collection API增强功能系列之一 Arrays.asList()

在Java编程中&#xff0c;Arrays.asList() 是一个高频使用却又容易引发陷阱的工具方法。它能够快速将数组转换为列表&#xff0c;但其特殊行为常常让开发者踩坑。本文将深入剖析该方法的本质特性&#xff0c;并揭示其使用时的注意事项。一、方法定义与基础用法 1. 方法签名 p…

vue3 项目的最新eslint9 + prettier 配置

注意&#xff1a;eslint目前升级到9版本了 在 ESLint v9 中&#xff0c;配置文件已经从 .eslintrc 迁移到了 eslint.config.js 配置的方式和之前的方式不太一样了&#xff01;&#xff01;&#xff01;&#xff01; 详见自己的语雀文档&#xff1a;5、新版eslint9prettier 配…

基于FPGA的16QAM+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 16QAM调制解调原理 2.2 帧同步 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 vivado2019.2仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 设置SNR12db 将FPGA数据导入到MATLAB显…

[学成在线]06-视频分片上传

上传视频 需求分析 教学机构人员进入媒资管理列表查询自己上传的媒资文件。 点击“媒资管理” 进入媒资管理列表页面查询本机构上传的媒资文件。 教育机构用户在"媒资管理"页面中点击 "上传视频" 按钮。 点击“上传视频”打开上传页面 选择要上传的文件…

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…

【新能源汽车温度采集与控制系统设计深度解析】

面向汽车行业研发与测试测量设备从业者的技术指南 一、硬件架构设计 新能源汽车的温度采集与控制系统是保障电池、电机、电控等核心部件安全运行的核心技术之一。其硬件架构需兼顾高精度、抗干扰、可靠性与集成化&#xff0c;以下从信号调理电路、ADC模块、隔离设计三个维度展…

AI Tokenization

AI Tokenization 人工智能分词初步了解 类似现在这个&#xff0c;一格子 一格子&#xff0c;拼接出来的&#xff0c;一行或者一句&#xff0c;像不像&#xff0c;我们人类思考的时候组装出来的话&#xff0c;并用嘴说出来了呢。

React(四)setState原理-性能优化-ref

setState详解 实现原理 开发中我们并不能直接修改State来重新渲染界面&#xff1a; 因为修改State之后&#xff0c;希望React根据最新的State来重新渲染界面&#xff0c;但这种方式的修改React并不知道数据发生了变化&#xff1b; React并没有类似于Vue2中的Object.defineP…

SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库

在本地服务器上实现多个用户仅通过git push操作修改仓库、禁止其他改写方式的需求&#xff0c;可以通过以下步骤实现&#xff1a; 方法概述 通过SSH密钥认证 文件系统权限控制 Git仓库配置&#xff0c;确保用户仅能通过git push命令提交修改&#xff0c;而无法通过直接操作服…