Azure Pipeline部署Angular项目时SonarCloud代码分析失败:无法找到默认分支问题排查
从你给出的错误日志和Pipeline配置来看,这个Could not find a default branch to fall back on错误主要是SonarCloud无法识别当前扫描的分支关联,尤其是首次扫描该项目时,SonarCloud还没有对应项目的分支配置。下面是具体的排查和解决步骤:
1. 确认SonarCloud中是否已创建对应项目
你的扫描配置中指定的项目Key是orga_${{parameters.serviceName}}(也就是orga_EPP_Client),请先登录SonarCloud后台,进入orga组织,检查是否已经存在这个项目:
- 如果不存在,手动创建该项目,并设置好默认分支(比如
main或master,和你的代码仓库默认分支保持一致)。 - 如果已经存在,检查项目的默认分支是否正确配置,有没有和当前Pipeline运行的分支匹配。
2. 在SonarQubePrepare任务中添加分支参数
即使SonarCloud中已创建项目,首次在非默认分支扫描,或者Pipeline没有自动传递分支信息时,也会触发这个错误。你需要在SonarQubePrepare的extraProperties中明确指定分支信息:
修改你的SonarQubePrepare任务,添加分支相关配置:
- task: SonarQubePrepare@5 displayName: 'Prepare analysis configuration' inputs: SonarQube: 'EPP' organization: orga scannerMode: 'CLI' configMode: 'manual' cliProjectKey: 'orga_${{parameters.serviceName}}' cliProjectName: 'orga_${{parameters.serviceName}}' cliSources: 'src/app' extraProperties: | sonar.projectKey=orga_${{parameters.serviceName}} sonar.projectName=orga_${{parameters.serviceName}} sonar.typescript.tsconfigPath=src/app/tsconfig.json sonar.sources=src/app sonar.test=src/app sonar.test.inclusions=src/app/**/*.spec.ts sonar.exclusions=**/node_modules/* sonar.javascript.lcov.reportPaths=src/app/coverage/lcov.info,src/app/coverage-e2e/lcov.info # 添加以下分支配置 sonar.branch.name=$(Build.SourceBranchName)
$(Build.SourceBranchName)是Azure Pipeline的内置变量,会自动获取当前运行的分支名称(比如main、feature/test等),这样SonarCloud就能明确关联到对应的分支。
3. 检查Docker任务的SonarQube扫描是否冲突
注意到你的Docker@2任务中设置了sonarQubeRunAnalysis: true,这个参数是用来对Docker镜像进行SonarQube分析的,而后面你又单独添加了针对Angular代码的SonarCloud扫描任务。这两个扫描可能会产生冲突,尤其是当它们共用同一个SonarCloud项目Key时。
如果你的目标是扫描Angular代码,建议把Docker任务中的sonarQubeRunAnalysis: true去掉,避免重复扫描导致的异常。
4. 确保首次扫描在默认分支进行
如果这是你第一次扫描这个Angular项目,建议先在默认分支(比如main)上运行Pipeline,这样SonarCloud会自动把该分支标记为项目的默认分支,后续在其他分支扫描时就不会再出现这个错误。
按照以上步骤调整后,重新运行Pipeline,应该就能解决这个分支识别的问题了。
内容的提问来源于stack exchange,提问作者Mirlo

