CI/CD 통합: AI 지원 워크플로우 자동화
자동화된 코드 리뷰, 테스트 생성 및 문서 업데이트를 위해 CCJK를 CI/CD 파이프라인에 통합하세요.
C
CCJK Team2025년 1월 3일
14 분 소요
1,137 회 조회
CI/CD 통합: AI 지원 워크플로우 자동화
AI 지원을 CI/CD 파이프라인에 통합하면 강력한 자동화 기능이 잠금 해제됩니다. 자동화된 코드 리뷰부터 지능형 테스트 생성까지 CCJK는 개발 워크플로우의 모든 단계를 향상시킬 수 있습니다.
개요
무엇을 자동화할 수 있나요?
| 단계 | AI 기능 |
|---|---|
| 프리커밋 | 코드 포맷팅, 린팅 제안 |
| Pull Request | 자동화된 코드 리뷰, 보안 스캔 |
| 빌드 | 문서 생성 |
| 테스트 | 테스트 커버리지 분석, 테스트 생성 |
| 배포 | 릴리스 노트, 변경 로그 생성 |
GitHub Actions 통합
기본 설정
워크플로우 파일을 생성하세요:
hljs yaml# .github/workflows/ai-review.yml
name: AI 코드 리뷰
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Node.js 설정
uses: actions/setup-node@v4
with:
node-version: '20'
- name: CCJK 설치
run: npm install -g ccjk
- name: AI 리뷰 실행
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
ccjk review --ci --output github-pr
고급 리뷰 워크플로우
hljs yaml# .github/workflows/comprehensive-review.yml
name: 포괄적인 AI 리뷰
on:
pull_request:
types: [opened, synchronize, ready_for_review]
jobs:
code-review:
runs-on: ubuntu-latest
if: github.event.pull_request.draft == false
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 설정
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm install -g ccjk
- name: 코드 품질 리뷰
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus quality \
--severity-threshold minor \
--output review-quality.md
- name: 보안 리뷰
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus security \
--severity-threshold critical \
--output review-security.md
- name: 성능 리뷰
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk review \
--focus performance \
--output review-performance.md
- name: 리뷰 코멘트 게시
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const reviews = [
'review-quality.md',
'review-security.md',
'review-performance.md'
];
let body = '## AI 코드 리뷰 요약\n\n';
for (const file of reviews) {
if (fs.existsSync(file)) {
body += fs.readFileSync(file, 'utf8') + '\n\n';
}
}
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: body
});
자동화된 테스트 생성
새 코드에 대해
hljs yaml# .github/workflows/test-generation.yml
name: AI 테스트 생성
on:
pull_request:
paths:
- 'src/**/*.ts'
- 'src/**/*.tsx'
jobs:
generate-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 설정
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm install -g ccjk
- name: 변경된 파일 식별
id: changed
run: |
FILES=$(git diff --name-only origin/main...HEAD | grep -E '\.(ts|tsx)$' | grep -v '\.test\.' | tr '\n' ' ')
echo "files=$FILES" >> $GITHUB_OUTPUT
- name: 테스트 생성
if: steps.changed.outputs.files != ''
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
for file in ${{ steps.changed.outputs.files }}; do
ccjk test generate "$file" --output "${file%.ts}.test.ts"
done
- name: 생성된 테스트 실행
run: npm test -- --passWithNoTests
- name: 테스트로 PR 생성
uses: peter-evans/create-pull-request@v5
with:
title: "test: AI 생성 테스트 추가"
body: "새 코드에 대한 자동화된 테스트 생성"
branch: ai-tests-${{ github.event.pull_request.number }}
문서 자동화
API 문서 자동 생성
hljs yaml# .github/workflows/docs-generation.yml
name: 문서 생성
on:
push:
branches: [main]
paths:
- 'src/api/**'
jobs:
generate-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 설정
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm install -g ccjk
- name: API 문서 생성
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk docs generate \
--input src/api/ \
--output docs/api/ \
--format markdown
- name: OpenAPI 스펙 생성
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
ccjk docs openapi \
--input src/api/ \
--output docs/openapi.yaml
- name: 문서 커밋
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "docs: API 문서 업데이트"
file_pattern: "docs/**"
변경 로그 생성
hljs yaml# .github/workflows/changelog.yml
name: 변경 로그 생성
on:
release:
types: [created]
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 설정
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g ccjk
- name: 변경 로그 생성
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^)
ccjk changelog generate \
--from $PREV_TAG \
--to ${{ github.ref_name }} \
--output CHANGELOG_ENTRY.md
- name: 릴리스 노트 업데이트
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const changelog = fs.readFileSync('CHANGELOG_ENTRY.md', 'utf8');
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ github.event.release.id }},
body: changelog
});
GitLab CI 통합
hljs yaml# .gitlab-ci.yml
stages:
- review
- test
- docs
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
ai-review:
stage: review
image: node:20
script:
- npm install -g ccjk
- ccjk review --ci --output gitlab-mr
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
ai-test-coverage:
stage: test
image: node:20
script:
- npm ci
- npm install -g ccjk
- npm test -- --coverage
- ccjk analyze coverage --input coverage/lcov.info --suggest-tests
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
ai-docs:
stage: docs
image: node:20
script:
- npm install -g ccjk
- ccjk docs generate --input src/ --output public/docs/
artifacts:
paths:
- public/docs/
rules:
- if: $CI_COMMIT_BRANCH == "main"
프리커밋 훅
Husky로 설정
hljs bash# husky 설치
npm install -D husky
npx husky init
hljs bash# .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# AI 지원 프리커밋 검사 실행
npx ccjk precommit --staged-only
프리커밋 구성
hljs yaml# .claude/precommit.yaml
checks:
- name: "코드 품질"
command: ccjk lint --fix
on: ["*.ts", "*.tsx", "*.js", "*.jsx"]
- name: "보안 스캔"
command: ccjk security --quick
on: ["*.ts", "*.tsx"]
block: true # 문제가 발견되면 커밋 차단
- name: "커밋 메시지"
command: ccjk commit --validate
on: commit-msg
모범 사례
1. 속도 제한
과도한 API 호출 방지:
hljs yaml# 중요한 변경에만 실행
on:
pull_request:
paths:
- 'src/**'
- '!src/**/*.test.*'
- '!src/**/*.spec.*'
- '!**/*.md'
2. 캐싱
적절한 경우 AI 응답 캐시:
hljs yaml- name: AI 응답 캐시
uses: actions/cache@v3
with:
path: .ccjk-cache
key: ccjk-${{ hashFiles('src/**') }}
3. 비용 관리
지출 한도 설정:
hljs yaml- name: AI 리뷰
env:
CCJK_MAX_TOKENS: 10000
CCJK_MAX_COST: 0.50
run: ccjk review --ci
4. 폴백 처리
API 실패를 우아하게 처리:
hljs yaml- name: AI 리뷰
continue-on-error: true
id: ai-review
run: ccjk review --ci
- name: 폴백 알림
if: steps.ai-review.outcome == 'failure'
run: echo "AI 리뷰를 사용할 수 없습니다. 수동 리뷰가 필요합니다"
보안 고려 사항
비밀 관리
hljs yaml# GitHub secrets 사용
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
# 비밀을 절대 로깅하지 마세요
- name: 리뷰
run: |
ccjk review --ci 2>&1 | grep -v "API"
코드 프라이버시
AI로 전송되는 내용 구성:
hljs yaml# .claude/ci-config.yaml
privacy:
exclude:
- "**/*.env*"
- "**/secrets/**"
- "**/credentials/**"
redact:
- pattern: "api[_-]?key"
replacement: "[REDACTED]"
- pattern: "password"
replacement: "[REDACTED]"
모니터링 및 메트릭
AI CI 성능 추적
hljs yaml- name: 메트릭 기록
run: |
echo "review_duration=${{ steps.review.outputs.duration }}" >> metrics.txt
echo "issues_found=${{ steps.review.outputs.issues }}" >> metrics.txt
echo "tokens_used=${{ steps.review.outputs.tokens }}" >> metrics.txt
- name: 모니터링으로 전송
run: |
curl -X POST ${{ secrets.METRICS_ENDPOINT }} \
-d @metrics.txt
결론
CI/CD 통합은 AI 지원을 개발자 도구에서 팀 전체 품질 게이트로 변환합니다. 간단한 리뷰 자동화로 시작한 다음 점차 더 정교한 워크플로우를 추가하세요.
주요 이점:
- 모든 PR에서 일관된 코드 품질
- 수동 리뷰 부담 감소
- 더 빠른 피드백 루프
- 자동화된 문서화
다음: 원활한 개발 경험을 위한 VS Code 통합에 대해 알아보세요.
继续阅读
관련 아티클
AI 에이전트 이해하기: 자율적인 코딩 어시스턴트
CCJK의 AI 에이전트가 복잡한 다단계 개발 작업을 자율적으로 처리하는 방법을 탐색하세요. 고수준 결정에 집중하는 동안 에이전트가 작업을 수행합니다.
Jan 8, 202514 min
2115#ai-agents#automation#workflow
AI 기반 개발을 위한 고급 프롬프트 엔지니어링
AI 코딩 어시스턴트로 생산성을 극대화하기 위한 효과적인 프롬프트 작성 기술을 마스터하세요. 전문 개발자들이 사용하는 검증된 기법을 배워보세요.
Jan 9, 202515 min
1350#prompt-engineering#ai#best-practices
CCJK의 AI 에이전트 이해하기
CCJK에서 AI 에이전트가 어떻게 작동하는지 알아보고 자동화된 개발 워크플로우에 활용하는 방법을 배우세요.
Jan 9, 202512 min
1096#AI에이전트#자동화#워크플로우
