Move directory
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# Agent 구현 태스크 (Step 2~4)
|
||||
|
||||
## 전제 조건
|
||||
|
||||
- [ ] Step 1 Skills 구현 완료 (인터페이스 버전 `1.0` 확정)
|
||||
- [ ] Staging K8s 클러스터 접근 가능
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Agent 프레임워크 POC
|
||||
|
||||
**목표**: OpenClaw와 Nanobot 중 하나를 실제 클러스터에서 검증하여 프레임워크를 확정한다.
|
||||
|
||||
### POC 범위 (최소)
|
||||
|
||||
- [ ] 각 프레임워크를 Staging 클러스터에 배포
|
||||
- [ ] `helm_diff` Skill 하나를 등록
|
||||
- [ ] Agent가 Skill을 호출하여 실제 결과 반환 확인
|
||||
- [ ] 두 프레임워크 비교 후 결정
|
||||
|
||||
### 비교 기준
|
||||
|
||||
| 항목 | OpenClaw | Nanobot | 결과 |
|
||||
|------|---------|---------|------|
|
||||
| K8s 배포 난이도 | 공식 Helm chart | 직접 구성 | - |
|
||||
| Skill 연결 방식 | - | - | - |
|
||||
| 로그/디버깅 편의성 | - | - | - |
|
||||
| 보안 설정 가능 여부 | - | - | - |
|
||||
|
||||
> POC 완료 후 이 표를 채운다.
|
||||
|
||||
**완료 기준**: 두 프레임워크 중 하나 선택, 선택 이유를 [decisions/](../decisions/) 에 기록
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Agent 워크플로 정의
|
||||
|
||||
**목표**: 선택한 프레임워크에서 모든 Skill을 등록하고 워크플로를 정의한다.
|
||||
|
||||
### 태스크
|
||||
|
||||
- [ ] 모든 Skill 등록
|
||||
- `helm_diff`, `breaking_change_check`, `generate_upgrade_doc`
|
||||
- `update_docs_file`, `create_pr`, `deploy_validate`
|
||||
- [ ] 워크플로 정의 (Cron 스케줄 기반)
|
||||
|
||||
```yaml
|
||||
workflow: helm-upgrade-automation
|
||||
schedule: "0 8 * * *"
|
||||
|
||||
steps:
|
||||
- name: detect-versions
|
||||
skill: chart_version_detector
|
||||
output: new_versions[] # current_version + latest_version
|
||||
|
||||
- name: generate-diffs
|
||||
skill: helm_diff
|
||||
for_each: new_versions
|
||||
output: diff_json[]
|
||||
# 내부에서 최신 차트 pull + 버전 디렉토리 생성 수행
|
||||
|
||||
- name: check-breaking
|
||||
skill: breaking_change_check
|
||||
for_each: diff_json
|
||||
output: breaking_results[]
|
||||
|
||||
- name: generate-docs
|
||||
skill: generate_upgrade_doc
|
||||
# Skill 내부에서 severity 분기: breaking=true or severity≥high → LLM 심층 요약, 그 외 → 간이 템플릿
|
||||
for_each: [diff_json, breaking_results]
|
||||
output: docs[]
|
||||
|
||||
- name: update-docs
|
||||
skill: update_docs_file
|
||||
for_each: docs
|
||||
output: updated[]
|
||||
|
||||
- name: validate-deployments
|
||||
skill: deploy_validate
|
||||
condition: breaking=false and severity<high # breaking=true or severity>=high이면 스킵 → 사람 승인 필요
|
||||
for_each: updated
|
||||
output: validation_results[]
|
||||
|
||||
- name: create-prs
|
||||
skill: create_pr
|
||||
for_each: updated
|
||||
output: pr_urls[]
|
||||
|
||||
- name: notify
|
||||
channel: slack
|
||||
message: "Helm upgrade PRs created: {pr_urls}"
|
||||
```
|
||||
|
||||
- [ ] K8s 이벤트 기반 트리거 설정 (선택: ArgoCD App 상태 변화 등)
|
||||
- [ ] Staging 클러스터에서 E2E 동작 확인
|
||||
|
||||
**완료 기준**: Staging에서 airflow chart 신규 버전 감지 → PR 생성까지 E2E 자동 실행
|
||||
|
||||
---
|
||||
|
||||
## Step 4: 보안 정책 수립 후 운영
|
||||
|
||||
**목표**: 운영 클러스터 투입 전 보안 정책을 확립한다.
|
||||
|
||||
### 태스크
|
||||
|
||||
- [ ] RBAC 설정 (test namespace만 허용)
|
||||
|
||||
```yaml
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
namespace: helm-test
|
||||
rules:
|
||||
- apiGroups: ["apps"]
|
||||
resources: ["deployments", "statefulsets"]
|
||||
verbs: ["get", "list", "create", "update", "delete"]
|
||||
- apiGroups: [""]
|
||||
resources: ["pods", "services", "configmaps"]
|
||||
verbs: ["get", "list", "create", "update", "delete"]
|
||||
```
|
||||
|
||||
- [ ] NetworkPolicy 설정 (허용 egress만 통과)
|
||||
- GitHub API (`api.github.com`)
|
||||
- LLM API (`api.anthropic.com` 또는 `api.openai.com`)
|
||||
- Slack API (알림용)
|
||||
- [ ] Skill allowlist 관리 (shell skill 비활성화 필수)
|
||||
- [ ] 입력 sanitization (Prompt Injection 방지)
|
||||
- [ ] `breaking=true` PR은 사람이 직접 머지 승인 유지
|
||||
|
||||
**완료 기준**: 보안 체크리스트 전항목 충족, 운영 클러스터 투입
|
||||
|
||||
---
|
||||
|
||||
## 관련 문서
|
||||
|
||||
- [design/05-on-cluster-agent.md](../design/05-on-cluster-agent.md) — Agent 배포 설계 + 보안 고려사항
|
||||
- [design/04-skill-interface.md](../design/04-skill-interface.md) — Agent가 호출할 Skill 인터페이스
|
||||
- [decisions/001-agentic-first.md](../decisions/001-agentic-first.md) — 파이프라인 건너뛰기 결정 배경
|
||||
Reference in New Issue
Block a user