GitHub Actions 통합

Claude Code는 GitHub Actions와 통합하여 완전히 자동화된 CI/CD 워크플로우를 구축할 수 있습니다.

Claude Code GHA (GitHub Actions)

GitHub Actions 내에서 Claude Code를 실행하여 다양한 자동화 작업을 수행할 수 있습니다:

기본 워크플로우 예시

name: Claude Code Automation

on:
  issues:
    types: [opened, labeled]
  pull_request:
    types: [opened, synchronize]

jobs:
  claude-automation:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Claude Code
        run: |
          npm install -g @anthropic-ai/claude-code
          
      - name: Run Claude Code
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          claude -p "이 이슈를 분석하고 해결책을 제안해줘: ${{ github.event.issue.body }}"

PR 자동 리뷰

name: Claude PR Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - name: Get changed files
        id: changed-files
        run: |
          echo "files=$(git diff --name-only origin/main...HEAD | tr ' )" >> $GITHUB_OUTPUT
          
      - name: Claude Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npm install -g @anthropic-ai/claude-code
          claude -p "다음 파일들을 리뷰해줘: ${{ steps.changed-files.outputs.files }}"

이슈 → 구현 → PR 자동화

name: Claude Issue Implementation

on:
  issues:
    types: [labeled]

jobs:
  implement:
    if: github.event.label.name == 'claude-implement'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Implement Feature
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          npm install -g @anthropic-ai/claude-code
          claude -p "이 이슈를 구현하고 PR을 생성해줘: ${{ github.event.issue.body }}"

Claude Code SDK

TypeScript SDK

import Anthropic from '@anthropic-ai/sdk';

const anthropic = new Anthropic();

async function runClaudeCode() {
  const message = await anthropic.messages.create({
    model: "claude-opus-4-5-20251101",
    max_tokens: 4096,
    messages: [
      {
        role: "user",
        content: "이 함수를 리팩토링해줘..."
      }
    ]
  });
  
  console.log(message.content);
}

Python SDK

import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-opus-4-5-20251101",
    max_tokens=4096,
    messages=[
        {
            "role": "user",
            "content": "이 함수를 리팩토링해줘..."
        }
    ]
)

print(message.content)

SDK 주요 사용 사례

1. 대규모 병렬 스크립팅

#!/bin/bash
# 여러 파일에 대해 병렬로 리팩토링 수행
find . -name "*.ts" | parallel -j4 'claude -p "리팩토링: {}"'

2. 내부 채팅 도구

// 복잡한 프로세스를 간단한 인터페이스로 래핑
const { execSync } = require('child_process');

function askClaude(question) {
  const result = execSync(`claude -p "${question}"`);
  return result.toString();
}

// 비기술 사용자를 위한 간단한 인터페이스
askClaude("이 버그를 수정해줘: 로그인이 안 됩니다");

3. 빠른 프로토타이핑

# 에이전트 작업 PoC
claude -p "새로운 API 엔드포인트를 만들어줘: 
- GET /api/users - 사용자 목록
- POST /api/users - 사용자 생성
- PUT /api/users/:id - 사용자 수정
- DELETE /api/users/:id - 사용자 삭제"

CI/CD 베스트 프랙티스

  1. API 키 보안: GitHub Secrets에 ANTHROPIC_API_KEY 저장
  2. 권한 제한: --tools 플래그로 필요한 도구만 허용
  3. 감사 로그: 모든 Claude 실행을 로깅
  4. 타임아웃 설정: 긴 실행 작업에 적절한 타임아웃
  5. 비용 관리: 토큰 사용량 모니터링

Slack/Jira 통합 예시

# Slack에서 트리거된 워크플로우
name: Slack-triggered Implementation

on:
  repository_dispatch:
    types: [slack-command]

jobs:
  implement:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Run Claude
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          JIRA_TOKEN: ${{ secrets.JIRA_TOKEN }}
        run: |
          # Slack 메시지에서 작업 추출
          TASK="${{ github.event.client_payload.message }}"
          
          # Claude로 작업 수행
          claude -p "JIRA 티켓을 확인하고 구현해줘: $TASK"
          
          # 결과를 Slack으로 전송
          curl -X POST ${{ secrets.SLACK_WEBHOOK }} \
            -d '{"text": "작업 완료: '$TASK'"}'

참고 자료: