多个.NET微服务使用同一SonarQube项目完成代码分析方案咨询
结果被覆盖是SonarQube的正常运行逻辑吗?
是正常逻辑。SonarQube以projectKey作为项目的唯一识别标识,和projectName无关。你三个微服务的扫描配置用了完全相同的projectKey,SonarQube会把每次扫描都判定为同一个项目的新版本构建,自然会用新的扫描结果覆盖旧数据。
能不能在同一个SonarQube项目中存放所有微服务的分析结果?
可以,你可以通过配置模块的方式实现,不会出现结果覆盖的问题。
配置方法
针对你使用的MSBuild扫描模式,只需要在每个微服务的SonarQubePrepare任务中新增extraProperties配置,为每个微服务指定唯一的sonar.moduleKey即可,示例配置如下:
- task: SonarQubePrepare@4 inputs: SonarQube: 'SonarQube Enterprise' scannerMode: 'MSBuild' projectKey: 'mysonarqube' # 聚合项目的名称统一即可,不需要每个微服务单独修改 projectName: '全量微服务聚合项目' extraProperties: | # 每个微服务的moduleKey保证唯一即可 sonar.moduleKey=mysonarqube.microservice1 sonar.moduleName=microservice1
三个微服务分别把sonar.moduleKey和sonar.moduleName对应改为microservice2、microservice3的标识即可,最终所有模块的扫描结果会聚合在同一个mysonarqube项目下展示,不会互相覆盖。
是否必须为每个微服务单独创建SonarQube项目?
不需要强制单独创建,可根据你的使用场景选择方案:
- 如果三个微服务属于同一个代码仓库、每次都是同步构建发布,推荐用上面的多模块方案,放在同一个SonarQube项目下管理
- 如果三个微服务是独立仓库、独立迭代发布,更推荐给每个微服务单独创建SonarQube项目(即每个微服务配置唯一的
projectKey),你使用的SonarQube企业版支持*应用(Application)*功能,可以把三个独立的微服务项目关联到同一个应用视图中,同样可以实现所有检测数据的统一展示,同时各微服务的扫描结果独立存储、互不影响,灵活度更高。
内容的提问来源于stack exchange,提问作者Arushiraj
相关产品推荐
相关产品推荐

