You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NX monorepo下配置SonarCloud分析及GitHub Actions按需运行问题

NX Monorepo 多Angular项目/库的SonarCloud差异化分析方案

1. SonarCloud 按项目/库分别分析配置

  • 首先在SonarCloud控制台为仓库下每一个需要分析的应用、库分别创建独立的Sonar子项目,记录每个子项目的项目密钥(sonar.projectKey)和组织密钥(sonar.organization)
  • 关闭SonarCloud对应仓库的自动扫描功能,避免全局扫描结果和单项目扫描结果冲突
  • 为每个NX项目的根目录新增专属sonar-project.properties配置文件,示例路径如apps/admin/sonar-project.properties、libs/ui/sonar-project.properties,配置参考:
sonar.projectKey=你的对应Sonar子项目密钥
sonar.organization=你的Sonar组织密钥
sonar.projectName=该项目/库在SonarCloud中的展示名称
sonar.sources=src
sonar.host.url=https://sonarcloud.io
sonar.javascript.lcov.reportPaths=coverage/[替换为当前项目的路径]/lcov.info
sonar.typescript.tsconfigPath=tsconfig.json
  • NX仓库根目录不要放置全局sonar配置文件,避免优先级冲突。

2. GitHub Actions 仅分析变更项目的配置

核心逻辑复用NX原生的affected能力识别变更项目,无需自行实现文件diff逻辑:

  • 第一步在GitHub仓库的Secrets配置页添加SONAR_TOKEN,值为SonarCloud生成的全局访问令牌,需确保该令牌有权限访问所有你创建的Sonar子项目
  • 新增GitHub Actions workflow文件,路径为.github/workflows/sonar-affected-analysis.yml,配置参考:
name: SonarCloud 变更项目分析
on:
  push:
    branches: [ main ] # 替换为你的主分支名
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  sonar-analysis:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 必须拉取全量提交历史,NX才能正确计算变更范围
      - uses: actions/setup-node@v4
        with:
          node-version: 20 # 替换为你项目使用的Node版本
          cache: 'npm'
      - run: npm ci
      # 仅为变更的项目生成测试覆盖率报告,按需调整test的参数
      - run: npx nx affected --target=test --code-coverage --skip-nx-cache
      - name: 执行变更项目Sonar扫描
        run: |
          # 获取所有变更的项目名列表
          AFFECTED_PROJECTS=$(npx nx show projects --affected --json | jq -r '.[]')
          for PROJECT in $AFFECTED_PROJECTS
          do
            # 获取项目对应的根目录路径
            PROJECT_ROOT=$(npx nx show project $PROJECT --json | jq -r '.root')
            echo "正在扫描项目:$PROJECT,路径:$PROJECT_ROOT"
            # 进入对应项目目录执行扫描
            cd $PROJECT_ROOT
            npx sonar-scanner -Dsonar.token=${{ secrets.SONAR_TOKEN }}
            cd -
          done

可选优化配置

如果NX版本≥16,可以直接给所有项目添加统一的sonar执行target,简化CI逻辑:

  • 在NX根目录的nx.json中添加target配置:
{
  "targetDefaults": {
    "sonar": {
      "executor": "nx:run-commands",
      "options": {
        "command": "sonar-scanner -Dsonar.token=$SONAR_TOKEN",
        "cwd": "{projectRoot}"
      },
      "dependsOn": ["test"]
    }
  }
}
  • 此时CI中的扫描步骤可以直接简化为一行命令:
    npx nx affected --target=sonar --skip-nx-cache

内容的提问来源于stack exchange,提问作者aneeshere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:15:08