Contents
see ListGitHub 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 베스트 프랙티스
- API 키 보안: GitHub Secrets에 ANTHROPIC_API_KEY 저장
- 권한 제한:
--tools플래그로 필요한 도구만 허용 - 감사 로그: 모든 Claude 실행을 로깅
- 타임아웃 설정: 긴 실행 작업에 적절한 타임아웃
- 비용 관리: 토큰 사용량 모니터링
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'"}'
참고 자료: