使用 Claude 的 MCP 构建全自动 SonarCloud 流水线
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
| Component | Role |
|---|---|
| Claude Code CLI | 编排器 |
| mcp/sonarqube | 读取 SonarCloud 数据 — 质量门、问题、指标 |
| ghcr.io/github/github‑mcp‑server | 管理仓库、分支、合并请求 |
| GitHub Actions | 运行 sonar‑scanner |
| SonarCloud (free tier) | 托管分析结果 |
设置:顺畅路径(约30 分钟)
SonarCloud
- 通过 “Analyze new project”(分析新项目) 导入你的项目(不要手动创建)。
- 禁用自动分析。
- 生成一个 项目分析令牌(不是用户令牌——参见挑战 #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)
| # | 问题 | 解决方案 |
|---|---|---|
| 1 | MCP 服务器未连接 – 通过 claude mcp add 添加了服务器,但工具不可用。 | 重启 Claude Code(服务器仅在启动时加载)。 |
| 2 | Docker 镜像未拉取 – 配置正确但服务器无法启动。 | 首先运行 docker pull mcp/sonarqube。 |
| 3 | “未找到项目” – 扫描器已运行但找不到项目。 | 使用 项目分析令牌(SonarCloud → 我的账户 → 安全)。 |
| 4 | 工作流文件 403 错误 – Claude 无法创建 .github/workflows/sonarcloud.yml。 | 在 PAT 中添加 Workflows: 读取 & 写入 权限。 |
| 5 | sonar.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 Statuses。get_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。