使用 Claude 的 MCP 构建全自动 SonarCloud 流水线

发布: (2026年2月21日 GMT+8 23:15)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容,我将按照要求保留源链接并保持原始格式、Markdown 语法和技术术语,仅翻译正文部分。谢谢!

Introduction

我想要 SonarCloud 代码质量报告 而不必在终端、GitHub 和 SonarCloud 的网页 UI 之间不断切换

目标: 在 Claude Code 中输入一条命令,即可立即获得完整的质量报告。

事实证明,Claude Code 的 MCP(模型上下文协议) 生态系统使这成为可能——但实现过程涉及:

  • 9 项不同的失败
  • 3 次 PAT 权限更新
  • 1 项关于 GitHub 报告 CI 状态的重要发现

我构建的

一个全自动的流水线:

You write code
   → Claude commits & pushes
      → Creates PR via GitHub MCP
         → GitHub Actions runs sonar‑scanner
            → Claude polls for completion
               → Pulls report via SonarQube MCP
                  → Shows quality gate + issues table
指标数值
总时间(提交 → 报告)~2.5 分钟
手动步骤(一次性设置后)0

Source:

The Stack

ComponentRole
Claude Code CLI编排器
mcp/sonarqube读取 SonarCloud 数据 — 质量门、问题、指标
ghcr.io/github/github‑mcp‑server管理仓库、分支、合并请求
GitHub Actions运行 sonar‑scanner
SonarCloud (free tier)托管分析结果

设置:顺畅路径(约30 分钟)

SonarCloud

  1. 通过 “Analyze new project”(分析新项目) 导入你的项目(不要手动创建)。
  2. 禁用自动分析
  3. 生成一个 项目分析令牌(不是用户令牌——参见挑战 #3)。

GitHub PAT(细粒度)

权限级别原因
Contents读取 & 写入推送文件
Workflows读取 & 写入创建 .github/workflows/ 文件
Actions读取 & 写入管理工作流运行
Pull requests读取 & 写入创建 PR
Commit statuses读取轮询 CI 状态
Metadata读取必需

缺少其中任何一项都会在不同阶段导致 403 错误。
Workflows(工作流)和 Commit statuses(提交状态)是最常被遗漏的。

MCP 服务器

# Pull Docker images
docker pull mcp/sonarqube
docker pull ghcr.io/github/github-mcp-server

# Add to Claude Code (run from terminal, NOT inside Claude)
claude mcp add sonarqube \
    --env SONARQUBE_TOKEN=YOUR_TOKEN \
    --env SONARQUBE_ORG=YOUR_ORG \
    -- docker run -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG mcp/sonarqube

claude mcp add github \
    -e GITHUB_PERSONAL_ACCESS_TOKEN=YOUR_PAT \
    -- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN \
       ghcr.io/github/github-mcp-server

# RESTART Claude Code (MCP servers only load on startup)

GitHub Actions 工作流

向你的仓库添加 两个文件

sonar-project.properties

sonar.projectKey=YourOrg_yourrepo
sonar.organization=yourorg
sonar.sources=src
sonar.exclusions=**/node_modules/**,**/dist/**

.github/workflows/sonarcloud.yml

name: SonarCloud Analysis
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  sonarcloud:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: SonarSource/sonarqube-scan-action@v5
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

Claude 可以通过 GitHub MCP 创建这两个文件——无需手动创建文件。
唯一需要在浏览器中完成的步骤:SONAR_TOKEN 添加为 GitHub Actions 的 secret(密钥)

The 9 Challenges (In Order)

#问题解决方案
1MCP 服务器未连接 – 通过 claude mcp add 添加了服务器,但工具不可用。重启 Claude Code(服务器仅在启动时加载)。
2Docker 镜像未拉取 – 配置正确但服务器无法启动。首先运行 docker pull mcp/sonarqube
3“未找到项目” – 扫描器已运行但找不到项目。使用 项目分析令牌(SonarCloud → 我的账户 → 安全)。
4工作流文件 403 错误 – Claude 无法创建 .github/workflows/sonarcloud.yml在 PAT 中添加 Workflows: 读取 & 写入 权限。
5sonar.sources 无效 – 在被扫描的分支上源目录不存在。确保 sonar.sources 指向该分支上实际存在的目录。
6自动分析冲突 – “在启用自动分析的情况下运行 CI 分析”。在 SonarCloud UI 中 禁用自动分析(MCP 无法完成此操作)。
7分支分析 404 – 对非默认分支的质量门返回 404。免费套餐仅支持 main + PR 分析。请使用基于 PR 的分析。
8自动分析不支持 Go – 仅支持 JS/TS、Python、Java、C#。对于编译型语言使用 GitHub Actions CI 方法。
9创建 PR 403 – PAT 缺少 Pull‑request 权限。在 PAT 中添加 Pull requests: 读取 & 写入 权限。

有趣的发现:GitHub 状态 vs. 检查运行

在轮询时,我使用 pull_request_read(get_status) 来判断 CI 是否完成,但即使 SonarCloud 已经结束,它仍然一直返回 “pending”

为什么? SonarCloud 通过 GitHub Check Runs 报告结果,而不是 Commit Statusesget_status 方法检查的是提交状态,所以它永远看不到已完成的检查运行。

解决方案: 将 SonarQube MCP 作为主要的轮询方式:

get_project_quality_gate_status(pullRequest: "PR_NUMBER")

只要此调用返回数据(而不是错误),就说明分析已完成——这比 GitHub 状态 API 更可靠。

干运行结果

步骤时间
Commit + push~5 s
Create PR~2 s
Poll (4 × 30 s)~2 min
Pull report~3 s
总计~2.5 min

质量门

❌ FAILED (intentionally)

发现的问题

共6项 – 2 Critical, 1 Major, 3 Minor

消除批准疲劳

默认情况下,Claude Code 会为 每个 工具调用请求权限。对于自动化流程,这会破坏体验。

解决方案:.claude/settings.local.json 中添加自动批准块:

{
  "permissions": {
    "allow": [
      "Bash(git status:*)",
      "Bash(git add:*)",
      "Bash(git commit:*)",
      "Bash(git push:*)",
      "Bash(sleep:*)",
      "mcp__sonarqube__get_project_quality_gate_status",
      "mcp__sonarqube__search_sonar_issues_in_projects",
      "mcp__github__create_pull_request",
      "mcp__github__pull_request_read"
    ]
  }
}

此设置会自动批准必要的 Git 命令、轮询睡眠以及 MCP 工具调用,为您提供真正的 单命令 体验。

MCP 能做和不能做的事

✅ 能做

  • 读取质量门、问题、度量指标
  • 触发 GitHub Actions 重跑
  • 创建文件、分支、PR
  • 创建 GitHub secrets
  • 推送提交,读取差异
  • 更改 SonarCloud 项目设置
  • 在本地分析代码片段
  • 实时监控工作流日志

❌ 不能做(暂时)

(暂无项目)

免费层提示

  • 私有仓库: 50 k 行免费。积极使用 sonar.exclusions
  • PR 分析: 在免费层可用且仅扫描新代码——保持在配额内的最佳策略。
  • 分支分析: 需要付费层。改用 PR。

完整指南

包括上述所有内容以及示例配置、“Feed to Claude”说明(使任何 Claude Code 实例都能运行此流程)和详细的故障排除:

aadhin/claude-sonarcloud‑guide on GitHub

在开发 Go + React/TypeScript 桌面应用(Wails v2)时编写。SonarCloud 免费层 + GitHub Actions CI。

0 浏览
Back to Blog

相关文章

阅读更多 »

Subnetting 详解

什么是 Subnetting?可以把它想象成把一栋大型公寓楼拆分成不同的楼层。每层 subnet 拥有自己的编号主机(hosts),以及建筑……