Обзор GitSync
GitSync — это сервис ADO, предназначенный для загрузки DAG Airflow из удаленных Git-репозиториев и их синхронизации. Сервис обеспечивает управление DAG с помощью Git и интегрируется со средой Airflow.
Основные возможности GitSync:
-
Синхронизация репозиториев — клонирование и обновление файлов с одного или нескольких Git-репозиториев.
-
Автоматическое обновление файлов — синхронизация файлов DAG с содержимым директории DAG Airflow.
-
Гибкая фильтрация — выбор файлов с использованием шаблонов.
-
Параллельная обработка — одновременная работа с несколькими репозиториями с помощью воркеров.
-
Очистка — опциональное удаление устаревших файлов.
-
Управление SSH-ключами — централизованное управление ключами SSH через действия в ADCM.
Использование GitSync
GitSync работает как отдельный сервис и состоит из одного компонента (gitsync).
Процесс синхронизации DAG с помощью сервиса включает следующие шаги:
-
Исходный код DAG хранится в одном или нескольких Git-репозиториях.
-
GitSync клонирует или обновляет репозитории.
-
Файлы фильтруются в соответствии с конфигурацией GitSync.
-
Файлы DAG копируются в директорию Airflow.
-
Устаревшие файлы при необходимости удаляются.
-
GitSync логирует процесс и отправляет метрики.
Airflow автоматически обнаруживает обновленные файлы в директории DAG. Сканирование выполняется рекурсивно для всех подкаталогов (например, /opt/airflow/dags).
Конфигурация
Конфигурация GitSync состоит из двух уровней:
Конфигурация сервиса
Параметры сервисного уровня определяют общее поведение сервиса GitSync. Они задаются в разделе gitsync-env.sh в ADCM.
Ключевые параметры:
-
количество параллельных воркеров;
-
интервал синхронизации и тайм-аут;
-
настройки логирования.
Конфигурация репозиториев
Настройки репозиториев задаются в опции config.json в ADCM и содержат параметры подключения к репозиториям и настройки выбора DAG для синхронизации.
Пример конфигурации репозитория:
{
"url": "git@ssh.gitlab.example.io:org/repo.git", (1)
"branch": "main", (2)
"directory": "./dags",
"files": "*.py", (3)
"sync_interval": 60, (4)
"sync_timeout": 120,
"ssh_key": "my-git-key", (5)
"target_folder": "/opt/airflow/dags/project", (6)
"delete_old_files": true (7)
}
| 1 | URL Git-репозитория. |
| 2 | Ветка и директория. |
| 3 | Правила фильтрации файлов. |
| 4 | Интервал синхронизации и тайм-аут. |
| 5 | Название SSH-ключа (для SSH-репозиториев). |
| 6 | Целевая директория DAG в Airflow. |
| 7 | Параметры удаления устаревших файлов (опционально). |
GitSync поддерживает одновременную синхронизацию DAG из нескольких репозиториев. Каждый репозиторий обрабатывается независимо пулом воркеров и должен использовать уникальный target_folder для предотвращения конфликтов.
[
{
"url": "git@ssh.gitlab.example.io:org/marketing-dags.git",
"sync_interval": 60,
"target_folder": "/opt/airflow/dags/marketing",
"branch": "main",
"tag": null,
"directory": "./dags",
"files": "*.py",
"sync_requirements": false,
"requirements_path": null,
"sync_timeout": 120,
"ssh_key": "ssh_key_marketing",
"delete_old_files": true
},
{
"url": "git@ssh.gitlab.example.io:org/finance-dags.git",
"sync_interval": 120,
"target_folder": "/opt/airflow/dags/finance",
"branch": "main",
"tag": null,
"directory": "./dags",
"files": "*.py",
"sync_requirements": false,
"requirements_path": null,
"sync_timeout": 300,
"ssh_key": "ssh_key_finance",
"delete_old_files": true
},
{
"url": "git@ssh.gitlab.example.io:org/sales-dags.git",
"sync_interval": 180,
"target_folder": "/opt/airflow/dags/sales",
"branch": "main",
"tag": null,
"directory": "./dags",
"files": "*.py",
"sync_requirements": false,
"requirements_path": null,
"sync_timeout": 300,
"ssh_key": "ssh_key_sales",
"delete_old_files": true
},
{
"url": "https://github.com/org/shared-dags.git",
"sync_interval": 300,
"target_folder": "/opt/airflow/dags/shared",
"branch": "main",
"tag": null,
"directory": "./",
"files": "*.py",
"sync_requirements": false,
"requirements_path": null,
"sync_timeout": 300,
"access_token": "******",
"https_username": "oauth2",
"delete_old_files": false
}
]
Аутентификация SSH
Для репозиториев с доступом по SSH GitSync предоставляет встроенное управление ключами:
-
SSH-ключи загружаются с помощью действия Upload private key.
-
Ключи хранятся и управляются GitSync в соответствии с конфигурацией сервиса.
-
В конфигурации репозитория указывается имя ключа.
-
Ключи добавляются во время выполнения.
Один и тот же SSH-ключ может использоваться для нескольких репозиториев.
Начало работы
Чтобы начать использовать GitSync:
-
Добавьте и установите сервис GitSync в ADO.
-
Настройте параметры сервиса.
-
При необходимости загрузите SSH-ключи с помощью действия Upload private key GitSync.
-
Определите конфигурации репозиториев.
-
Убедитесь, что целевые каталоги DAG доступны для Airflow.
После завершения настройки GitSync автоматически поддерживает синхронизацию DAG в соответствии с заданными интервалами.
Ограничения
При настройке GitSync учитывайте следующие ограничения:
-
Python-окружение. Параметр
TARGET_PYTHONзадается на уровне сервиса и используется всеми репозиториями. Использование отдельных Python-окружений для разных репозиториев не поддерживается. -
Гибкость конфигурации репозиториев. Следующие сценарии не поддерживаются и могут вызвать неопределенное поведение:
-
синхронизация нескольких директорий из одного репозитория и ветки;
-
синхронизация одного и того же репозитория из нескольких веток.
-
-
Поддержка dbt-проектов. Не является основным сценарием использования и не полностью протестирована. Артефакты, создаваемые во время работы сервиса (например,
target/,logs/), могут быть удалены при некорректной настройке. Для использования dbt требуется следующая конфигурация:-
files = "*"; -
delete_old_files = false.
-
-
Поведение синхронизации файлов. Параметр
delete_old_filesудаляет файлы на основе состояния репозитория и не различает устаревшие файлы и файлы, созданные во время выполнения. -
Общие ограничения.
-
Требуется сетевой доступ к Git-репозиториям.
-
Для SSH требуется корректная настройка ключей.
-
Дублирование
dag_idв разных репозиториях приводит к конфликтам.
-