GitLab CI/CD용 Claude Code는 현재 베타 버전입니다. 경험을 개선하면서 기능과 기능성이 발전할 수 있습니다.

이 통합은 GitLab에서 유지 관리합니다. 지원이 필요하면 다음 GitLab 이슈를 참조하세요.

이 통합은 Claude Code CLI 및 SDK 위에 구축되어 CI/CD 작업 및 사용자 정의 자동화 워크플로우에서 Claude를 프로그래밍 방식으로 사용할 수 있습니다.

GitLab에서 Claude Code를 사용하는 이유는?

  • 즉시 MR 생성: 필요한 것을 설명하면 Claude가 변경 사항과 설명이 포함된 완전한 MR을 제안합니다
  • 자동화된 구현: 단일 명령이나 멘션으로 이슈를 작동하는 코드로 변환합니다
  • 프로젝트 인식: Claude는 CLAUDE.md 가이드라인과 기존 코드 패턴을 따릅니다
  • 간단한 설정: .gitlab-ci.yml에 하나의 작업을 추가하고 마스킹된 CI/CD 변수를 설정합니다
  • 엔터프라이즈 준비: Anthropic API, AWS Bedrock 또는 Google Vertex AI를 선택하여 데이터 거주지 및 조달 요구사항을 충족합니다
  • 기본적으로 안전: 브랜치 보호 및 승인과 함께 GitLab 러너에서 실행됩니다

작동 방식

Claude Code는 GitLab CI/CD를 사용하여 격리된 작업에서 AI 작업을 실행하고 MR을 통해 결과를 다시 커밋합니다:

  1. 이벤트 기반 오케스트레이션: GitLab은 선택한 트리거(예: 이슈, MR 또는 리뷰 스레드에서 @claude를 언급하는 댓글)를 수신합니다. 작업은 스레드와 저장소에서 컨텍스트를 수집하고, 해당 입력에서 프롬프트를 구축하며, Claude Code를 실행합니다.

  2. 공급자 추상화: 환경에 맞는 공급자를 사용합니다:

    • Anthropic API (SaaS)
    • AWS Bedrock (IAM 기반 액세스, 교차 지역 옵션)
    • Google Vertex AI (GCP 네이티브, Workload Identity Federation)
  3. 샌드박스 실행: 각 상호작용은 엄격한 네트워크 및 파일시스템 규칙이 있는 컨테이너에서 실행됩니다. Claude Code는 작업공간 범위 권한을 적용하여 쓰기를 제한합니다. 모든 변경 사항은 MR을 통해 흐르므로 검토자가 차이점을 보고 승인이 여전히 적용됩니다.

지연 시간을 줄이고 데이터 주권 요구사항을 충족하면서 기존 클라우드 계약을 사용하기 위해 지역 엔드포인트를 선택하세요.

Claude가 할 수 있는 일은?

Claude Code는 코드 작업 방식을 변화시키는 강력한 CI/CD 워크플로우를 가능하게 합니다:

  • 이슈 설명이나 댓글에서 MR 생성 및 업데이트
  • 성능 회귀 분석 및 최적화 제안
  • 브랜치에서 직접 기능 구현 후 MR 열기
  • 테스트나 댓글로 식별된 버그 및 회귀 수정
  • 요청된 변경 사항을 반복하기 위한 후속 댓글에 응답

설정

빠른 설정

시작하는 가장 빠른 방법은 .gitlab-ci.yml에 최소한의 작업을 추가하고 API 키를 마스킹된 변수로 설정하는 것입니다.

  1. 마스킹된 CI/CD 변수 추가

    • 설정CI/CD변수로 이동
    • ANTHROPIC_API_KEY 추가 (마스킹됨, 필요에 따라 보호됨)
  2. .gitlab-ci.yml에 Claude 작업 추가

stages:
  - ai

