顯示SonarQube私有項(xiàng)目徽章方案流程
背景
sonarQube 目前不支持私有項(xiàng)目的徽章圖片獲取,這個(gè)問題早在 2018 年就在 sonar 社區(qū)里有過激烈的討論。后面 sonar 官方也關(guān)注到了這個(gè)需求的必要性,也著手排期在做了。但是從 2020年2月份創(chuàng)建好了項(xiàng)目計(jì)劃后,到現(xiàn)在一年過去了,還沒有任何的動(dòng)靜,所以不等官方的版本計(jì)劃了,只能自己尋求一種可以快速實(shí)施的方案
- 社區(qū)討論:https://community.sonarsource.com/t/badges-on-private-projects/4894
- 官方排期實(shí)現(xiàn)計(jì)劃:https://jira.sonarsource.com/browse/MMF-1942
SonarQube 架構(gòu)簡(jiǎn)介

先簡(jiǎn)單了解下 sonar 的運(yùn)行機(jī)制。如圖,運(yùn)行 SonarQube app,其實(shí)同時(shí)運(yùn)行了4 個(gè)進(jìn)程,app 進(jìn)程負(fù)責(zé)統(tǒng)籌調(diào)度其他三個(gè)進(jìn)程,當(dāng)有插件安裝需要重新加載時(shí), app 就可以發(fā)出重啟的指令。下面是詳細(xì)的描述:
- App Process:用戶操作的進(jìn)程,這個(gè)進(jìn)程是門面,由用戶控制開啟或者關(guān)閉。同時(shí)也是其他三個(gè)進(jìn)程的調(diào)度器,開啟 app 后,會(huì)自動(dòng)啟動(dòng) Es、web、ce 等進(jìn)程。
- Es Process:ElasticSearch 的進(jìn)程,Sonar 將 Es 的發(fā)行包內(nèi)置到了Sonar 中,作為獨(dú)享的搜索引擎使用,issue ,代碼等數(shù)據(jù)會(huì)被 es 管理起來。
- Web Process:web 頁面 、api 的進(jìn)程
- Ce Process:ce 全稱 Compute Engine 。分析計(jì)算引擎,是 sonar 的核心
分析徽章的生成
如下,是一個(gè)獲取 bugs徽章的鏈接,我們從這個(gè)鏈接開始,深入分析下,在 sonar 服務(wù)的內(nèi)部是怎么生成這個(gè)徽章的。在分析前,先說明下,sonar 內(nèi)部沒有采用 spring mvc 等任何web 框架,是自己封裝的一套mvc框架,數(shù)據(jù)庫查詢用的 mybatis。
https://qa-sonar.dev.com/api/project_badges/measure
project=server_services_developer_AXaIXEx52AMDJFWZUd_4&metric=bugs

根據(jù)徽章資源的 /api/project_badges 找到徽章的web入口文件 ProjectBadgesService.java ,可以看到接口支持的入?yún)⑶闆r。通過 action 模塊名 measure 找到 MeasureAction.java ,生成徽章的主要邏輯都在這個(gè)里面,所在模塊的目錄結(jié)構(gòu)如下:

從這里得知,通過徽章鏈接獲取到的 svg 圖片,是通過 project_Id 實(shí)時(shí)查出來數(shù)據(jù),實(shí)時(shí)生成的圖片。并不是每次掃描都會(huì)生成靜態(tài)圖片資源。也在這個(gè)模塊里找到了私有項(xiàng)目無法生成代碼的邏輯。
實(shí)施方案
1、改社區(qū)代碼去掉私有的限制
這個(gè)是最簡(jiǎn)單的,但是限制也比較多。改了代碼需要自己發(fā)版,功能沒法和社區(qū)同步。而且如果你使用的是付費(fèi)的,這個(gè)路也行不通。
2、新建一個(gè)項(xiàng)目,自己生成 svg
嘗試獲取 sonar 的所有元數(shù)據(jù)信息,然后自己生成 svg 徽章,在 url 設(shè)計(jì)上,盡量保持和 sonar 自己的風(fēng)格保持一致,用法也一樣。生成的徽章的風(fēng)格也保持一致
結(jié)語
最后準(zhǔn)備采用方案二,新建專門處理 sonar徽章的項(xiàng)目,實(shí)施過程就不在詳細(xì)說明了。sonarqube 私有項(xiàng)目徽章獲取顯示,是一個(gè)社區(qū)眾望所期的功能。所以如果這個(gè)方案最后成功實(shí)施的話,項(xiàng)目也會(huì)在 github 開源出來,敬請(qǐng)期待
以上就是顯示SonarQube私有項(xiàng)目徽章方案流程的詳細(xì)內(nèi)容,更多關(guān)于SonarQube私有項(xiàng)目徽章顯示的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java String字符串補(bǔ)0或空格的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java String字符串補(bǔ)0或空格的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
FuncGPT慧函數(shù)保護(hù)數(shù)據(jù)安全提高代碼質(zhì)量減少軟件故障(java示例)
這篇文章主要為大家介紹了FuncGPT慧函數(shù)保護(hù)數(shù)據(jù)安全提高代碼質(zhì)量減少軟件故障(java示例),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Springboot實(shí)現(xiàn)密碼的加密解密
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)密碼的加密解密,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
SpringBoot?@Scheduled?Cron表達(dá)式使用方式
這篇文章主要介紹了SpringBoot?@Scheduled?Cron表達(dá)式使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
使用spring stream發(fā)送消息代碼實(shí)例
這篇文章主要介紹了使用spring stream發(fā)送消息代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

