본문 바로가기
카테고리 없음

113. LLM-Assisted PR Risk Assessment & Automated Approval Pipeline as Code

by frontier12 2025. 5. 29.


LangChain LLM + GitHub Actions + OPA Gatekeeper + Argo CD를 연동해, 풀 리퀘스트(PR)가 제출될 때 코드 변경의 보안·컴플라이언스·아키텍처 위험을 LLM으로 자동 분석·점수화하고, 위험 임계치를 넘으면 자동으로 Gatekeeper 정책으로 배포 차단→ 담당자 알림→ 승인 패스를 거쳐 GitOps로 배포까지 이어지는 완전 자율 RiskOps 파이프라인을 구축합니다.



🎯 목표
1. PR 제출 시 LLM이 변경된 코드·인프라 IaC·매니페스트를 스캔하여 잠재적 위험(취약점, 비용 초과, 정책 미준수 등)을 정량 평가
2. GitHub Actions에서 LLM 점수를 기반으로 OPA Gatekeeper Constraint 자동 생성
3. 중요 위험 레벨 PR은 자동 차단→Slack/Teams 알림→담당자 승인 후 GitHub Label이나 Comment로 “Safe to Merge” 트리거
4. Argo CD가 “Safe to Merge” 상태인 PR만 자동 Sync
5. 모든 이벤트(분석 리포트·Gatekeeper 위반·승인 로그)를 GitOps 이력으로 기록



⚙️ 구성 요소

계층 도구/기술 역할
Risk Analysis LangChain + OpenAI GPT PR diff 및 파일 콘텐츠를 자연어로 요약·위험 점수화
CI Orchestration GitHub Actions LLM 호출 → 점수 결정 → Gatekeeper Constraint CR 제작·적용
Policy Enforcement OPA Gatekeeper ConstraintTemplate·Constraint로 위험 임계치 넘는 리소스 차단
Approval Workflow GitHub Checks API + Slack Bot PR 코멘트·Label로 승인 요청 및 “safe-to-merge” 트리거
GitOps Delivery Argo CD “safe-to-merge” Label 있는 PR만 ApplicationSync
Audit & Logging GitHub Commit + PR Comment Logs 분석 리포트·정책 위반·승인 내역 모두 Git에 추적




🏗️ 파이프라인 흐름

flowchart TD
  A[PR 생성 또는 업데이트]
    --> B[GitHub Actions: LLM Risk Analysis]
    --> C{Risk Score < Threshold?}
    C -- Yes --> D[Auto-approve: add `safe-to-merge` Label]
    C -- No --> E[OPA Gatekeeper: create Constraint (block)]
  E --> F[Slack 알림: 위험 PR]
  D --> G[Argo CD Sync ApplicationSet]
  G --> H[배포]
  F & H --> I[GitOps 이력 (Commit & PR Comment)]




🧪 실전 예제 스니펫

1) GitHub Actions 워크플로우

on: [pull_request]
jobs:
  risk-assess:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Call LLM Risk API
        id: llm
        run: |
          risk=$(python scripts/assess_risk.py --diff "$(git diff ${{ github.event.before }} ${{ github.sha }})")
          echo "::set-output name=risk::$risk"
      - name: Evaluate Risk
        if: steps.llm.outputs.risk < 0.3
        run: gh pr edit ${{ github.event.pull_request.number }} --add-label safe-to-merge
      - name: Apply Gatekeeper Block
        if: steps.llm.outputs.risk >= 0.3
        uses: redhat-cop/k8s-gatekeeper-action@v1
        with:
          template: path/to/risk-block-template.yaml

2) OPA ConstraintTemplate (RiskBlock)

package riskblock
violation[{"msg": msg}] {
  input.metadata.labels.safe-to-merge != "true"
  msg := "PR 위험 점수 초과: 자동 배포 차단"
}




✅ 기대 효과
• 사전 위험 감지: 보안·비용·설계 리스크를 프로덕션 배포 전 자동 차단
• 책임 공유: LLM 분석 결과와 Gatekeeper 정책이 함께 기록되어 팀원 간 투명한 의사결정
• 운영 효율화: 수동 코드 리뷰 부담 감소, 승인 워크플로우 자동화
• GitOps 일관성: 오직 안전함이 검증된 코드만 Argo CD로 동기화