Обновления тиражного решения в 1С-Битрикс — это не «залить новый архив», а последовательное применение версий через папки updater и объект $updater. Разберём, как это работает, как писать скрипты обновления и как их тестировать.
Как работает система обновлений
Система обновлений Маркетплейс построена на сравнении версий. У клиента установлена версия из install/version.php, а сервер обновлений (updates.bitrix.info) знает актуальную версию вашего решения. Модуль SiteUpdate на стороне клиента запрашивает разницу и применяет недостающие версии по порядку.
Ключевая идея — обновления инкрементальные и последовательные. Если клиент на 1.0.0, а вышла 1.0.3, система применит скрипты 1.0.1, 1.0.2, 1.0.3 строго друг за другом. Поэтому каждая версия должна быть самодостаточным шагом от предыдущей.
- клиент инициирует обновление из Marketplace → Обновление решений;
- SiteUpdate скачивает архив обновлений и распаковывает скрипты updater;
- каждый updater-скрипт применяется в порядке возрастания версий;
- после успешного применения версия в
version.phpповышается.
Номер версии в version.php
Отправная точка любого обновления — корректная версия в install/version.php:
<?php $arModuleVersion = array("VERSION" => "1.0.3", "VERSION_DATE" => "2026-01-01 00:00:00");
Правила версионирования, без которых обновления не применятся корректно:
- версия должна строго возрастать — система не применит «пониженную» или равную версию;
- каждой новой версии соответствует свой каталог обновления с тем же номером;
VERSION_DATEобновляется вместе с версией и не должна быть из будущего.
VERSION, до которого этот скрипт поднимает решение. Собрали версию 1.0.3 — значит, есть каталог 1.0.3 с updater-скриптом.Структура каталога обновления
Обновления живут внутри установщика модуля, в каталоге updater. Каждая версия — это отдельная папка, названная по номеру версии, а внутри неё — исполняемый скрипт обновления и файлы, которые нужно доставить клиенту.
Упрощённая структура выглядит так:
/bitrix/modules/partner_code.module_name/install/updater/1.0.1/updater.php
/bitrix/modules/partner_code.module_name/install/updater/1.0.2/updater.php
/bitrix/modules/partner_code.module_name/install/updater/1.0.3/updater.php
Рядом со скриптом размещаются каталоги с новыми или изменёнными файлами (например, компоненты, шаблоны, файлы модуля), которые updater-скрипт копирует в целевые пути. Файл .last_version в служебной структуре решения указывает системе на актуальный доступный номер версии.
Объект $updater и его методы
Внутри updater-скрипта доступен объект $updater. Через него выполняются все операции: копирование файлов, вызов установки/удаления сущностей и вывод сообщений о ходе обновления. Наиболее используемые методы:
| Метод | Назначение |
|---|---|
$updater->CopyFiles("install/components", "components") | Копирование файлов из каталога обновления в целевой путь |
$updater->CopyDirFiles("from", "to") | Копирование содержимого каталога с указанием источника и приёмника |
$updater->Install() / UnInstall() | Запуск установки/удаления сущностей модуля в рамках обновления |
$updater->AddMessage() | Вывод сообщения или предупреждения в отчёт обновления |
Пример скрипта updater
Типовой updater-скрипт делает две вещи: доставляет обновлённые файлы и, при необходимости, запускает миграцию данных. Каркас для версии 1.0.3:
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
if ($updater->CanUpdateKernel()) {
$updater->CopyFiles("install/components", "components");
$updater->CopyFiles("install/js", "js");
}
if ($updater->CanUpdateDatabase()) {
// миграция БД для этой версии
$updater->Query("...");
$updater->AddMessage("Схема данных обновлена до 1.0.3");
}
Обратите внимание: копирование ядра/файлов и изменения БД разделены проверками возможностей обновления. Это защищает от применения части шага в неподходящем окружении.
Миграции БД и безопасность
Изменения структуры данных — самая рискованная часть обновления. Их нельзя откатить «одной кнопкой», поэтому пишите миграции максимально безопасно:
- Идемпотентность. Проверяйте существование таблицы/колонки перед созданием, чтобы повторный прогон не падал.
- Без разрушающих операций «вслепую». Удаление колонок и данных — только с явной проверкой и, по возможности, с сохранением бэкапа значений.
- Отделяйте данные от кода. Копирование файлов и миграцию данных держите в разных проверяемых блоках.
Тестирование обновления
Обновление тестируется не «на новой установке», а именно как переход между версиями. Воспроизведите путь клиента:
- установите предыдущую версию решения на чистый стенд;
- наполните её реальными данными (инфоблоки, настройки, таблицы модуля);
- примените обновление через SiteUpdate и проверьте отчёт;
- убедитесь, что версия в
version.phpподнялась, файлы скопированы, миграция прошла; - проверьте «длинный» переход — сразу через несколько версий (
1.0.0→1.0.3), чтобы отловить нарушенную последовательность.
Отдельно проверяйте сценарий, когда у клиента модифицированы файлы: CopyFiles перезаписывает целевые пути, и это должно быть ожидаемым поведением, а не сюрпризом.
Итог
Мастер обновлений тиражного решения работает на трёх принципах: монотонная версия в install/version.php, каталоги updater по номерам версий и последовательное применение скриптов через объект $updater. Безопасные идемпотентные миграции, разделение файлов и данных, а также тестирование именно перехода между версиями избавляют клиентов от сломанных обновлений.
Если ваше решение растёт, а обновления затрагивают сложную схему данных и интеграции — мы помогаем выстроить надёжный процесс релизов, миграций и поддержки тиражных решений на 1С-Битрикс, от архитектуры updater до автоматизации выкладки.
Частые вопросы
В каком порядке применяются обновления?
Строго по возрастанию версий. Если клиент на 1.0.0, а вышла 1.0.3, система последовательно применит скрипты 1.0.1, 1.0.2 и 1.0.3. Каждая версия должна быть самодостаточным шагом от предыдущей.
Как называется каталог обновления?
По номеру версии, до которой этот скрипт поднимает решение. Каталоги лежат в install/updater/, например install/updater/1.0.3/updater.php, и совпадают со значением VERSION в version.php.
Какими методами объекта updater пользоваться?
Основные реально существующие методы: CopyFiles и CopyDirFiles для доставки файлов, Install и UnInstall для установки и удаления сущностей, AddMessage для сообщений в отчёт. Не полагайтесь на несуществующие методы.
Можно ли откатить обновление назад?
Автоматического отката система обновлений не выполняет, версии применяются только вперёд. Планируйте отступление заранее: сохраняйте старые файлы, документируйте изменения схемы и рекомендуйте клиенту резервную копию перед обновлением.
Как доставлять изменения структуры БД?
В updater-скрипте отдельным блоком, с проверкой возможности обновления БД. Миграции пишите идемпотентно: проверяйте существование таблиц и колонок, избегайте разрушающих операций вслепую.
Как клиент получает обновление?
Через модуль SiteUpdate в разделе обновления решений Маркетплейс. Он обращается к серверу обновлений updates.bitrix.info, скачивает архив с updater-скриптами и применяет недостающие версии.
Как правильно тестировать обновление?
Установить предыдущую версию, наполнить данными и применить обновление через SiteUpdate, а не проверять на чистой установке. Обязательно прогоните длинный переход сразу через несколько версий, чтобы отловить нарушенную последовательность.
Что произойдёт с изменёнными клиентом файлами при обновлении?
CopyFiles перезаписывает целевые пути, поэтому пользовательские правки в этих файлах будут заменены. Это ожидаемое поведение: критичные к кастомизации части выносите так, чтобы обновление их не затирало.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.