가이드

CI/CD 통합: AI 지원 워크플로우 자동화

자동화된 코드 리뷰, 테스트 생성 및 문서 업데이트를 위해 CCJK를 CI/CD 파이프라인에 통합하세요.

C
CCJK Team2025년 1월 3일
14 분 소요
1,137 회 조회
CI/CD 통합: AI 지원 워크플로우 자동화

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 통합에 대해 알아보세요.

태그

#cicd#automation#github-actions#devops#pipeline

이 아티클 공유

继续阅读

관련 아티클