DOCS/ideas/250904_gitea_actions_cronjob_automation.md

2.5 KiB

Gitea Actions 크론잡 자동화

작성일: 2025-09-04

상태: 💡 아이디어

목적: 정기 작업 자동화 (뉴스 파싱, 헬스체크 등)

기본 구조

워크플로우 파일 위치

repository/.gitea/workflows/cron_*.yml

크론 표현식

on:
  schedule:
    - cron: "0 0 * * *"  # UTC 기준 (KST -9시간)

활용 예시

1. 네이버 블로그 뉴스 파싱

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 조회 예시

- 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 호출 예시

- 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: 한 파일에 여러 스케줄

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 로그 정리 자동화