- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동 - book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서) - 빈 폴더 제거 (journey/assets/*)
142 lines
3.7 KiB
Markdown
142 lines
3.7 KiB
Markdown
# skill-email Gitea Actions 설정 실패 및 해결
|
|
|
|
**날짜**: 2025-07-22
|
|
**작업자**: happybell80 & Claude
|
|
|
|
## 오후 4시 30분
|
|
|
|
### skill-email 자동 배포를 위한 Gitea Actions 설정
|
|
|
|
**요청**: skill-email 저장소에 자동 배포 설정 필요
|
|
|
|
**첫 시도 - 잘못된 접근**:
|
|
```yaml
|
|
# ❌ 잘못된 방법 - GitHub Actions 스타일
|
|
- name: Deploy to server
|
|
uses: appleboy/ssh-action@v0.1.5 # SSH 액션 사용
|
|
with:
|
|
host: ro-being.com
|
|
username: admin
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
script: |
|
|
cd /home/admin/projects/ivada/skill_email # 잘못된 경로
|
|
git pull origin main
|
|
docker compose up -d --build
|
|
```
|
|
|
|
**문제점들**:
|
|
1. SSH action 사용 - Gitea self-hosted runner에서는 불필요
|
|
2. 경로 오류 - `/home/admin/projects/ivada/skill_email` 존재 안함
|
|
3. GitHub 문법 사용 - `github.event_name` (Gitea에서 작동 안함)
|
|
4. runner 설정 오류 - `runs-on: ubuntu-latest` (우리는 self-hosted 사용)
|
|
|
|
## 오후 4시 45분
|
|
|
|
### 실패 원인 분석
|
|
|
|
**오류 메시지**:
|
|
```
|
|
Error: can't connect without a private SSH key or password
|
|
```
|
|
|
|
**근본 원인**:
|
|
- Gitea Actions는 self-hosted runner로 서버에서 직접 실행됨
|
|
- SSH로 접속할 필요가 없음 (이미 서버에 있음)
|
|
- 다른 프로젝트(rb10508_test, frontend-base) 참고 필요
|
|
|
|
## 오후 5시 00분
|
|
|
|
### 올바른 해결책 - rb10508_test 패턴 적용
|
|
|
|
**수정된 workflow**:
|
|
```yaml
|
|
name: Deploy Skill-Email Service
|
|
|
|
on:
|
|
pull_request:
|
|
types: [closed]
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
deploy:
|
|
if: gitea.event.pull_request.merged == true
|
|
runs-on: self-hosted # ✅ self-hosted 필수!
|
|
|
|
steps:
|
|
- name: Checkout source code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Stop existing container
|
|
run: |
|
|
cd /home/admin/skill_email # ✅ 올바른 경로
|
|
docker compose down || true
|
|
|
|
- name: Update source code and deploy
|
|
run: |
|
|
mkdir -p /home/admin/skill_email
|
|
cd /home/admin/skill_email
|
|
|
|
# 기존 파일 삭제 (설정 파일 제외)
|
|
find . -mindepth 1 \
|
|
! -name '.env' \
|
|
! -name 'token.json' \
|
|
! -name 'credentials.json' \
|
|
-exec rm -rf {} + 2>/dev/null || true
|
|
|
|
# Actions가 체크아웃한 코드 복사
|
|
cp -r /home/admin/.cache/act/*/hostexecutor/* /home/admin/skill_email/
|
|
|
|
# 배포
|
|
docker compose up -d --build
|
|
```
|
|
|
|
**핵심 차이점**:
|
|
1. ✅ SSH action 제거 - 직접 명령 실행
|
|
2. ✅ self-hosted runner 사용
|
|
3. ✅ git pull 대신 파일 복사
|
|
4. ✅ 올바른 경로 사용
|
|
|
|
## 오후 5시 15분
|
|
|
|
### 추가 수정사항
|
|
|
|
**문법 오류 수정**:
|
|
- `github.event_name` → `gitea.event` (Gitea 전용 문법)
|
|
- 불필요한 조건문 제거 (단순화)
|
|
|
|
**최종 트리거 설정**:
|
|
- PR merge 시에만 실행 (push 제거)
|
|
- 중복 실행 방지
|
|
|
|
---
|
|
|
|
## 교훈
|
|
|
|
### 1. **Gitea Actions ≠ GitHub Actions**
|
|
- Gitea는 자체 문법 사용 (`gitea.event`)
|
|
- SSH action 불필요 (self-hosted runner가 서버에서 직접 실행)
|
|
|
|
### 2. **다른 프로젝트 참고 필수**
|
|
- rb10508_test, frontend-base의 workflow 먼저 확인
|
|
- 검증된 패턴 재사용
|
|
|
|
### 3. **self-hosted runner 이해**
|
|
- `runs-on: self-hosted` 필수
|
|
- runner가 이미 서버에 있으므로 SSH 불필요
|
|
- 직접 명령 실행 가능
|
|
|
|
### 4. **경로 확인**
|
|
- 로컬: `/home/happybell/projects/ivada/`
|
|
- 서버: `/home/admin/` (projects/ivada 없음)
|
|
|
|
### 5. **Actions 코드 위치**
|
|
- 체크아웃된 코드: `/home/admin/.cache/act/*/hostexecutor/`
|
|
- git pull 대신 이 경로에서 복사
|
|
|
|
---
|
|
|
|
## 결과
|
|
- ✅ 자동 배포 성공
|
|
- ✅ PR merge 시 자동 실행
|
|
- ✅ health check 포함 |