claude:
  stage: ai
  image: node:24-alpine3.21
  # 작업을 트리거하는 방법에 맞게 규칙 조정:
  # - 수동 실행
  # - 병합 요청 이벤트
  # - '@claude'가 포함된 댓글이 있을 때 웹/API 트리거
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  variables:
    GIT_STRATEGY: fetch
  before_script:
    - apk update
    - apk add --no-cache git curl bash
    - npm install -g @anthropic-ai/claude-code
  script:
    # 선택사항: 설정에서 제공하는 경우 GitLab MCP 서버 시작
    - /bin/gitlab-mcp-server || true
    # 컨텍스트 페이로드와 함께 웹/API 트리거를 통해 호출할 때 AI_FLOW_* 변수 사용
    - echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"
    - >
      claude
      -p "${AI_FLOW_INPUT:-'이 MR을 검토하고 요청된 변경 사항을 구현하세요'}"
      --permission-mode acceptEdits
      --allowedTools "Bash(*) Read(*) Edit(*) Write(*) mcp__gitlab"
      --debug

작업과 ANTHROPIC_API_KEY 변수를 추가한 후, CI/CD파이프라인에서 수동으로 작업을 실행하거나 MR에서 트리거하여 Claude가 브랜치에서 업데이트를 제안하고 필요한 경우 MR을 열도록 테스트하세요.

Anthropic API 대신 AWS Bedrock 또는 Google Vertex AI에서 실행하려면 인증 및 환경 설정에 대한 아래의 AWS Bedrock 및 Google Vertex AI와 함께 사용 섹션을 참조하세요.

수동 설정 (프로덕션 권장)

더 제어된 설정을 선호하거나 엔터프라이즈 공급자가 필요한 경우:

  1. 공급자 액세스 구성:

    • Anthropic API: ANTHROPIC_API_KEY를 마스킹된 CI/CD 변수로 생성 및 저장
    • AWS Bedrock: GitLabAWS OIDC 구성 및 Bedrock용 IAM 역할 생성
    • Google Vertex AI: GitLab용 Workload Identity FederationGCP 구성
  2. GitLab API 작업을 위한 프로젝트 자격 증명 추가:

    • 기본적으로 CI_JOB_TOKEN 사용하거나 api 범위가 있는 프로젝트 액세스 토큰 생성
    • PAT를 사용하는 경우 GITLAB_ACCESS_TOKEN으로 저장 (마스킹됨)
  3. .gitlab-ci.yml에 Claude 작업 추가 (아래 예제 참조)

  4. (선택사항) 멘션 기반 트리거 활성화:

    • 이벤트 리스너(사용하는 경우)에 “댓글(노트)“에 대한 프로젝트 웹훅 추가
    • 댓글에 @claude가 포함될 때 AI_FLOW_INPUTAI_FLOW_CONTEXT와 같은 변수로 파이프라인 트리거 API를 호출하도록 리스너 설정

사용 사례 예제

이슈를 MR로 변환

이슈 댓글에서:

@claude 이슈 설명을 기반으로 이 기능을 구현하세요

Claude는 이슈와 코드베이스를 분석하고, 브랜치에서 변경 사항을 작성하며, 검토를 위해 MR을 엽니다.

구현 도움 받기

MR 토론에서:

@claude 이 API 호출의 결과를 캐시하는 구체적인 접근 방식을 제안하세요

Claude는 변경 사항을 제안하고, 적절한 캐싱이 포함된 코드를 추가하며, MR을 업데이트합니다.

버그 빠르게 수정

이슈 또는 MR 댓글에서:

@claude 사용자 대시보드 구성 요소의 TypeError를 수정하세요

Claude는 버그를 찾아 수정을 구현하고 브랜치를 업데이트하거나 새 MR을 엽니다.

AWS Bedrock 및 Google Vertex AI와 함께 사용

엔터프라이즈 환경에서는 동일한 개발자 경험으로 클라우드 인프라에서 Claude Code를 완전히 실행할 수 있습니다.

전제 조건

