gha-failure-analysis
요약
이 액션은 GitHub Actions 워크플로우가 실패했을 때, 로그를 자동으로 분석하고 근본 원인 보고서를 생성합니다. LLM과 트랜스포머 기반 이상 탐지 기능을 활용하여 실패한 작업의 메타데이터와 코드 변경 사항을 연관시켜 문제의 원인을 식별하는 것이 핵심입니다.
핵심 포인트
- 실패 시 자동 로그 분석 및 근본 원인 보고서 생성
- LLM(OpenAI, Anthropic 등)과 트랜스포머 기반 이상 탐지 결합
- PR 컨텍스트를 인식하여 코드 변경과의 연관성 평가
- 비밀 정보(secrets) 자동 마스킹 처리 기능 제공
GitHub Actions 워크플로우가 실패할 때, 이 액션은 로그를 자동으로 분석하고, 실패와 코드 변경 사항을 연관시키며, 실행 가능한 근본 원인 분석 보고서를 생성합니다.
의미론적 로그 처리 (Semantic Log Processing): cordon의 트랜스포머 기반 이상 탐지(anomaly detection) 기능을 사용하여 방대한 로그에서 관련 실패 정보를 추출합니다.
LLM 기반 분석 (LLM-Powered Analysis): DSPy와 사용자가 선택한 LLM(OpenAI, Anthropic, Gemini, Ollama)을 활용하여 지능적인 실패 분석을 수행합니다.
PR 컨텍스트 인식 (PR Context-Aware): 코드 변경 사항과 실패를 자동으로 연관시켜 PR 변경이 문제의 원인인지 판단합니다.
유연한 트리거링 (Flexible Triggering): 동일 워크플로우 내에서 실행하거나 workflow_run 이벤트를 통해 실행할 수 있습니다.
Secret 탐지 (Secret Detection): 모든 출력물에서 비밀 정보(secrets)를 자동으로 마스킹 처리합니다.
전문 보고서 (Professional Reports): 증거와 권장 사항이 포함된 구조화되고 실행 가능한 근본 원인 분석을 생성합니다.
실패 시에 실행되는 최종 작업으로 추가하기:
jobs:
test:
runs-on: ubuntu-latest
...
완료 시 트리거되는 별도의 워크플로우를 생성하기:
name: Failure Analysis
on:
workflow_run:
...
참고: github-token 파라미터는 선택 사항이며 기본값은 ${{ github.token }} 입니다. 권한이 다른 사용자 지정 토큰을 사용해야 하는 경우에만 명시하십시오.
워크플로우가 실패할 때, 이 액션은:
워크플로우 실행 메타데이터(workflow run metadata), 실패한 작업(failed jobs), 및 로그를 가져옵니다.
cordon을 사용하여 로그를 전처리하고 의미론적으로 관련 있는 섹션을 추출합니다.
LLM을 사용하여 실패(단계 및 테스트)를 분석하여 근본 원인을 식별합니다.
PR 변경 사항과 실패를 연관시켜 영향을 평가합니다.
발견된 내용을 간결한 근본 원인 분석 보고서로 종합합니다.
결과를 작업 요약, PR 댓글, JSON 아티팩트로 출력합니다.
PR 트리거 워크플로우의 실패를 분석할 때, 이 액션은 자동으로 다음과 같은 작업을 수행합니다:
PR 변경 사항 가져오기 (Fetches PR changes): diff와 함께 변경된 모든 파일을 검색합니다.** 실패와의 상관관계 분석 (Correlates with failures): LLM 분석을 사용하여 코드 변경이 각 실패를 유발했을 가능성이 있는지 판단합니다** 영향 평가 (Assesses impact): PR 변경 사항이 책임이 있는지에 대한 명확한 평가를 제공합니다** 원인 식별 (Identifies culprits): 문제를 일으켰을 수 있는 특정 파일과 줄을 지적합니다
이를 통해 실패가 사용자의 변경 사항 때문인지 아니면 관련 없는 인프라 문제 때문인지 빠르게 이해하는 데 도움이 됩니다.
PR 변경 사항이 실패를 유발할 경우, 다음과 같이 표시됩니다:
## 🔍 PR 영향 평가 (PR Impact Assessment)
🔴 **영향 가능성 (Impact Likelihood)**: 높음 (High)
The test failures are directly related to code changes in this PR:
...
PR 컨텍스트 분석은 PR이 트리거한 실행에 대해 기본적으로 활성화되어 있습니다. 사용자 지정하려면 다음을 사용하세요:
- uses: calebevans/gha-failure-analysis@v1
with:
llm-provider: openai
...
중요: 이 액션은 현재 PR 상태가 아닌, 워크플로우를 트리거한 특정 커밋을 분석합니다. 이는 PR이 실패 이후 업데이트되었더라도 정확한 분석을 보장합니다.
이 워크플로우는 실행 로그를 가져오는 데 기본 github-token을 사용하며, 이는 사용자에게 필요한 특정 리포지토리 권한 설정에 따라 개인 접근 토큰(private access token)을 설정하거나 GitHub 앱을 생성하고 키를 설정해야 할 수 있습니다.
| 입력 (Input) | 설명 (Description) | 예시 (Example) |
|---|---|---|
llm-provider | LLM 제공업체 (LLM provider) | openai, anthropic, gemini, ollama |
llm-model | 모델 이름 (Model name) | gpt-4o, claude-3-5-sonnet-20241022 |
llm-api-key | LLM API 키 (LLM API key) | ${{ secrets.OPENAI_API_KEY }} |
입력 (Input)
| Input | Default | Description |
|---|---|---|
github-token | ${{ github.token }} | API 접근을 위한 GitHub 토큰 |
run-id | Current run | 분석할 워크플로우 실행 ID (Workflow run ID) |
pr-number | Auto-detect | 수동 PR 번호 재정의 (테스트용) |
llm-base-url | Provider default | 사용자 지정 LLM API 기본 URL |
post-pr-comment | false | 분석 후 PR 댓글로 게시 여부 |
analyze-pr-context | true | PR 변경 사항의 맥락에서 실패 분석 수행 여부 |
pr-context-token-budget | 20 | PR diff에 할당할 컨텍스트 비율 (0-50) |
ignored-jobs | None | 무시할 작업 이름 패턴을 쉼표로 구분하여 지정 |
ignored-steps | None | 무시할 단계 이름 패턴을 쉼표로 구분하여 지정 |
artifact-patterns | None | 아티팩트에 대한 쉼표로 구분된 glob 패턴 |
입력 (Input)
| Input | Default | Description |
|---|---|---|
cordon-backend | sentence-transformers | 임베딩 백엔드 (remote 또는 sentence-transformers) |
cordon-model-name | all-MiniLM-L6-v2 | 임베딩 모델 이름 |
cordon-api-key | None | 원격 임베딩을 위한 API 키 |
cordon-device | cpu | 로컬 임베딩 장치 (cpu / cuda / mps) |
cordon-batch-size | 32 | 임베딩 배치 크기 |
출력 (Output)
| Output | Description |
|---|---|
summary | 간략한 실패 요약 |
category | 실패 카테고리 (infrastructure/test/build/configuration/timeout/unknown) |
report-path | 전체 JSON 보고서 경로 |
이 액션은 DSPy/LiteLLM과 호환되는 모든 LLM 제공업체를 지원합니다:
llm-provider: openai
llm-model: gpt-4o
llm-api-key: ${{ secrets.OPENAI_API_KEY }}
llm-provider: anthropic
llm-model: claude-3-5-sonnet-20241022
llm-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
llm-provider: gemini
llm-model: gemini-2.5-flash
llm-api-key: ${{ secrets.GEMINI_API_KEY }}
llm-provider: ollama
llm-model: llama3.1:70b
# 로컬 Ollama의 경우 API 키가 필요하지 않습니다.
llm-provider: openai
llm-model: custom-model
llm-api-key: ${{ secrets.CUSTOM_API_KEY }}
...
Cordon은 로그를 전처리하여 의미론적으로 관련된 섹션을 추출합니다. 원격 또는 로컬 임베딩을 사용하도록 구성할 수 있습니다.
빠르고 모델 다운로드가 필요 없습니다. LLM 제공업체의 임베딩 API를 사용합니다:
cordon-backend: remote
cordon-model-name: openai/text-embedding-3-small
cordon-api-key: ${{ secrets.OPENAI_API_KEY }}
지원되는 제공업체:
- OpenAI:
openai/text-embedding-3-small
,openai/text-embedding-3-large - Google Gemini:
gemini/gemini-embedding-001
,gemini/text-embedding-004 - Cohere:
cohere/embed-english-v3.0
,cohere/embed-multilingual-v3.0 - Voyage:
voyage/voyage-2
,voyage/voyage-code-2
Gemini를 사용한 예시:
cordon-backend: remote
cordon-model-name: gemini/gemini-embedding-001
cordon-api-key: ${{ secrets.GEMINI_API_KEY }}
로컬 임베딩 생성을 위한 경우 (더 느리며 모델 다운로드 필요):
cordon-backend: sentence-transformers
cordon-model-name: all-MiniLM-L6-v2
cordon-device: cpu # 또는 GPU의 경우 cuda/mps 사용
GPU 가속: 러너에 GPU가 있는 경우, 5~15배 더 빠른 전처리를 위해 사용하세요:
cordon-device: cuda # NVIDIA GPU용
cordon-device: mps # Apple Silicon용
이 액션은 다음과 같은 구조화된 분석을 자동으로 생성합니다:
# 🔍 워크플로우 실패 분석
| | |
|---|---|
...
```diff
+ -- 초기화를 느리게 하는 복잡한 인덱스 추가
+ CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
📊 증거 (Evidence)
❌ 테스트 / 통합 테스트 실행
카테고리: test
...
Connection pool exhausted: 사용 가능한 연결 0/10개
데이터베이스 시작에 45.2초 소요 (예상: <10초)
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기