Claude의 MCP를 사용한 완전 자동 SonarCloud 파이프라인 구축

발행: (2026년 2월 22일 오전 12:15 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

위의 링크에 있는 전체 텍스트를 제공해 주시면, 해당 내용을 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 기술 용어는 그대로 유지됩니다.)

소개

터미널, GitHub, 그리고 SonarCloud 웹 UI를 계속 전환하지 않고도 SonarCloud 코드‑품질 보고서를 원했습니다.

목표: Claude Code에서 한 번의 명령만 입력하면 즉시 전체 품질 보고서를 받아볼 수 있습니다.

결과적으로 Claude Code의 MCP (Model Context Protocol) 생태계가 이를 가능하게 하지만, 도달하기 위해서는 다음과 같은 과정이 필요했습니다:

  • 9개의 개별 실패
  • 3개의 PAT 권한 업데이트
  • GitHub가 CI 상태를 보고하는 방식에 대한 중요한 발견 1건

내가 만든 것

완전 자동화된 파이프라인:

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
지표
총 소요 시간 (commit → report)~2.5 minutes
수동 단계 (after one‑time setup)0

Source:

The Stack

ComponentRole
Claude Code CLI오케스트레이터
mcp/sonarqubeSonarCloud 데이터 읽기 — 품질 게이트, 이슈, 메트릭
ghcr.io/github/github‑mcp‑server저장소, 브랜치, PR 관리
GitHub Actionssonar‑scanner 실행
SonarCloud (free tier)분석 결과 호스팅

설정: Happy Path (~30 분)

SonarCloud

  1. **“Analyze new project”**를 통해 프로젝트를 가져옵니다 (수동으로 만들지 마세요).
  2. 자동 분석 비활성화.
  3. 프로젝트 분석 토큰을 생성합니다 (사용자 토큰이 아니라 – Challenge #3 참고).

GitHub PAT (세분화된)

권한수준이유
ContentsRead & Write파일 푸시
WorkflowsRead & Write.github/workflows/ 파일 생성
ActionsRead & Write워크플로 실행 관리
Pull requestsRead & WritePR 생성
Commit statusesReadCI 상태 조회
MetadataRead필요

이 중 하나라도 누락되면 다양한 단계에서 403 오류가 발생합니다.
WorkflowsCommit 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 비밀로 추가합니다.

9가지 과제 (순서대로)

#IssueFix
1MCP Server Not Connectingclaude mcp add 로 서버를 추가했지만 도구가 보이지 않음.Claude Code를 재시작 (서버는 시작 시에만 로드됩니다).
2Docker Image Not Pulled – 설정은 올바른데 서버가 시작되지 않음.먼저 docker pull mcp/sonarqube 실행.
3“Project Not Found” – 스캐너는 실행됐지만 프로젝트를 찾을 수 없음.Project Analysis Token 사용 (SonarCloud → My Account → Security).
4403 on Workflow File – Claude가 .github/workflows/sonarcloud.yml 파일을 생성하지 못함.PAT에 Workflows: Read & Write 권한 추가.
5Invalid sonar.sources – 스캔 중인 브랜치에 소스 디렉터리가 존재하지 않음.sonar.sources가 해당 브랜치에 존재하는 디렉터리를 가리키도록 설정.
6Automatic Analysis Conflict – “You are running CI analysis while Automatic Analysis is enabled.”SonarCloud UI에서 Automatic Analysis 비활성화 (MCP에서는 설정 불가).
7Branch Analysis 404 – 품질 게이트가 비기본 브랜치에 대해 404 반환.무료 플랜은 main + PR 분석만 지원. PR 기반 분석 사용.
8Go Not Supported by Automatic Analysis – 자동 분석은 JS/TS, Python, Java, C#만 지원.컴파일 언어는 GitHub Actions CI 방식 사용.
9PR Creation 403 – PAT에 Pull‑request 권한이 없음.PAT에 Pull requests: Read & Write 권한 추가.

흥미로운 발견: 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보다 훨씬 신뢰할 수 있습니다.

Dry‑Run 결과

단계시간
Commit + push~5 s
Create PR~2 s
Poll (4 × 30 s)~2 min
Pull report~3 s
총합~2.5 분

품질 게이트

❌ 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 명령, 폴링 대기(sleep), 그리고 MCP 도구 호출이 자동으로 승인되어 진정한 한 번의 명령 경험을 제공합니다.

MCP가 할 수 있는 것과 할 수 없는 것

✅ 할 수 있는 것

  • 품질 게이트, 이슈, 메트릭 읽기
  • GitHub Actions 재실행 트리거
  • 파일, 브랜치, PR 생성
  • GitHub 시크릿 생성
  • 커밋 푸시, diff 읽기
  • SonarCloud 프로젝트 설정 변경
  • 로컬에서 코드 스니펫 분석
  • 워크플로 로그를 실시간으로 모니터링

❌ 아직 할 수 없는 것

(항목이 없습니다)

무료 티어 팁

  • Private repos: 50 k 라인 무료. sonar.exclusions를 적극적으로 사용하세요.
  • PR analysis: 무료 티어에서 작동하며 새 코드만 스캔합니다 — 제한을 초과하지 않기 위한 최적 전략입니다.
  • Branch analysis: 유료 티어가 필요합니다. 대신 PR을 사용하세요.

전체 가이드

위 내용에 예제 구성 파일, “Claude에 피드하기” 지침(어떤 Claude Code 인스턴스도 흐름을 실행할 수 있도록), 그리고 상세한 문제 해결이 추가됩니다:

aadhin/claude-sonarcloud‑guide on GitHub

Go + React/TypeScript 데스크톱 앱(Wails v2) 작업 중에 제작되었습니다. SonarCloud 무료 티어 + GitHub Actions CI.

0 조회
Back to Blog

관련 글

더 보기 »

서브넷팅 설명

Subnetting이란 무엇인가? 큰 아파트 건물을 여러 층으로 나누는 것과 같다. 각 층 서브넷은 자체 번호가 매겨진 유닛(hosts)을 가지고, 그리고 건물…