GitHub Actions 통합

Claude Code를 GitHub Actions 워크플로우에 통합하여 CI/CD 파이프라인을 AI로 강화할 수 있습니다. 코드 리뷰, 문서 생성, 테스트 자동화 등 다양한 작업을 자동화할 수 있습니다.

기본 설정

먼저 GitHub 리포지토리에 Claude Code API 키를 시크릿으로 추가해야 합니다.

  1. GitHub 리포지토리의 Settings → Secrets and variables → Actions로 이동
  2. "New repository secret" 클릭
  3. Name: ANTHROPIC_API_KEY
  4. Value: 실제 API 키 입력
  5. "Add secret" 클릭

자동 코드 리뷰

Pull Request가 생성되면 자동으로 코드 리뷰를 수행하는 워크플로우입니다.

name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Run Claude Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "PR의 변경사항을 리뷰하고 개선사항을 제안해줘" \
            --allowedTools Read Grep "Bash(git diff:*)"

      - name: Comment PR
        uses: actions/github-script@v6
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: '### 🤖 AI Code Review 완료\n리뷰 결과가 위에 표시됩니다.'
            })

테스트 자동 수정

테스트가 실패하면 Claude Code가 자동으로 수정을 시도하는 워크플로우입니다.

name: Auto Fix Tests
on:
  push:
    branches: [main, develop]

jobs:
  test-and-fix:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Setup environment
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        id: test
        continue-on-error: true
        run: npm test

      - name: Fix failing tests
        if: steps.test.outcome == 'failure'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "테스트를 실행하고 실패한 테스트를 수정해줘" \
            --allowedTools Read Write "Bash(npm test:*)"

      - name: Commit fixes
        if: steps.test.outcome == 'failure'
        run: |
          git config --local user.email "claude-bot@example.com"
          git config --local user.name "Claude Bot"
          git add .
          git commit -m "fix: Auto-fix failing tests 🤖"
          git push

문서 자동 생성

코드 변경사항을 기반으로 문서를 자동으로 업데이트하는 워크플로우입니다.

name: Update Documentation
on:
  push:
    branches: [main]
    paths:
      - 'src/**'
      - 'lib/**'

jobs:
  update-docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Generate API documentation
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "API 문서를 최신 코드 변경사항에 맞게 업데이트해줘" \
            --allowedTools Read Write Grep

      - name: Update README
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "README의 사용 예제를 최신 API에 맞게 업데이트해줘" \
            --allowedTools Read Write

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v5
        with:
          commit-message: 'docs: Update documentation 📚'
          title: 'Update Documentation'
          body: 'Automated documentation update based on recent code changes.'
          branch: 'update-docs'

릴리스 노트 생성

새 버전을 릴리스할 때 자동으로 릴리스 노트를 생성합니다.

name: Generate Release Notes
on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Generate release notes
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "이전 태그 이후의 커밋을 분석하고 릴리스 노트를 생성해줘" \
            --allowedTools "Bash(git log:*)" "Bash(git diff:*)" Write \
            > release_notes.md

      - name: Create Release
        uses: softprops/action-gh-release@v1
        with:
          body_path: release_notes.md
          draft: false
          prerelease: false

보안 스캔 및 수정

보안 취약점을 스캔하고 자동으로 수정하는 워크플로우입니다.

name: Security Scan and Fix
on:
  schedule:
    - cron: '0 0 * * 1'  # 매주 월요일
  workflow_dispatch:

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Run security audit
        run: npm audit --json > audit.json

      - name: Fix vulnerabilities
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "npm audit 결과를 분석하고 보안 취약점을 수정해줘" \
            --allowedTools Read Write "Bash(npm:*)"

      - name: Create fix PR
        uses: peter-evans/create-pull-request@v5
        with:
          title: 'Security: Fix vulnerabilities 🔒'
          body: 'Automated security vulnerability fixes'
          branch: 'security-fixes'

워크플로우 모범 사례

💡 GitHub Actions 통합 팁

  • 도구 제한: 필요한 도구만 허용하여 보안 강화
  • 타임아웃 설정: 긴 작업에는 적절한 타임아웃 설정
  • 비용 관리: API 호출 횟수 모니터링
  • 캐싱 활용: 의존성 캐싱으로 실행 시간 단축
  • 병렬 실행: 독립적인 작업은 병렬로 실행

복합 워크플로우 예제

name: Complete CI/CD Pipeline
on: [push, pull_request]

jobs:
  analyze:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Code quality check
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          npx @anthropic-ai/claude-code -p \
            "코드 품질을 분석하고 개선사항을 제안해줘" \
            --allowedTools Read Grep

  test:
    needs: analyze
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm test

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to production
        run: echo "Deploying..."

다음 단계