AWS Bedrock과 함께 Claude Code를 설정하기 전에 다음이 필요합니다:

  1. 원하는 Claude 모델에 대한 Amazon Bedrock 액세스가 있는 AWS 계정
  2. AWS IAM에서 OIDC ID 공급자로 구성된 GitLab
  3. Bedrock 권한과 GitLab 프로젝트/참조로 제한된 신뢰 정책이 있는 IAM 역할
  4. 역할 가정을 위한 GitLab CI/CD 변수:
    • AWS_ROLE_TO_ASSUME (역할 ARN)
    • AWS_REGION (Bedrock 지역)

설정 지침

GitLab CI 작업이 OIDC를 통해 IAM 역할을 가정할 수 있도록 AWS를 구성합니다(정적 키 없음).

필수 설정:

  1. Amazon Bedrock을 활성화하고 대상 Claude 모델에 대한 액세스 요청
  2. 아직 없는 경우 GitLab용 IAM OIDC 공급자 생성
  3. GitLab OIDC 공급자가 신뢰하고 프로젝트 및 보호된 참조로 제한된 IAM 역할 생성
  4. Bedrock 호출 API에 대한 최소 권한 연결

CI/CD 변수에 저장할 필수 값:

  • AWS_ROLE_TO_ASSUME
  • AWS_REGION

설정 → CI/CD → 변수에서 변수 추가:

# AWS Bedrock용:
- AWS_ROLE_TO_ASSUME
- AWS_REGION

위의 AWS Bedrock 작업 예제를 사용하여 런타임에 GitLab 작업 토큰을 임시 AWS 자격 증명으로 교환하세요.

구성 예제

다음은 파이프라인에 적용할 수 있는 즉시 사용 가능한 스니펫입니다.

기본 .gitlab-ci.yml (Anthropic API)

stages:
  - ai

claude:
  stage: ai
  image: node:24-alpine3.21
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
  variables:
    GIT_STRATEGY: fetch
  before_script:
    - apk update
    - apk add --no-cache git curl bash
    - npm install -g @anthropic-ai/claude-code
  script:
    - /bin/gitlab-mcp-server || true
    - >
      claude
      -p "${AI_FLOW_INPUT:-'최근 변경 사항을 요약하고 개선 사항을 제안하세요'}"
      --permission-mode acceptEdits
      --allowedTools "Bash(*) Read(*) Edit(*) Write(*) mcp__gitlab"
      --debug
  # Claude Code는 CI/CD 변수에서 ANTHROPIC_API_KEY를 사용합니다

AWS Bedrock 작업 예제 (OIDC)

전제 조건:

  • 선택한 Claude 모델에 대한 액세스가 있는 Amazon Bedrock 활성화
  • GitLab 프로젝트 및 참조를 신뢰하는 역할과 함께 AWS에서 구성된 GitLab OIDC
  • Bedrock 권한이 있는 IAM 역할 (최소 권한 권장)

필수 CI/CD 변수:

  • AWS_ROLE_TO_ASSUME: Bedrock 액세스를 위한 IAM 역할의 ARN
  • AWS_REGION: Bedrock 지역 (예: us-west-2)
claude-bedrock:
  stage: ai
  image: node:24-alpine3.21
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
  before_script:
    - apk add --no-cache bash curl jq git python3 py3-pip
    - pip install --no-cache-dir awscli
    - npm install -g @anthropic-ai/claude-code
    # GitLab OIDC 토큰을 AWS 자격 증명으로 교환
    - export AWS_WEB_IDENTITY_TOKEN_FILE="${CI_JOB_JWT_FILE:-/tmp/oidc_token}"
    - if [ -n "${CI_JOB_JWT_V2}" ]; then printf "%s" "$CI_JOB_JWT_V2" > "$AWS_WEB_IDENTITY_TOKEN_FILE"; fi
    - >
      aws sts assume-role-with-web-identity
      --role-arn "$AWS_ROLE_TO_ASSUME"
      --role-session-name "gitlab-claude-$(date +%s)"
      --web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"
      --duration-seconds 3600 > /tmp/aws_creds.json
    - export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"
    - export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"
    - export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"
  script:
    - /bin/gitlab-mcp-server || true
    - >
      claude
      -p "${AI_FLOW_INPUT:-'요청된 변경 사항을 구현하고 MR을 여세요'}"
      --permission-mode acceptEdits
      --allowedTools "Bash(*) Read(*) Edit(*) Write(*) mcp__gitlab"
      --debug
  variables:
    AWS_REGION: "us-west-2"

Bedrock의 모델 ID에는 지역별 접두사와 버전 접미사가 포함됩니다(예: us.anthropic.claude-3-7-sonnet-20250219-v1:0). 워크플로우에서 지원하는 경우 작업 구성이나 프롬프트를 통해 원하는 모델을 전달하세요.

Google Vertex AI 작업 예제 (Workload Identity Federation)

전제 조건:

  • GCP 프로젝트에서 Vertex AI API 활성화
  • GitLab OIDC를 신뢰하도록 구성된 Workload Identity Federation
  • Vertex AI 권한이 있는 서비스 계정

필수 CI/CD 변수:

  • GCP_WORKLOAD_IDENTITY_PROVIDER: 전체 공급자 리소스 이름
  • GCP_SERVICE_ACCOUNT: 서비스 계정 이메일
  • CLOUD_ML_REGION: Vertex 지역 (예: us-east5)
claude-vertex:
  stage: ai
  image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
  before_script:
    - apt-get update && apt-get install -y git nodejs npm && apt-get clean
    - npm install -g @anthropic-ai/claude-code
    # WIF를 통해 Google Cloud에 인증 (다운로드된 키 없음)
    - >
      gcloud auth login --cred-file=<(cat <<EOF
      {
        "type": "external_account",
        "audience": "${GCP_WORKLOAD_IDENTITY_PROVIDER}",
        "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
        "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT}:generateAccessToken",
        "token_url": "https://sts.googleapis.com/v1/token"
      }
      EOF
      )
    - gcloud config set project "$(gcloud projects list --format='value(projectId)' --filter="name:${CI_PROJECT_NAMESPACE}" | head -n1)" || true
  script:
    - /bin/gitlab-mcp-server || true
    - >
      CLOUD_ML_REGION="${CLOUD_ML_REGION:-us-east5}"
      claude
      -p "${AI_FLOW_INPUT:-'요청에 따라 코드를 검토하고 업데이트하세요'}"
      --permission-mode acceptEdits
      --allowedTools "Bash(*) Read(*) Edit(*) Write(*) mcp__gitlab"
      --debug
  variables:
    CLOUD_ML_REGION: "us-east5"

Workload Identity Federation을 사용하면 서비스 계정 키를 저장할 필요가 없습니다. 저장소별 신뢰 조건과 최소 권한 서비스 계정을 사용하세요.

모범 사례

CLAUDE.md 구성

저장소 루트에 CLAUDE.md 파일을 생성하여 코딩 표준, 검토 기준 및 프로젝트별 규칙을 정의하세요. Claude는 실행 중에 이 파일을 읽고 변경 사항을 제안할 때 규칙을 따릅니다.

보안 고려사항

API 키나 클라우드 자격 증명을 저장소에 커밋하지 마세요! 항상 GitLab CI/CD 변수를 사용하세요:

  • ANTHROPIC_API_KEY를 마스킹된 변수로 추가 (필요한 경우 보호)
  • 가능한 경우 공급자별 OIDC 사용 (장기 키 없음)
  • 작업 권한 및 네트워크 송신 제한
  • 다른 기여자와 마찬가지로 Claude의 MR 검토

성능 최적화

  • CLAUDE.md를 집중적이고 간결하게 유지
  • 반복을 줄이기 위해 명확한 이슈/MR 설명 제공
  • 런어웨이 실행을 방지하기 위해 합리적인 작업 시간 초과 구성
  • 가능한 경우 러너에서 npm 및 패키지 설치 캐시

CI 비용

