4.9 KiB
Airflow: настройка пайплайна отчетов по миграциям
DAG: dags/migration_reporter_dag.py — расписание Пн / Ср / Пт 08:00 (0 8 * * 1,3,5).
Граф задач:
pull_repo → generate_excel → generate_html
Скрипт пайплайна: migration_reporter.py (лежит в корне репозитория миграций).
1. Установка Airflow 3 (docker-compose)
В каталоге проекта Airflow (например, /projects/airflow-docker) — по официальной документации
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
Файл .env там же:
_AIP_UID=..
# дополнительные пакеты в контейнерах (быстрый способ для теста)
_PIP_ADDITIONAL_REQUIREMENTS=openpyxl
Для постоянной работы лучше свой Dockerfile:
FROM apache/airflow:3.3.2 RUN pip install openpyxlи в
docker-compose.yamlвimage:указать имя собранного образа (docker build -t airflow-with-pydeps .).
2. Volume-монтирования (репозиторий + папка отчетов)
В docker-compose.yaml в общий блок x-airflow-common:
x-airflow-common: &airflow-common
volumes:
- ./dags:/opt/airflow/dags
- ./config:/opt/airflow/config
- ./logs:/opt/airflow/logs
- ./plugins:/opt/airflow/plugins
# путь на хосте (Windows) : путь в контейнере
- C:/Users/veremeytsev_dg/Desktop/migrations_tool:/opt/airflow/migrations_tool # репозиторий миграций
- C:/Users/veremeytsev_dg/Desktop/migrations_reports:/opt/airflow/reports # общая папка отчетов
После этого перезапустить: docker compose up -d.
Дагфайл кладется в ./dags/migration_reporter_dag.py (папка dags уже смонтирована).
3. Git-доступ из контейнера
На хосте Windows аутентификация работает через credential-manager — в контейнере его нет. Два варианта (один раз, внутри контейнера):
# а) Токен в remote-url (быстро; хранить токен в Airflow Variable и клонировать им)
docker compose exec airflow-worker git clone \
https://<user>:<token>@seedvault.coderocket.ru/SZA_analytics/migrations.git \
/opt/airflow/migrations_tool
# б) SSH-deploy key в volume (надежнее для продакшена)
# смонтировать ключ и: git -c core.sshCommand="ssh -i /opt/airflow/ssh/key" clone ...
Проверка: docker compose exec airflow-worker git -C /opt/airflow/migrations_tool pull --ff-only
4. Airflow Variables (пути)
В UI: Admin → Variables, либо CLI:
docker compose exec airflow-scheduler airflow variables set migrations_repo_dir /opt/airflow/migrations_tool
docker compose exec airflow-scheduler airflow variables set migrations_reports_dir /opt/airflow/reports
Можно не задавать — в DAG есть env-fallback (MIGRATIONS_REPO_DIR, MIGRATIONS_REPORTS_DIR).
5. Запуск и проверка
docker compose exec airflow-scheduler airflow dags list
docker compose exec airflow-scheduler airflow dags trigger migration_reporter_pipeline
docker compose exec airflow-scheduler airflow tasks states-for-run migration_reporter_pipeline <run_id>
Артефакты прогона (в общей папке /opt/airflow/reports ↔ хост):
migration_report_YYYYMMDD_HHMMSS.xlsx # Excel (11 листов)
migration_report_YYYYMMDD_HHMMSS.changes.json # кэш изменений (между задачами DAG)
migration_report_YYYYMMDD_HHMMSS.html # HTML-отчет (батчи по дате загрузки)
latest.xlsx / latest.html # фиксированные имена последнего отчета
6. Локальный запуск без Airflow
cd migrations_tool
python migration_reporter.py run --dir pgsql --skip-pull # без git pull
python migration_reporter.py run --dir pgsql # с git pull
python migration_reporter.py excel --dir pgsql --output r.xlsx # только Excel
python migration_reporter.py html --cache r.changes.json --output r.html # только HTML
7. Ручная генерация отдельного шага
| Команда | Что делает |
|---|---|
excel |
анализ + Excel-отчет + .changes.json кэш |
html |
HTML из кэша (быстро, без повторного анализа) |
run |
полный цикл (для локального запуска / восстановления) |