115 lines
2.5 KiB
Markdown
115 lines
2.5 KiB
Markdown
# 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 로그 정리 자동화 |