SonarQube 私有项目徽章显示方案

背景

sonarQube 目前不支持私有项目的徽章图片获取,这个问题早在 2018 年就在 sonar 社区里有过激烈的讨论。后面 sonar 官方也关注到了这个需求的必要性,也着手排期在做了。但是从 2020年2月份创建好了项目计划后,到现在一年过去了,还没有任何的动静,所以不等官方的版本计划了,只能自己寻求一种可以快速实施的方案

SonarQube 架构简介

先简单了解下 sonar 的运行机制。如图,运行 SonarQube  app,其实同时运行了4 个进程,app 进程负责统筹调度其他三个进程,当有插件安装需要重新加载时, app 就可以发出重启的指令。下面是详细的描述:

  • App Process:用户操作的进程,这个进程是门面,由用户控制开启或者关闭。同时也是其他三个进程的调度器,开启 app 后,会自动启动 Es、web、ce 等进程。
  • Es Process:ElasticSearch 的进程,Sonar 将 Es 的发行包内置到了Sonar 中,作为独享的搜索引擎使用,issue ,代码等数据会被 es 管理起来。
  • Web Process:web 页面 、api 的进程
  • Ce Process:ce 全称 Compute Engine 。分析计算引擎,是 sonar 的核心

分析徽章的生成

如下,是一个获取 bugs徽章的链接,我们从这个链接开始,深入分析下,在 sonar 服务的内部是怎么生成这个徽章的。在分析前,先说明下,sonar 内部没有采用 spring mvc 等任何web 框架,是自己封装的一套mvc框架,数据库查询用的 mybatis。

https://qa-sonar.dev.com/api/project_badges/measure?project=server_services_developer_AXaIXEx52AMDJFWZUd_4&metric=bugs

根据徽章资源的 /api/project_badges 找到徽章的web入口文件 ProjectBadgesService.java ,可以看到接口支持的入参情况。通过 action 模块名 measure 找到 MeasureAction.java ,生成徽章的主要逻辑都在这个里面,所在模块的目录结构如下:

从这里得知,通过徽章链接获取到的 svg 图片,是通过 project_Id 实时查出来数据,实时生成的图片。并不是每次扫描都会生成静态图片资源。也在这个模块里找到了私有项目无法生成代码的逻辑。

实施方案

1、改社区代码去掉私有的限制

这个是最简单的,但是限制也比较多。改了代码需要自己发版,功能没法和社区同步。而且如果你使用的是付费的,这个路也行不通。

2、新建一个项目,自己生成 svg

尝试获取 sonar 的所有元数据信息,然后自己生成 svg 徽章,在 url 设计上,尽量保持和 sonar 自己的风格保持一致,用法也一样。生成的徽章的风格也保持一致

结语

最后准备采用方案二,新建专门处理 sonar 徽章的项目,实施过程就不在详细说明了。sonarqube 私有项目徽章获取显示,是一个社区众望所期的功能。所以如果这个方案最后成功实施的话,项目也会在 github 开源出来,敬请期待

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/klblog/blog/5005551

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。