GitLab CI/CD와 함께 Claude Code를 사용할 때 관련 비용을 인지하세요:

  • GitLab 러너 시간:

    • Claude는 GitLab 러너에서 실행되고 컴퓨팅 분을 소비합니다
    • 자세한 내용은 GitLab 플랜의 러너 청구를 참조하세요
  • API 비용:

    • 각 Claude 상호작용은 프롬프트 및 응답 크기에 따라 토큰을 소비합니다
    • 토큰 사용량은 작업 복잡성과 코드베이스 크기에 따라 달라집니다
    • 자세한 내용은 Anthropic 가격을 참조하세요
  • 비용 최적화 팁:

    • 불필요한 턴을 줄이기 위해 구체적인 @claude 명령 사용
    • 적절한 max_turns 및 작업 시간 초과 값 설정
    • 병렬 실행을 제어하기 위해 동시성 제한

보안 및 거버넌스

  • 각 작업은 제한된 네트워크 액세스가 있는 격리된 컨테이너에서 실행됩니다
  • Claude의 변경 사항은 MR을 통해 흐르므로 검토자가 모든 차이점을 볼 수 있습니다
  • 브랜치 보호 및 승인 규칙이 AI 생성 코드에 적용됩니다
  • Claude Code는 작업공간 범위 권한을 사용하여 쓰기를 제한합니다
  • 자체 공급자 자격 증명을 가져오므로 비용이 통제됩니다

문제 해결

Claude가 @claude 명령에 응답하지 않음

  • 파이프라인이 트리거되고 있는지 확인 (수동, MR 이벤트 또는 노트 이벤트 리스너/웹훅을 통해)
  • CI/CD 변수 (ANTHROPIC_API_KEY 또는 클라우드 공급자 설정)가 있고 마스킹 해제되었는지 확인
  • 댓글에 @claude가 포함되어 있고 (/claude가 아님) 멘션 트리거가 구성되어 있는지 확인

작업이 댓글을 작성하거나 MR을 열 수 없음

  • CI_JOB_TOKEN이 프로젝트에 대한 충분한 권한을 가지고 있는지 확인하거나 api 범위가 있는 프로젝트 액세스 토큰 사용
  • --allowedTools에서 mcp__gitlab 도구가 활성화되어 있는지 확인
  • 작업이 MR 컨텍스트에서 실행되거나 AI_FLOW_* 변수를 통해 충분한 컨텍스트를 가지고 있는지 확인

인증 오류

  • Anthropic API의 경우: ANTHROPIC_API_KEY가 유효하고 만료되지 않았는지 확인
  • Bedrock/Vertex의 경우: OIDC/WIF 구성, 역할 가장 및 비밀 이름 확인; 지역 및 모델 가용성 확인

고급 구성

일반적인 매개변수 및 변수

Claude Code는 다음과 같은 일반적으로 사용되는 입력을 지원합니다:

  • prompt / prompt_file: 인라인 (-p) 또는 파일을 통해 지침 제공
  • max_turns: 앞뒤 반복 횟수 제한
  • timeout_minutes: 총 실행 시간 제한
  • ANTHROPIC_API_KEY: Anthropic API에 필요 (Bedrock/Vertex에는 사용되지 않음)
  • 공급자별 환경: AWS_REGION, Vertex용 프로젝트/지역 변수

정확한 플래그와 매개변수는 @anthropic-ai/claude-code 버전에 따라 다를 수 있습니다. 지원되는 옵션을 보려면 작업에서 claude --help를 실행하세요.

Claude의 동작 사용자 정의

Claude를 안내하는 두 가지 주요 방법이 있습니다:

  1. CLAUDE.md: 코딩 표준, 보안 요구사항 및 프로젝트 규칙을 정의합니다. Claude는 실행 중에 이를 읽고 규칙을 따릅니다.
  2. 사용자 정의 프롬프트: 작업에서 prompt/prompt_file을 통해 작업별 지침을 전달합니다. 다양한 작업에 대해 다른 프롬프트를 사용하세요 (예: 검토, 구현, 리팩터링).