Что делают эти скрипты, если кратко?
Скрипт по копированию базы данных CopyBase.os
Вам звонят и сообщают, что в заказе номер 667 ошибка и надо бы поправить. А в вашей базе нет этого заказа. Не набивать же его вручную? Запускаете скрипт Import.bat, ждете 2-30 минут, и вот уже в вашей базе самая свежая копия рабочей, уже подключена к хранилищу разработки и обновлена.
Скрипт по деплою Deploy.os
Настала пора обновить рабочую базу. Вы заранее положили все нужно в хранилище рабочей базы.
В час X вы начинаете обновление: оповещаете пользователей о том, что надо бы из 1Ски всем выйти (никто конечно не выходит),
начинаете рубить соединения вручную (фоновые задания и самые упертые возвращаются быстрее, чем вы их успеваете удалить),
ставите блокировку на базу (и сами долго мучаетесь с заходом в конфигуратор. Доходит до того, что вы снимаете блокировку, забегаете в конфигуратор и снова ставите блокировку, надеясь, что именно сеанс конфигуратора не умрет. Он умирает),
делаете бекап (он длится что то долго и вы отвлекаетесь на пару статей. Когда возвращаетесь в базе уже тусуются пользователи, а бекап уже морально устарел),
обновляете (ребутнув сервер пару раз, т.к. пользователи так и не перестали заходить),
с чистой совестью идете гулять с семьей/пить пиво с друзьями (вам звонят и говорят, что не могут зайти в базу. Видимо кто то забыл выполнить миграцию).
Скрипт же делает все то же самое, но быстрее и надежнее. Он ставит мягкую блокировку (когда новые пользователи не могут зайти, а старым выскакивает сообщение с предложением сохраниться и завершить работу), потом отрубает все соединения принудительно, выполняет бекап, обновляется из хранилища, обновляет базу данных, запускает миграцию данных и снимает блокировку, когда все завершено.
Как работают скрипты, если подробнее
Сами скрипты написаны на oscript. На инфостарте этот проект уже известен, поэтому не буду сильно его хвалить.
Через батник запускается на выполнение оскрипт, ему передается скрипт и параметры к нему.
Особым образом читаются все необходимые параметры (об этом чуть ниже).
CopyBase.os
Шаг Выполнить бекап.
Выполняет бекап базы источника средствами SQLCMD (в моем примере это рабочая база).
Может быть пропущен, если параметр «Source_SQL.UseBackup» = false .
Выполняет бекап в файл «FileBackup» для SQL базы-источника с параметрами «Source_SQL.Server«, «Source_SQL.User«, «Source_SQL.Password«, «Source_SQL.Base«
Если бекап выполнить не удалось- скрипт завершает работу аварийно.
Шаг Проверить соединения
Проверяет, что в базе-приемника (в моем примере это наша база разработки, в которую мы разворачиваем копию) нет соединений.
Пропускается, если «SQL.UseRestore» = false
Получает количество соединений для SQL базы-приемника с параметрами «SQL.Server«, «SQL.User«, «SQL.Password«, «SQL.Base«
Если получить соединения не удалось или соединений больше 0 — скрипт завершает работу аварийно.
Шаг Выполнить восстановление
Запускает скрипт «Script_Restore» для базы «SQL.Server«, «SQL.User«, «SQL.Password«, «SQL.Base«
Может быть пропущен, если «SQL.UseRestore» = false
Обойтись без отдельного скрипта не получилось, и проще всего восстановления было сделать через sql-скрипт. Этот скрипт можно получить при интерактивной попытке восстановить бекап в нужную базу (указав пути к файлам, расставив нужные флажки и быть может указав дополнительные действия). Скрипт должен восстанавливать именно ту базу, для который запущен оскрипт и именно из файла «FileBackup«
Шаг Удалить файл бекапа
Удаляет файл «FileBackup«. Может быть пропущен, если «SQL.UseRestore» = false или «SQL.DelBackup» = false
Шаг Переподключить хранилище
Может быть пропущен, если «Repo.Blind» = false.
Подключается к базе-приемнику с параметрами «EXE1CV8«, «Base.Connect«, «Base.User«, «Base.Password«
Отключает базу от хранилища (на случай, если она подключена к другому хранилищу), подключается к хранилищу с параметрами «Repo.Connect«, «Repo.User» и «Repo.Password«
Если «UpdateCfg«=true, то выполняет обновление БД
Deploy.os
Шаг Включить RAS
Может быть пропущен, если «Cluster.UseLock» = false, «UseDynamicUpdate» = false или не заполнен «EXERAS«.
Выполняет запуск RAS. Есть смысл, если скрипт выполняется на том же сервере, что и сервер 1С.
Именно с помощью RAS и RAC происходит взаимодействие с кластером, с помощью которого устанавливается блокировка и выполняется принудительное завершение работы у пользователей.
Шаг Устанавить блокировку
Может быть пропущен, если «Cluster.UseLock» = false, «UseDynamicUpdate» = false
Для установки блокировки используется куча параметров:
- «Cluster.ras» — сетевой адрес к RAS, например localhost
- «EXERAC» — путь к RAC
- «Base.Base» — имя базы в кластере
- «Cluster.Admin«
- «Cluster.Password«
- «v8version» — используемая версия 1Ски
- «Cluster.lockuccode» — код блокировки
- «Cluster.lockmessage» — сообщение о блокировке
- «Cluster.lockstart» — дата и время начала блокировки
- «Cluster.lockstartat» — количество секунд, через которое нужно установить блокировку
Шаг Пауза перед удалением сеансов
Может быть пропущен, если «Cluster.UseLock» = false, «UseDynamicUpdate» = false
Скрипт останавливается на время до окончательной блокировки, которое задается параметрами «Cluster.lockstart» или «Cluster.lockstartat«
Шаг Удалить соединения
Может быть пропущен, если «Cluster.UseLock» = false, «UseDynamicUpdate» = false
Удаляет все соединения.
Шаг Выполнить бекап
Пропустить нельзя
Выполняет бекап в файл «FileBackup» для SQL базы-приемника с параметрами «SQL.Server«, «SQL.User«, «SQL.Password«, «SQL.Base«. В отличие от выполнения аналогичного шага в скрипте CopyBase.os тут выполняется бекап именно для текущей базы, а не для базы-источника.
Шаг Обновить конфигурацию из хранилища
Можно пропустить, если «UpdateCfg«=false
Подключается к базе-приемнику с параметрами «EXE1CV8«, «Base.Connect«, «Base.User«, «Base.Password«
Подключается к хранилищу с параметрами «Repo.Connect«, «Repo.User» и «Repo.Password«, получает из него все обновления и выполняет обновление БД. Если указан флаг «UseDynamicUpdate» = true то обновление динамическое.
Шаг Запуск миграции
Можно пропустить, если «UpdateCfg«=false
Запускает 1С с параметром запуска указанным в «UpdateLaunchParameter«. Подразумевается, что в самой базе уже есть код, который по этому параметру запуска полностью автоматически выполнит обновление. Для баз на основе БСП уже все есть и этот ключ «ВыполнитьОбновлениеИЗавершитьРаботу», но это не точно.
Шаг Снять блокировку
Может быть пропущен, если «Cluster.UseLock» = false, «UseDynamicUpdate» = false
Снимает блокировку и разрешает вход пользователям.
Указание параметров и файлы настроек
Пример файлов с настройками лежит в папке bin.
Параметры читаются за счет библиотеки https://github.com/Stepa86/ReadParams
Параметры хранятся в json файлах. Они удобны для чтения и редактирования без использования спец. инструментов. Главное не забывать заменять на \
Особенности указания параметров в строке запуска
Файл параметров по умолчанию
В первую очередь читается файл param_os.json, его не нужно указывать в строке запуска. Таким образом строка запуска
oscript ......srcdeploy.os
Прочитает файлы из файла param_os.json и нормально отработает.
Переданный файл параметров
Файл с параметрами можно указать явно, причем файлов может быть несколько — они должны быть разделены ;. Каждый последующий файл может переопределить параметры предыдущего.
oscript ......srcdeploy.os -debug -testparam "..paramexe1c.json";"..paramcluster.json";"..paramsql.json";base.json;Dynamic.json
Особенности чтения файлов параметров
При разработке я придерживался правила — один параметр указывается один и только один раз. Когда обновляется 1Ска на сервере — нужно изменить только один параметр, а не 15 файлов.
Для этого при чтении параметров работает механизм подстановки
{
"v8version": "8.3.10.2168",
"EXE1CV8": "c:\program Files (x86)\1cv8\%v8version%\bin\1cv8.exe",
"EXERAC": "C:\Program Files\1cv8\%v8version%\bin\rac.exe",
// Если RAS уже запущен, то этот параметр следует удалить. Используется для старта RAS принудительно
"EXERAS": "C:\Program Files\1cv8\%v8version%\bin\ras.exe"
}
и в качестве параметра можно указать другой файл для чтения. Вот пример файла param_os.json, который подтянет все остальные параметры из других файлов
{
"ReadFile.exe1c": "..\param\exe1c.json",
"ReadFile.cluster": "..\param\cluster.json",
"ReadFile.sql": "..\param\sql.json",
"ReadFile.Base": ".\base.json"
}
Флаги запуска
Можно перед указанием файлов указать флаги -debug и -testparam . Что они делают описано выше.
Рекомендуемое расположение файлов параметров
[bin] // Папка в проекте
[Server] // Папка, в которой лежат все параметры для одного этого сервера
[param] // Папка с общими параметрами, применимыми для этого сервера
cluster.json // Общие параметры кластера для Server
exe1c.json // Общие параметры с путями к exe
import.json // Общие параметры для импорта скриптом CopyBase
sql.json // Общие параметры текущего SQL, который использует текущий Server
[DB1] // Папка с параметрами, применимыми для этой базы
deploy.bat // Батник для деплоя
import.bat // Батник для CopyBase
testparam.bat // Батник для тестов параметров
base.json // Параметры этой базы
import.json // Параметры базы, из которой нужно импортировать
param_os.json // Файл с ссылкой на другие файлы параметров
Restore_BaseName_PC.sql // SQL скрипт для восстановления в текущую базу из базы-источника
Исходный код и всегда самая свежая версия доступна на гитхабе https://github.com/Stepa86/1C-Deploy-and-CopyDB
Годно. Здорово было бы, чтобы ещё версию 1С цепляла, как у текущего сервера. Может это возможно через реестр посмотреть?
И было бы бомбой автоматизировать автоматическое обновление любой конфигурации стоящей на поддержке. Типа скрипт мониторит текущие версии конфигурации наhttps://releases.1c.ru/total и если видит что-то новое, то составляет оптимальный путь к обновлению, скачивает нужные поставки и последовательно обновляет (с запуском 1С в режиме предприятия разумеется).
(1) для обновления уже есть наработкиoscript-AutoUpdateIB
(2) спасибо, заценим. Антон ещё мне в личку кинул решение конкретно по моей проблемеhttp://helpme1c.ru/obnovlyator-1s-gruppovoe-paketnoe-obnovlenie-vsex-baz-za-odin-raz
«бекап» убил )))
Чет какой-то сложный процесс описан))
Пользователей обязательно трогать?
Средствами SQL легко делается бэкап со сжатием (так быстрее) и не выгоняя пользователей.
Потом бэкап разворачивается в новой тестовой базе.
Можно даже базу на 1С сервере одну и ту же тестовую использовать, только на SQL ее удалять и заново создавать. Сервак 1С новую базу сам подключит как только она будет создана вновь.
Ну и остается только переподключить к хранилищу конфигураций и то не обязательно может быть в этом потребность.
(5) При копировании базы а) Пользователи не трогаются б) Используются те же средства SQL, только заскриптованные в) Скрипт по восстановлению можно использовать любой, в том числе с созданием новой базы.
Сейчас чтобы сымпортировать базу из рабочей я делаю двойной клик по батнику и иду наливать кофе, когда возвращаюсь — уже можно полноценно работать. Это как с посудомойкой — она дольше моет и руками получается порой качественнее и быстрее. Но сам факт того, что можно запустить и уйти по делам, решает.
(4) У меня нет ни одной публикации, где бы не придрались к моему русскому/английскому. Я уже начинаю комплексовать (на самом деле нет)
Про Deploy.os можно сказать, что этот велосипед уже придуман.
https://github.com/oscript-library/deployka
Называется deployka.
(7) А если заглянуть в гитхаб, то станет видно, что этот проект основан на деплойке и расширяет ее возможности.
Спасибо!
Спасибо! В хозяйстве обязательно пригодится
Ошибка.
(11) В параметрах для копирования базы нужно указать
Иначе он настройки кластера пытается протестировать.
Добрый день.
Получаю вот такую ошибку:
В exe1c.json вот такое
В sql.json вот это
Показать
Подскажите в чем может быть проблема ?
(13) В exe1c.json последняя запятая лишняя, а в остальных json комментарии не поддерживаются видимо, их нужно удалить. И надо последнюю версию скачать с гитхаба, там ошибка «Ошибка в строке: 101 / Конструктор не найден (КомандаУправлениеСеансами)}» исправлена
(14)
Спасибо. Это помогло. Но дальше я получил другую ошибку
Далее я установил библиотеку readparams
Снова запустил проверку параметров
Получаю ошибку
Разобрался )
(16) Что было? В идеале про ошибки писать в ишузы в гитхабе
Я библиотеку чтение параметров вначале положил еще в папку lib к самому CopyBase.os и был конфликт
а я такое на bash сделал… правда не уничерсальное, и cygwin пришлось поставить на винду….
1.) После прочтения не понял для PostgreSQL эти скрипты подходят?
2.) Эти скрипты необязательно запускать на сервере, где крутиться сервер 1С, можно с любой машины, где прямое подключение к базе?
(20) 1) Разрабатывал только под ms sql, т.к. используется утилита SQLCMD. Код открыт, можно попытаться переделать под себя под постгри. По идее там только один модуль адаптировать
2) Для копирования базы из одной в другую запускать можно с любой машины, на которой есть доступ к нужным скулям. Для деплоя вся соль в подключении к RAS. Локально он стартуется из скрипта и взаимодействие идет через него, но можно RAS поднять как сервис с доступом по сети и общаться через сеть, но у меня это так и не взлетело
Спасибо за статью! Отличная штука! Уже пользуюсь. OneScript мощный инструмент.
Для тех кто будет смотреть на этот инструмент: очень хорошая разработка, но подкачала версия библиотеки deployka , на которой основывался автор. Та старая deployka не могла устанавливать блокировку регламентных заданий. Поскольку deployka сделана как отдельный инструмент, запускаемый из командной строки с параметрами, а автор хотел расширить ее логику, ему пришлось дописать деплойку, потеряв возможность обновления. Я долго это все выяснял и теперь не уверен что делать. Хотелось бы найти такое же решение, как и это, с удобными параметрами, с тестами, с оповещениями в мессенжер. Но чтобы оно было готовое. Т.к. найду ли я время доработать новую деплойку, умеющую блокировать регламентные задания, под использование в данном окружении, неясно…
(23) У меня регл. задания блокировались. Вот даже коммит чтоб блокировка лучше работалаhttps://github.com/Stepa86/1C-Deploy-and-CopyDB/commit/b3402866aec2cc87847563158469b80bdf040021 . Вы точно последнюю версию взяли?
(24) наверное bogdan_sukonnov имел ввиду что в вашей разработке потерялось возможность обновления оригинальной deployka. У Вас как-то учитываются новые релизы deployka? (хотя она последнее время не менялась, но тем не менее)