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

Jenkins + SonarQube 从原理到实战六:Jenkins 和 SonarQube 的项目落地实践

前言

本篇 没有代码 主要聚焦在 思路和落地方案 上,更多是“在实际项目里怎么把它跑起来”。

前面几篇我们已经聊过:

  • C/C++ 代码怎么用 SonarQube + sonar-cxx 插件去做扫描
  • SonarQube 上的报告展示
  • Jenkins 和 Gerrit 打通SonarQube 与 Windows AD 打通
  • Jenkins 与 SonarQube 打通,最终实现了 git push → Jenkins 触发任务 → 下载代码 → 扫描上传 → 获取 SonarQube 扫描结果并打分/评论
  • 等等之类的

按前面的篇章做完,基本也对 CI 技术有个了解了。


需求背景

这里说一下实际项目需求,项目经理提出了:

  • 针对 C/C++ 代码做静态扫描,开发同事能看到代码质量是什么问题并及时修正;
  • 需要结合现有 Jenkins 实现自动化扫描;
  • 报告权限隔离:只有相关项目的人能看到自己项目的结果,避免交叉曝光;
  • 目前现有的部分 Jenkins 任务原本就会跑编译或自定义脚本扫描,希望能和 SonarQube 一起集成,实现 Patch 的打分并评论。

换句话说,我们要把 SonarQube 引入到已有的 CI 流程里,让它自然地成为开发日常的一部分。


落地方案

1. SonarQube 与 Windows AD 打通

  • 所有 AD 用户都能直接登录 SonarQube。
  • 登录后,SonarQube 可以自动识别用户所属组(AD group)。

2. 基于组的权限管理

  • 在 SonarQube 上创建与 AD 相同名称的 group。
  • 用户登录后会自动加入对应组。
  • 项目私有化:授权给该组即可,确保“只看自己项目”。

3. Jenkins 项目自动化对接

  • Jenkins Job 名作为变量传入扫描,SonarQube 会自动创建同名项目。
  • 这样 Jenkins 的任务名与 SonarQube 项目名天然保持一致,便于管理。

4. 项目管理员机制

  • SonarQube 的项目权限管理粒度较细:只有管理员或项目管理员能配置。
  • 为避免集中维护,我给每个项目配一个“项目管理员”,由他们自己管理成员和权限。
  • 但目前没找到 批量授权 的办法,只能考虑后续用 SonarQube API 来做。

5. Jenkins 与 SonarQube 打分逻辑

  • 由于 Gerrit 是统一账号接入,打分需要区分:

    • Review 分(代码质量层面)
    • Verify 分(编译/构建层面)
  • 可以分成两个 Job,也可以在一个 Job 中拆分处理。

6. 任务拆分与并行

  • 如果时间太长,可以把“SonarQube 扫描”和“编译”拆成两个 Job,或者同一个 Job 下并行处理。
  • 原本已有的编译任务保持不动,额外加一个扫描任务即可。

实际问题与无奈

技术方案上,CI 已经打通得差不多了
但真正落地,问题并不是工具,而是 推广

  • 原来没有代码质量扫描,大家写完代码 push,编译没问题,负责人检查下没问题合并了就好;
  • 现在多了一层扫描,出了问题还要修复,还能扫描出复杂度、bug 等问题,相当于额外工作量;
  • 并且很多 sonar-cxx 的规则其实不太适合我们,要么太严格,要么不适用,结果项目经理到现在都没定好最终规则;
  • 我作为运维/平台方去推动,开发自然会有抵触,“多一件事,凭什么要做”(此应由技术总监或项目经理去推动);
  • 平台部署好了,对自己来说也没啥好处,反而还要多维护一套系统,说到底只能算是自己多熟悉了一套 CI 工具链。

说白了,CI 的难点不是 CI/CD 工具本身,而是“人”


CD 设想

CI 做到这一步,CD 自然是下一个话题。
但 CD 更加困难:

  • CI 还能用“质量门槛”来逼一逼;
  • CD 则涉及“发布流程、责任划分、上线事故风险”,更敏感。

我们目前有两套 Gerrit:

  • 对内 Gerrit:用于内部开发;
  • 对外 Gerrit:SDK 工具发布。

理想状态是:

  • 内部 CI 流程完成测试/验证后,如果能拿到这些代码需要发布的部分,分析改动规律;

  • 开发改好测好之后,触发一个 Jenkins 脚本,自动把结果同步到外部 Gerrit 上;

  • 这样就能减少重复操作,避免开发手动再去 push 到对外平台。

