Рано или поздно перед любым администратором или разработчиком крупных систем на платформе 1С встает задача автоматизации процесса обновления. В условиях, когда пользователи работают круглосуточно, а ручные манипуляции в консоли администрирования занимают слишком много времени и повышают риск «человеческого фактора», автоматическое развертывание релизов становится жизненной необходимостью. В этой статье мы подробно разберем, как автоматизировать этот процесс, начиная от выгона пользователей и создания резервных копий СУБД, заканчивая непосредственным применением конфигурации базы данных.
Прежде чем переходить к написанию скриптов, давайте проанализируем, какие препятствия возникают при попытке обновить конфигурацию «на лету»:
Рассмотрим по шагам несколько надежных и проверенных на практике сценариев автоматизации этой процедуры.
Использование старого доброго COM-соединения для управления кластером 1С постепенно уходит в прошлое. Оно требует регистрации библиотек на сервере приложений, привязано к разрядности операционной системы и часто ломается при обновлении платформы. Современный и кроссплатформенный стандарт — это использование связки RAS (Remote Administration Server) и консольной утилиты RAC (Remote Administration Client).
Давайте разберем по шагам, как настроить автоматический сценарий выгона пользователей и обновления базы через RAC. Для этого нам понадобятся параметры: имя сервера кластера, порт RAS, имя информационной базы, имя и пароль администратора.
Ниже представлен пример PowerShell-скрипта, который выполняет эту задачу:
# Параметры подключения к кластеру 1С
$ServerName = "1C-SERVER"
$PortRAS = "1545"
$ClusterID = "00000000-0000-0000-0000-000000000000" # UUID кластера
$IBName = "Trade"
$IBID = "11111111-1111-1111-1111-111111111111" # UUID информационной базы
$AdminUser = "Admin"
$AdminPass = "SuperPassword"
$LockCode = "12345"
# Путь к утилите rac.exe
$RacPath = "C:\Program Files\1cv8\8.3.22.1709\bin\rac.exe"
Write-Host "Шаг 1. Установка блокировки новых сеансов и фоновых заданий..."
& $RacPath infobase --cluster=$ClusterID --infobase=$IBID update --sessions-deny=on --scheduled-jobs-deny=on --lock-message="База находится на техническом обслуживании. Пожалуйста, зайдите позже." --lock-code=$LockCode --cluster-user=$AdminUser --cluster-pwd=$AdminPass
Write-Host "Шаг 2. Завершение активных сеансов пользователей..."
# Получаем список всех сеансов и принудительно их закрываем
$Sessions = & $RacPath session --cluster=$ClusterID --infobase=$IBID list
# Парсим и завершаем каждый сеанс
foreach ($Session in $Sessions) {
if ($Session -match "session\s+:\s+(.+)") {
$SessionID = $Matches[1]
& $RacPath session --cluster=$ClusterID terminate --session=$SessionID
}
}
Обратите внимание на параметр --scheduled-jobs-deny=on. Он критически важен, так как предотвращает автоматический запуск фоновых задач сервером 1С в тот момент, когда мы выгоняем пользователей. Параметр --lock-code позволяет администратору (или нашему скрипту обновления) беспрепятственно заходить в заблокированную базу для выполнения регламентных операций.
После того как все пользователи отключены, а новые подключения заблокированы, мы можем безопасно применить файл конфигурации (.cf) к нашей базе данных. Для этого мы запускаем конфигуратор 1С в пакетном режиме.
Для успешного прохождения авторизации в заблокированной базе нам обязательно нужно передать код разрешения доступа через ключ запуска /UC. Выясним, как выглядит строка запуска для применения конфигурации:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" CONFIG /S"1C-SERVER\Trade" /N"Admin" /P"SuperPassword" /UC"12345" /LoadCfg"C:\Deploy\metadata.cf" /UpdateDBCfg -Visible -Out "C:\Deploy\log.txt"
Давайте проанализируем ключи запуска, используемые в этой команде:
CONFIG — указывает платформе запустить систему в режиме «Конфигуратор»./S — задает путь к информационной базе на сервере приложений./N и /P — имя пользователя и пароль администратора базы данных соответственно./UC — секретный код разблокировки, который мы установили на предыдущем шаге (без него платформа выдаст ошибку о блокировке базы)./LoadCfg — команда загрузки метаданных из указанного файла .cf./UpdateDBCfg — команда применения изменений к конфигурации базы данных (аналог нажатия клавиши F7).-Out — путь к файлу лога, куда запишутся все результаты выполнения команды. Анализируя этот файл, скрипт сможет понять, успешно ли прошло обновление.Если вы хотите идти в ногу со временем и использовать современные инструменты DevOps-сообщества 1С, настоятельно рекомендуем обратить внимание на кроссплатформенную среду OneScript и специализированную библиотеку Deployka (Деплойка).
Написание скриптов автоматизации на OneScript происходит на привычном для разработчиков 1С языке. Библиотека Deployka берет на себя всю грязную работу по взаимодействию с сервером администрирования, завершению сеансов, созданию резервных копий и обновлению конфигурации. Сценарий развертывания выглядит лаконично и читаемо:
#использовать deployka
ПараметрыОбновления = Новый ПараметрыДеплоя;
ПараметрыОбновления.АдресRAS = "1C-SERVER:1545";
ПараметрыОбновления.ИмяБазы = "Trade";
ПараметрыОбновления.АдминистраторКластера = "Admin";
ПараметрыОбновления.ПарольКластера = "SuperPassword";
ПараметрыОбновления.ФайлОбновления = "C:\Deploy\metadata.cf";
ПараметрыОбновления.КодРазрешения = "12345";
Деплоер = Новый Деплоер(ПараметрыОбновления);
Деплоер.ЗаблокироватьБазу();
Деплоер.ЗавершитьСеансы();
Деплоер.ОбновитьКонфигурацию();
Деплоер.РазблокироватьБазу();
Этот подход отлично масштабируется и легко встраивается в современные пайплайны непрерывной интеграции (CI/CD) на базе GitLab CI, Jenkins или GitHub Actions.
Для тех администраторов, у которых нет времени или желания самостоятельно писать скрипты на PowerShell или OneScript, на рынке существует отличное готовое и проверенное временем коммерческое решение — программа «Обновлятор-1С». Она позволяет полностью автоматизировать весь жизненный цикл обслуживания баз 1С:
.dt).1cv8.exe на терминальных серверах с помощью системной команды taskkill /F /IM 1cv8.exe.Чтобы автоматизация приносила только пользу и не привела к потере данных, всегда придерживайтесь следующих правил:
.dt требует монопольного захвата базы самой платформой, потребляет огромное количество оперативной памяти, выполняется медленно и не гарантирует целостность данных при восстановлении. Автоматический бэкап всегда должен выполняться на уровне СУБД — средствами MS SQL Server (транзакционные бэкапы) или PostgreSQL (утилита pg_dump).Таким образом, автоматизация обновления конфигурации 1С — это абсолютно решаемая задача. Выберите подходящий именно вам инструмент — будь то гибкие PowerShell-скрипты на базе RAC, современный OneScript/Deployka или готовый «Обновлятор-1С» — и забудьте о ночных дежурствах у монитора.