多项目解决方案分CI管道构建,如何用SonarQube实现代码分析?
多CI管道下SonarQube分组分析多项目的解决方案
嘿,我刚好处理过和你一模一样的场景——一个大解决方案拆成两组项目,分别在不同CI管道构建,还要对应不同的SonarQube代码分析。既然你已经有了两个sonar-project.properties的雏形,咱们把这个思路落地得更顺畅,不用手动传参数也能让每个管道自动匹配对应配置。
方案1:给属性文件分组命名,CI管道指定配置路径
这是最贴合你现有操作的方式,简单直接:
- 把对应3个项目的配置文件改名为
sonar-group1.properties,对应2个项目的改名为sonar-group2.properties - 在第一个CI管道(负责3个项目的)里,执行sonar-scanner时指定这个配置文件:
sonar-scanner -Dsonar.properties=sonar-group1.properties - 在第二个CI管道(负责2个项目的)里,换成对应的配置文件:
sonar-scanner -Dsonar.properties=sonar-group2.properties
这样每个管道会精准加载自己的配置,完全不用改动基础命令,只是在CI脚本里替换配置文件名就行。
方案2:用CI环境变量动态覆盖项目范围
如果不想维护两个独立的属性文件,也可以用一个基础配置,然后在CI里动态指定要分析的项目:
- 先写一个通用的
sonar-project.properties,只保留全局参数(比如SonarQube地址、登录令牌这些),项目列表留空:sonar.host.url=你的SonarQube服务地址 sonar.login=你的分析令牌 # 项目范围由CI管道动态指定 sonar.inclusions= - 在第一个CI管道里,执行sonar-scanner时通过
-D参数直接指定要包含的3个项目:sonar-scanner -Dsonar.inclusions="ProjectA/**/*.cs,ProjectB/**/*.cs,ProjectC/**/*.cs" - 在第二个CI管道里,修改
sonar.inclusions的值为另外2个项目:sonar-scanner -Dsonar.inclusions="ProjectD/**/*.cs,ProjectE/**/*.cs"
这种方式更灵活,要是以后项目分组变动,不用改属性文件,只需要调整CI脚本里的参数就行。
额外提醒
- 不管用哪种方案,一定要确保CI管道在跑sonar-scanner之前,已经完成了对应项目的构建——SonarQube需要读取构建生成的二进制文件、测试报告(如果有的话)才能完成完整的代码分析
- 要是你的项目是.NET技术栈,也可以试试SonarScanner for .NET(
dotnet sonarscanner命令),它能自动识别解决方案里的项目,配合/d:sonar.inclusions参数同样能实现分组分析,可能更贴合.NET的开发流程
内容的提问来源于stack exchange,提问作者Kaushik Kv
相关产品推荐
相关产品推荐

