Миграции и версионирование схемы
Версионирование схемы данных (инфоблоки, свойства, пользовательские поля, Highload-блоки) реализуется через идемпотентные скрипты миграций на базе API Битрикса. В коде миграций запрещено использовать автоинкрементные ID сущностей: привязка ведется строго по символьным кодам и типам, а накат миграций автоматизируется в пайплайне деплоя.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Почему изменения через админку не версионируются
-
2
Миграции инфоблоков, свойств, UF и highload-блоков
-
3
Инструменты миграций для Битрикса
-
4
Миграции в процессе деплоя
Материалы
Официальная документация
Рекомендуем со стороны
-
arrilot/bitrix-migrations Репозиторий
Проверь себя
После деплоя на проде пропало свойство инфоблока, которое на стенде есть. Что произошло?
Свойство добавили через админку стенда, и оно осталось в b_iblock_property стенда — Git схему данных не хранит. Изменение нужно описать миграцией и применить её на проде в процессе деплоя.
Почему в миграции нельзя писать ID инфоблока, даже если сегодня он одинаков на всех окружениях?
ID — автоинкремент, на следующей копии он будет другим. Инфоблок ищут по CODE и типу, свойство — по CODE внутри инфоблока, UF — по ENTITY_ID и FIELD_NAME, highload-блок — по NAME, и создают только если не нашли.
Миграция highload-блока упала на середине. Что осталось в базе?
Часть изменений: API highload-блоков меняет несколько объектов поэтапно и не откатывает выполненные шаги. Миграция должна быть идемпотентной, чтобы её можно было запустить повторно, а перед ней — бэкап.
Заказчик просит откатить деплой, а миграция уже добавила свойство и пересчитала данные. Как откатывать?
Для схемы инфоблоков честного down нет: откат — это бэкап базы, снятый перед миграцией, либо исправление вперёд новой миграцией. Поэтому бэкап перед миграциями обязателен в пайплайне.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить