docs: Gitea Actions 크론잡 자동화 아이디어 추가 - 네이버 블로그 파싱, DB 조회, API 호출 예시
This commit is contained in:
parent
de9388c398
commit
ae2f9f1f91
115
ideas/250904_gitea_actions_cronjob_automation.md
Normal file
115
ideas/250904_gitea_actions_cronjob_automation.md
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# Gitea Actions 크론잡 자동화
|
||||||
|
|
||||||
|
## 작성일: 2025-09-04
|
||||||
|
## 상태: 💡 아이디어
|
||||||
|
## 목적: 정기 작업 자동화 (뉴스 파싱, 헬스체크 등)
|
||||||
|
|
||||||
|
## 기본 구조
|
||||||
|
|
||||||
|
### 워크플로우 파일 위치
|
||||||
|
```
|
||||||
|
repository/.gitea/workflows/cron_*.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 크론 표현식
|
||||||
|
```yaml
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *" # UTC 기준 (KST -9시간)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 활용 예시
|
||||||
|
|
||||||
|
### 1. 네이버 블로그 뉴스 파싱
|
||||||
|
```yaml
|
||||||
|
name: Daily News Parser
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *" # 매일 KST 9시
|
||||||
|
workflow_dispatch: # 수동 실행 옵션
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
parse-news:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
pip install playwright requests
|
||||||
|
playwright install chromium
|
||||||
|
|
||||||
|
- name: Parse and send to Slack
|
||||||
|
env:
|
||||||
|
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
|
||||||
|
run: |
|
||||||
|
python scripts/parse_naver_news.py
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. DB 조회 예시
|
||||||
|
```yaml
|
||||||
|
- name: Query PostgreSQL
|
||||||
|
env:
|
||||||
|
PGPASSWORD: ${{ secrets.DB_PASSWORD }}
|
||||||
|
run: |
|
||||||
|
psql -h localhost -U robeings -d main_db \
|
||||||
|
-c "SELECT * FROM robeing_stats LIMIT 10;"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. API 호출 예시
|
||||||
|
```yaml
|
||||||
|
- name: Call API
|
||||||
|
run: |
|
||||||
|
curl -X POST "http://localhost:8000/api/endpoint" \
|
||||||
|
-H "Authorization: Bearer ${{ secrets.API_TOKEN }}" \
|
||||||
|
-d '{"key":"value"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Secrets 관리
|
||||||
|
|
||||||
|
Gitea 웹 UI에서 설정:
|
||||||
|
- 조직 레벨: 모든 저장소에서 사용
|
||||||
|
- 저장소 레벨: 특정 저장소만 사용
|
||||||
|
|
||||||
|
필요한 Secrets:
|
||||||
|
- `DB_PASSWORD`: PostgreSQL 비밀번호
|
||||||
|
- `SLACK_WEBHOOK_URL`: 슬랙 알림용
|
||||||
|
- `API_TOKEN`: API 인증 토큰
|
||||||
|
|
||||||
|
## 여러 크론잡 관리
|
||||||
|
|
||||||
|
### 방법 1: 파일 분리
|
||||||
|
```
|
||||||
|
.gitea/workflows/
|
||||||
|
├── cron_morning.yml # 아침 작업
|
||||||
|
├── cron_evening.yml # 저녁 작업
|
||||||
|
└── cron_weekly.yml # 주간 작업
|
||||||
|
```
|
||||||
|
|
||||||
|
### 방법 2: 한 파일에 여러 스케줄
|
||||||
|
```yaml
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *" # 매일 09시
|
||||||
|
- cron: "0 9 * * *" # 매일 18시
|
||||||
|
```
|
||||||
|
|
||||||
|
## 주의사항
|
||||||
|
|
||||||
|
1. **시간대**: UTC 기준, KST는 +9시간
|
||||||
|
2. **Runner**: 51123 서버에 이미 설치됨
|
||||||
|
3. **DB 접속**: localhost로만 접근 (보안)
|
||||||
|
4. **실행 환경**: ubuntu-latest 컨테이너
|
||||||
|
|
||||||
|
## 구현 우선순위
|
||||||
|
|
||||||
|
1. 네이버 블로그 뉴스 파싱 자동화
|
||||||
|
2. 서비스 헬스체크 정기 실행
|
||||||
|
3. DB 로그 정리 자동화
|
||||||
@ -28,9 +28,12 @@ services:
|
|||||||
container_name: robeing-skill-news
|
container_name: robeing-skill-news
|
||||||
```
|
```
|
||||||
|
|
||||||
### 결과
|
### 결과 ✅ 해결 완료
|
||||||
- 컨테이너 재시작 후 좀비 프로세스 67개 → 1개로 감소
|
- 컨테이너 재시작 후 좀비 프로세스 67개 → 1개로 감소
|
||||||
- 1개는 claude 관련 git 프로세스(무관)
|
- 1개는 claude 관련 git 프로세스(무관)
|
||||||
|
- skill-news 컨테이너 정상 작동 중 (healthy)
|
||||||
|
- Gitea Actions 자동 배포 성공
|
||||||
|
- 2025-09-04 재확인: 정상 작동 유지
|
||||||
|
|
||||||
## 문제 2: Gitea Actions YAML 문법 오류
|
## 문제 2: Gitea Actions YAML 문법 오류
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user