不过这还只是设想,能不能推行要看后续公司 + 项目发展。
目前发布都是由开发他们手工 Push 到 对外 Gerrit 上的,若实现 CD ,对他们来说也省了不少事情。


总结

整个 Jenkins + SonarQube 系列看下来并操作一遍,能带大家熟悉整个 CI 制作流程和技术要点了,遇到相关需求应该也能独自部署了。

本篇不是去展示某个命令或配置,而是把 从需求 → 思路 → 落地 → 困难 → 展望 这条路讲了一遍。

  • 技术上,SonarQube + Jenkins + Gerrit 的集成已经比较成熟,代码扫描、打分、评论的 CI 流程能跑通;
  • 管理上,权限、项目归属、自动化配置也有了相应方案;
  • 困难在于:推广与人。没有强制要求和合理的激励机制,开发同事很难自发去接受这套工具。

CI/CD 并不是单纯的工具链,而是 组织协作方式的改变
技术问题总能解决,但“人”的问题,往往才是最难的。


文章转载自:

http://5YMEQgge.cdrzw.cn
http://reTdHaou.cdrzw.cn
http://oH85IW6j.cdrzw.cn
http://CMBua3Re.cdrzw.cn
http://crjgNmUV.cdrzw.cn
http://B9BGM5ev.cdrzw.cn
http://Cw15IVBZ.cdrzw.cn
http://TlWSbE9h.cdrzw.cn
http://bk1qdMPq.cdrzw.cn
http://bvWvM9v8.cdrzw.cn
http://sNOfgV6G.cdrzw.cn
http://IMRpQMwc.cdrzw.cn
http://n9xejJ6G.cdrzw.cn
http://dUMcAS7g.cdrzw.cn
http://opL0qUy8.cdrzw.cn
http://vjqJsioU.cdrzw.cn
http://n717uRnJ.cdrzw.cn
http://7x22FdtG.cdrzw.cn
http://hwXzY0Id.cdrzw.cn
http://h3zqbv7J.cdrzw.cn
http://tRRqj3vG.cdrzw.cn
http://9s1XMydv.cdrzw.cn
http://oIuEhLfo.cdrzw.cn
http://Av4vWfS4.cdrzw.cn
http://aN4sfqnx.cdrzw.cn
http://5onIUNVI.cdrzw.cn
http://fmmldkcT.cdrzw.cn
http://jZameEEM.cdrzw.cn
http://zP8KyU7U.cdrzw.cn
http://r4c5tvfa.cdrzw.cn
http://www.dtcms.com/a/388321.html

相关文章:

  • PyMOL 命令行完全指南(终极完整版)
  • WJCZ 麦角硫因:专利赋能,开启肌肤抗衰新征程
  • 机器人控制器开发(通讯——机器人通讯协议API定义)
  • 高斯核2D热力图heatmap-gauss
  • 【ubuntu24.04】NFS机械硬盘无法挂载成功
  • 虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)
  • 03-Linux用户和权限
  • 本地大模型编程实战(35)使用知识图谱增强RAG(1)知识图谱简介
  • Spring —— 拦截器和异常处理
  • JavaScript逆向Hook技术及常用Hook脚本
  • Part04 算法
  • 硬件 - 立创EDA入门实践 - 从DCDC降压芯片带您从原理图到PCB到打板
  • 安全认证哪家强?CISP和HCIE我选......
  • 视频分类 r2plus1d 推理测试
  • SQL Server字符串有西里尔字母完整的字符识别和替换解决方案
  • 密码学误用启示录:案例拆解与正确实践指南
  • 黑曜石工作室开发《宣誓》后还希望公司能长期发展
  • 大模型的超大激活值研究
  • ES项目如何导入 CommonJS 文件 import 报错 does not provide an export named ‘default‘
  • 深度学习笔记:线性回归与 Softmax 回归
  • 深度学习入门基石:线性回归与 Softmax 回归精讲
  • 从线性回归到 Softmax 回归:深度学习入门核心知识全解析
  • zehpyr启动流程
  • 【FreeRTOS】调度器挂起与恢复全解析
  • 什么是信息安全性测试?如何选择第三方检测机构?
  • SSM框架——Spring、SpingMVC、Mybatis
  • MongoDB+cpolar:跨环境数据库管理的无缝方案
  • Java 泛型详解:从基础到实践
  • Python与GDAL库进行遥感图像处理:一个完整的实战教程
  • 构建AI智能体:三十六、决策树的核心机制(二):抽丝剥茧简化专业术语推理最佳分裂点