Add DAG and migration_reporter module
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# 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` там же:
|
||||
|
||||
```env
|
||||
_AIP_UID=..
|
||||
# дополнительные пакеты в контейнерах (быстрый способ для теста)
|
||||
_PIP_ADDITIONAL_REQUIREMENTS=openpyxl
|
||||
```
|
||||
|
||||
> Для постоянной работы лучше свой Dockerfile:
|
||||
> ```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`:
|
||||
|
||||
```yaml
|
||||
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 — в контейнере его нет.
|
||||
Два варианта (один раз, внутри контейнера):
|
||||
|
||||
```bash
|
||||
# а) Токен в 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:
|
||||
|
||||
```bash
|
||||
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. Запуск и проверка
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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` | полный цикл (для локального запуска / восстановления) |
|
||||
Reference in New Issue
Block a user