Merge jobs в dbt StarterEnterprise
Вы можете настроить merge job для реализации workflow непрерывного развертывания (continuous deployment, CD) в dbt. Merge job запускает dbt‑джоб в момент, когда кто‑то сливает Git pull request в production. Такой workflow создаёт бесшовный процесс разработки, при котором изменения в коде автоматически обновляют production‑данные. Кроме того, этот workflow можно использовать для запуска dbt compile, чтобы обновлять manifest окружения — это делает последующие запуски CI‑джобов более производительными.
Используя CD в dbt, вы можете воспользоваться deferral, чтобы собирать только изменённую модель и все downstream‑изменения. При использовании merge jobs состояние обновляется практически мгновенно, что позволяет всегда иметь самую актуальную информацию о состоянии в Catalog.
Если у вас monorepo с несколькими dbt‑проектами, слияние одного pull request в одном из проектов приведёт к запуску джобов для всех проектов, подключённых к этому monorepo. Чтобы избежать этого, вы можете использовать отдельные target‑ветки для каждого проекта (например, main-project-a, main-project-b) и тем самым разделить CI‑триггеры.
Предварительные требования
- У вас есть учетная запись dbt.
- Вы настроили подключение к вашему провайдеру Git. Эта интеграция позволяет dbt запускать задания от вашего имени при их триггере.
- Если вы используете нативную интеграцию GitLab, вам нужен платный или self-hosted аккаунт с поддержкой GitLab webhooks и project access tokens. Если вы используете GitLab Free, merge requests будут запускать CI jobs, но обновления статуса CI job (успешное завершение или ошибка) не будут передаваться обратно в GitLab.
- Для deferral (по умолчанию) убедитесь, что в окружении, на которое вы ссылаетесь при deferral, был как минимум один успешный запуск задания.
Настройка триггера задания при merge в Git
- На странице вашего окружения для деплоя нажмите Create job > Merge job.
- Параметры в разделе Job settings:
- Job name — Укажите имя merge job.
- Description — Добавьте описание задания.
- Environment — По умолчанию установлено окружение, из которого вы создавали задание.
- В разделе Git trigger опция Run on merge включена по умолчанию. Каждый раз, когда PR выполняет merge (в базовую ветку, настроенную в окружении) в вашем репозитории Git, это задание будет запускаться.
- Параметры в разделе Execution settings:
- Commands — По умолчанию включает команду
dbt build --select state:modified+. Это сообщает dbt, что нужно собирать только новые или измененные модели и их downstream-зависимости. Важно: сравнение состояния возможно только когда выбрано deferred-окружение, с которым сравнивается state. Нажмите Add command, чтобы добавить другие команды, которые должны выполняться при запуске этого задания. - Compare changes against — По умолчанию настроено сравнение изменений с окружением, из которого вы создали задание. Эта опция позволяет dbt сравнить состояние кода в PR с кодом, выполняющимся в deferred-окружении, чтобы проверять только измененный код, вместо сборки полной таблицы или всего DAG. Чтобы изменить настройки по умолчанию, вы можете выбрать No deferral, This job для self-deferral или выбрать другое окружение.
- Commands — По умолчанию включает команду
- (опционально) Параметры в разделе Advanced settings:
- Environment variables — Определите переменные окружения, чтобы настроить поведение проекта при запуске этого задания.
- Target name — Определите имя target. Аналогично переменным окружения, эта опция позволяет настроить поведение проекта.
- Run timeout — Отменить это задание, если время выполнения превышает значение таймаута.
- dbt version — По умолчанию наследуется версия dbt из окружения. dbt Labs настоятельно рекомендует не менять настройку по умолчанию. Возможность менять версию на уровне задания полезна только при обновлении проекта до следующей версии dbt; в противном случае несовпадение версий окружения и задания может приводить к непредсказуемому поведению.
- Threads — По умолчанию установлено 4 потока. Увеличьте количество потоков, чтобы повысить параллельность выполнения моделей.
Проверьте push-события в Git
Merge-задания требуют push-событий, поэтому убедитесь, что они включены у вашего провайдера Git, особенно если интеграция с Git была настроена ранее. Для новой интеграции этот шаг можно пропустить, так как push-события обычно включены по умолчанию.



