Автоматизация обновления до последнего релиза

Публикация № 1740712 28.10.22

Приемы и методы разработки - DevOps и автоматизация разработки

EDT Git GitFlow release OneScript version автоматическое обновление HTTP-сервис Telegram Bot DevOps

Это механизм, который автоматически обновляет базы 1С до последнего релиза, при разработке в 1С:Enterprise Development Tools c использованием распределённой системы управления версиями GIT.

Введение.

Эта статья подойдет для тех, кто имеет по крайней мере базовые знания и навык работы с git. Она разработана для модели ветвления Git Flow.

Формат версии конфигурации 1С это A.B.C.[h], где:

  • A – главный номер версии (major version number).
  • B – вспомогательный номер версии (minor version number).
  • C – номер сборки, номер логической итерации по работе над функционалом версии A.B (build number).
  • h – Немедленные изменения/исправления конфигурации (hotfix branches), при которых конфигурация обновляется вручную (незапланированно), и не приводят к автоматическому обновлению конфигурации.

Представленный механизм так же подойдет для интеграции в среду Jenkins, но выходит за пределы темы статьи и рассматриваться не будет.

Итак, начнем!

В конфигурацию нужно добавить http-сервис, с корневым url - api. Добавим ему шаблон "/v1/{action}/" с методом GET. Обработчик у метода будет следующий:

	Action = НРег(Запрос.ПараметрыURL["action"]);

	Если Action = "version" Тогда
		HTTPОтвет = Новый HTTPСервисОтвет(200);
		HTTPОтвет.УстановитьТелоИзСтроки(Метаданные.Версия);
		Возврат HTTPОтвет;
	ИначеЕсли Action = "telegram" И Не Запрос.Заголовки.Получить("Text") = Неопределено Тогда
		HTTPСоединение = Новый HTTPСоединение("api.telegram.org", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
		ПараметрыЗапроса = Новый Соответствие;
		Текст = Запрос.Заголовки.Получить("Text");
		ПараметрыЗапроса.Вставить("Content-type", "application/json");
		TelegramBotID = Константы.Update_TelegramBotID.Получить();
		TelegramChatID = Константы.Update_TelegramChatID.Получить();
		Если ЗначениеЗаполнено(TelegramBotID) И ЗначениеЗаполнено(TelegramChatID) Тогда
			МассивЧатов = СтрРазделить(TelegramChatID, ";");
			Для Каждого ЧатID Из МассивЧатов Цикл
				HTTPЗапрос = Новый HTTPЗапрос(TelegramBotID + "/sendMessage?chat_id=" + ЧатID
					+ "&parse_mode=html&text=" + Текст, ПараметрыЗапроса);
				HTTPСоединение.Получить(HTTPЗапрос);
			КонецЦикла;
		КонецЕсли;
		HTTPОтвет = Новый HTTPСервисОтвет(200);
		Возврат HTTPОтвет;
	ИначеЕсли Action = "disconnect" Тогда

		Port = Запрос.Заголовки.Получить("Port");
		MainPort = Запрос.Заголовки.Получить("MainPort");
		AgentSrv = Запрос.Заголовки.Получить("AgentSrv");
		BaseName = Запрос.Заголовки.Получить("BaseName");
		login = Запрос.Заголовки.Получить("login");
		password = Запрос.Заголовки.Получить("password");

		СистемнаяИнфо = Новый СистемнаяИнформация;
		ПодстрокиВерсии = СтрРазделить(СистемнаяИнфо.ВерсияПриложения, ".");
		COMСоединитель = Новый COMОбъект("v" + ПодстрокиВерсии[0] + ПодстрокиВерсии[1] + ".COMConnector");

		СтрокаСоединенияСАгентомСервера = "tcp://" + AgentSrv + ":" + Port;
		СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(СтрокаСоединенияСАгентомСервера);

		ПеремКластер = Неопределено;
		Для Каждого Кластер Из СоединениеСАгентомСервера.GetClusters() Цикл
			Если Формат(Кластер.MainPort, "ЧГ=0;") = MainPort Тогда
				СоединениеСАгентомСервера.Authenticate(Кластер, login, password);
				ПеремКластер = Кластер;
				Прервать;
			КонецЕсли;
		КонецЦикла;

		Если ПеремКластер = Неопределено Тогда
			HTTPОтвет = Новый HTTPСервисОтвет(400);
			HTTPОтвет.УстановитьТелоИзСтроки("ERROR: Не удалось найти кластер");
			Возврат HTTPОтвет;
		КонецЕсли;

		ПеремОписаниеИнформационнойБазы = Неопределено;
		Для Каждого ОписаниеИнформационнойБазы Из СоединениеСАгентомСервера.GetInfoBases(ПеремКластер) Цикл
			Если НРег(ОписаниеИнформационнойБазы.Name) = НРег(BaseName) Тогда
				ПеремОписаниеИнформационнойБазы = ОписаниеИнформационнойБазы;
				Прервать;
			КонецЕсли;
		КонецЦикла;

		Если ПеремОписаниеИнформационнойБазы = Неопределено Тогда
			HTTPОтвет = Новый HTTPСервисОтвет(400);
			HTTPОтвет.УстановитьТелоИзСтроки("ERROR: Не удалось найти базу");
			Возврат HTTPОтвет;
		КонецЕсли;

		ВсеПользователи = Истина;
		Сеансы = СоединениеСАгентомСервера.GetInfoBaseSessions(ПеремКластер, ПеремОписаниеИнформационнойБазы);
		Для Каждого Сеанс Из Сеансы Цикл
			Попытка
				СоединениеСАгентомСервера.TerminateSession(ПеремКластер, Сеанс);
			Исключение
				ВсеПользователи = Ложь;
			КонецПопытки;
		КонецЦикла;
		Если Не ВсеПользователи Тогда
			HTTPОтвет = Новый HTTPСервисОтвет(400);
			HTTPОтвет.УстановитьТелоИзСтроки("ERROR: Не удалось отключить всех пользователей");
			Возврат HTTPОтвет;
		КонецЕсли;
		HTTPОтвет = Новый HTTPСервисОтвет(200);
		Возврат HTTPОтвет;
	ИначеЕсли Action = "check" Тогда
		HTTPОтвет = Новый HTTPСервисОтвет(?(Константы.Update_ЗапретАвтообновления1С.Получить(), 400, 200));
		Возврат HTTPОтвет;
	КонецЕсли;
	
	HTTPОтвет = Новый HTTPСервисОтвет(200);
	Возврат HTTPОтвет;

далее короткое описание для каждого Action в методе:

  1. version - Основной метод, возвращает текущую версию конфигурации
  2. telegram - метод, который оповещает о процессе обновления, с помощью bota. Можно заменить на оповещения по электронной почте, смс и тд.
  3. disconnect - метод, который завершает работу пользователей перед обновлением (позволяет отключать пользователей в конфигурациях без БСП)
  4. check - метод, в который можно добавить нужные проверки перед обновлением. Например, проверку создания backup обновляемой базы, дня недели, выполнение важных регламентных заданий при которых нельзя обновлять конфигурацию и тд

Следующим пунктом опишем скрипт, который выполняет обновление баз. Он запускается с помощью скриптового языка OneScript.

Файл update1C.os

#Использовать irac
#Использовать cmdline
#Использовать 1commands

// Формируется список настроек для обновления
//
// Возвращаемое значение:
//  - Массив из Структура - Необходимые параметры для обновления конфигурации
Функция ПолучитьМассивБазДляОбновления()

	МассивНастроеек = Новый Массив();
		
	//TEST 1
	МассивБазДляОбновления = Новый Массив();
	СтруктураНастроеек = Новый Структура();
	//Расположение проекта 
	СтруктураНастроеек.Вставить("КаталогПроекта", "C:\Users\admin\git\test_base_1");
	//Файлы конфигурации проекта edt
	СтруктураНастроеек.Вставить("PROJECT", "C:\Users\admin\git\test_base_1\conf");
	//Порт агента сервера
	СтруктураНастроеек.Вставить("Port", "1540");
	//Порт менеджера кластрера
	СтруктураНастроеек.Вставить("MainPort", "1541");
	//Логин кластера сервера 1С
	СтруктураНастроеек.Вставить("ClustersLogin", "log");
	//Пароль кластера сервера 1С
	СтруктураНастроеек.Вставить("ClustersPassword", "pswd");
	
	БазаДанных = Новый Структура();
	//Заголовок для сообщения в телеграмме
	БазаДанных.Вставить("Заголовок", " База (test1)");
	//Сервер публикации информационной базы
	БазаДанных.Вставить("СерверHttp", "localhost");
	//URL http-сервиса
	БазаДанных.Вставить("АдресHttp", "test1/hs/api/v1/");
	//Сервер БД
	БазаДанных.Вставить("СерверБазыДанных", "localhost\SQL");
	//Кластер сервера 
	БазаДанных.Вставить("СерверКластера", "localhost");
	//Имя базы данных
	БазаДанных.Вставить("ИмяБазыДанных", "TEST_1");
	//Пользователь БД
	БазаДанных.Вставить("ПользовательБазыДанных", "sql_login");
	//Пароль пользователя БД
	БазаДанных.Вставить("ПарольБазыДанных", "sql_password");
	//Пользователь 1С
	БазаДанных.Вставить("Пользователь1С", "update1C");
	//Пароль пользоватлея 1С
	БазаДанных.Вставить("Пароль1С", "update1C");
	МассивБазДляОбновления.Добавить(БазаДанных);

	БазаДанных = Новый Структура();
	БазаДанных.Вставить("Заголовок", " База (test2)");
	БазаДанных.Вставить("СерверHttp", "localhost");
	БазаДанных.Вставить("АдресHttp", "test1/hs/api/v1/");
	БазаДанных.Вставить("СерверБазыДанных", "localhost\SQL");
	БазаДанных.Вставить("СерверКластера", "localhost");
	БазаДанных.Вставить("ИмяБазыДанных", "TEST_2");
	БазаДанных.Вставить("ПользовательБазыДанных", "sql_login");
	БазаДанных.Вставить("ПарольБазыДанных", "sql_password");
	БазаДанных.Вставить("Пользователь1С", "update1C");
	БазаДанных.Вставить("Пароль1С", "update1C");
	МассивБазДляОбновления.Добавить(БазаДанных);
		
	СтруктураНастроеек.Вставить("МассивБазДляОбновления", МассивБазДляОбновления);

	МассивНастроеек.Добавить(СтруктураНастроеек);
	
	//TEST 2
	МассивБазДляОбновления = Новый Массив();
	СтруктураНастроеек = Новый Структура();
	СтруктураНастроеек.Вставить("КаталогПроекта", "C:\Users\admin\git\test_base_2");
	СтруктураНастроеек.Вставить("PROJECT", "C:\Users\admin\git\test_base_2\conf");
	СтруктураНастроеек.Вставить("Port", "1540");
	СтруктураНастроеек.Вставить("MainPort", "1541");
	СтруктураНастроеек.Вставить("ClustersLogin", "log");
	СтруктураНастроеек.Вставить("ClustersPassword", "pswd");
	
	БазаДанных = Новый Структура();
	БазаДанных.Вставить("Заголовок", " База (test3)");
	БазаДанных.Вставить("СерверHttp", "localhost");
	БазаДанных.Вставить("АдресHttp", "test3/hs/api/v1/");
	БазаДанных.Вставить("СерверБазыДанных", "localhost\SQL");
	БазаДанных.Вставить("СерверКластера", "localhost");
	БазаДанных.Вставить("ИмяБазыДанных", "TEST_3");
	БазаДанных.Вставить("ПользовательБазыДанных", "sql_login");
	БазаДанных.Вставить("ПарольБазыДанных", "sql_password");
	БазаДанных.Вставить("Пользователь1С", "update1C");
	БазаДанных.Вставить("Пароль1С", "update1C");
	МассивБазДляОбновления.Добавить(БазаДанных);
		
	СтруктураНастроеек.Вставить("МассивБазДляОбновления", МассивБазДляОбновления);

	МассивНастроеек.Добавить(СтруктураНастроеек);	

	Возврат МассивНастроеек;

КонецФункции

// Преобразует строку версии в число, сокращая до 3-го разряда
//
// Параметры:
//   ВерсияСтрокой - Строка - Версия в формате ХХ.ХХ.ХХ.ХХ
//
// Возвращаемое значение:
//  - Число - Версия в числовом эквиваленте
Функция ВерсияЧислом(Знач ВерсияСтрокой)
	
	Разрядность = СтрНайти(ВерсияСтрокой, ".", , , 3);
	Если Разрядность > 0 Тогда
		ВерсияСтрокой = Лев(ВерсияСтрокой, Разрядность-1);
	КонецЕсли;

	Если ПустаяСтрока(ВерсияСтрокой) Или ВерсияСтрокой = "0.0.0.0" Тогда
		Возврат 0;
	КонецЕсли;
	
	Результат = 0;
	
	ОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
	Остаток = ВерсияСтрокой;
	ПозицияТочки = СтрНайти(Остаток, ".");
	Пока ПозицияТочки > 0 Цикл
		ЧислоСтрокой = Лев(Остаток, ПозицияТочки - 1);
		Число = ОписаниеТипаЧисло.ПривестиЗначение(ЧислоСтрокой);
		Результат = Результат * 1000 + Число;
		Остаток = Сред(Остаток, ПозицияТочки + 1);
		ПозицияТочки = СтрНайти(Остаток, ".");
	КонецЦикла;
	
	Число = ОписаниеТипаЧисло.ПривестиЗначение(Остаток);
	Результат = Результат * 1000 + Число;
	
	Возврат Результат;
КонецФункции

//Глобальные переменные (общие для всех баз)
СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ = "🟢";
СМАЙЛ_КРАСНЫЙ_КРУГ = "🔴";
СМАЙЛ_ИТОГ_ЗЕЛЕНЫЙ = "c89;";
СМАЙЛ_ИТОГ_КРАСНЫЙ = "c40;";

WORKSPACE = "C:\Users\admin\git\WS";
XML = "C:\Users\admin\git\XML";
LOGFILE="C:\Users\admin\git\log.txt";
LOGCOMMIT="C:\Users\admin\git\log_commit.txt";
ibcmd = "C:\Program Files\1cv8\8.3.xx.xxxx\bin\ibcmd.exe"; //xx.xxxx заменить на версию 1С (например 21.1508)

МассивБаз = ПолучитьМассивБазДляОбновления();

Для Каждого СтруктураОбновления ИЗ МассивБаз Цикл
		
	Команда = Новый Команда;
	//Переходи в кактлог проекта и загружаем коммиты, скачиваем все удаленные ветки
	Команда.УстановитьСтрокуЗапуска("cd " + СтруктураОбновления.КаталогПроекта + " & git fetch & git branch -r");
	КодВозврата = Команда.Исполнить();
	
	//Получаем актуальную версию конфигурации
	Заголовки = Новый Соответствие();
	HTTPЗапрос = Новый HTTPЗапрос(СтруктураОбновления.АдресHttp + "/version", Заголовки);
	Результат = HTTPСоединение.Получить(HTTPЗапрос);
	АктуальнаяВерсия = Результат.ПолучитьТелоКакСтроку();
	АктуальнаяВерсияЧислом = ВерсияЧислом(АктуальнаяВерсия);

	//Находим все доступные релизные ветки
	МассивРелизов = НайтиФайлы(СтруктураОбновления.КаталогПроекта + "\.git\refs\remotes\origin\release\","*.*");

	//Для отображения коммитов которые вошли в релиз
	Релиз = "0.0.0";
	НачалоЛога = "";
	ОкончаниеЛога = "";
	
	Для Каждого Файл Из МассивРелизов Цикл
		ПроверяемаяВерсия = ВерсияЧислом(Файл.Имя);
		Если ПроверяемаяВерсия > АктуальнаяВерсияЧислом Тогда
			ОкончаниеЛога = "release/"+Файл.Имя;
			Релиз = Файл.Имя;
		ИначеЕсли ПроверяемаяВерсия = АктуальнаяВерсияЧислом Тогда
			НачалоЛога = "release/"+Файл.Имя;
		КонецЕсли;		
	КонецЦикла;

	//проверка что релиз обновился
	Если НЕ Релиз = "0.0.0" Тогда

		//Начинаем формировать сообщения для отправки в теелграмм
		СообщениеТелеграм = " Релиз: " + Релиз + "</b>";

		//Переключаемся на релизную ветку и обновляем ее с сервера
		Команда.УстановитьСтрокуЗапуска("cd " + СтруктураОбновления.КаталогПроекта + " & git checkout release\" + Релиз + " & git pull");
		КодВозврата_checkout = Команда.Исполнить();

		СообщениеТелеграм = СообщениеТелеграм + Символы.ПС + ?(КодВозврата_checkout = 1, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " получение данных с GitHub";
		
		//Выводим шапку в файл лога
		Команда.УстановитьСтрокуЗапуска("echo %date% >> """+LOGFILE+""" 2>&1");
		КодВозврата = Команда.Исполнить();
		
		//Формируем сообщение коммитов вошедших в релиз
		СообщениеЛогаКоммитов = "";
		Если ЗначениеЗаполнено(НачалоЛога) И ЗначениеЗаполнено(ОкончаниеЛога) Тогда
			Команда.УстановитьСтрокуЗапуска("cd " + СтруктураОбновления.КаталогПроекта + " & git log --pretty=format:""%an: %s"" --no-merges "+НачалоЛога+".."+ОкончаниеЛога+"  > """ + LOGCOMMIT + """ 2>&1");
			КодВозврата_log = Команда.Исполнить();
			Коммиты = Новый ТекстовыйДокумент;
			Коммиты.Прочитать(LOGCOMMIT);
			СообщениеЛогаКоммитов = Символы.ПС + "<code>Коммиты в релизе:" + Символы.ПС + Коммиты.ПолучитьТекст() + "</code>";
		КонецЕсли;			
		
		//Очищаем каталоги для сборки. Удалив их и создав заново
		Команда.УстановитьСтрокуЗапуска("rd /S /Q """ + WORKSPACE + """ & rd /S /Q """ + XML+ """");
		КодВозврата_rd = Команда.Исполнить();	
		Команда.УстановитьСтрокуЗапуска("md """ + WORKSPACE + """ & md """ + XML+ """");
		КодВозврата_md = Команда.Исполнить();
		СообщениеТелеграм = СообщениеТелеграм + Символы.ПС + ?(КодВозврата_rd+КодВозврата_md = 0, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " подготовка структуры каталогов";

		//Экспорт проекта в xml-выгрузку конфигурации
		//xxxx.x.x заменить на версию edt (например 2022.1.2)
		Команда.УстановитьСтрокуЗапуска("ring edt@xxxx.x.x:x86_64 workspace export --project """+ СтруктураОбновления.PROJECT +""" --configuration-files """+XML+""" --workspace-location """+WORKSPACE+""" >> """+LOGFILE+""" 2>&1"); 
		КодВозврата_export = Команда.Исполнить();
		СообщениеТелеграм = СообщениеТелеграм + Символы.ПС + ?(КодВозврата_export = 0, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " выгрузка конфигурации в XML";

		Для Каждого База ИЗ СтруктураОбновления.МассивБазДляОбновления Цикл

			//Проверка в базе на доступность ее обновить
			HTTPСоединение = Новый HTTPСоединение(База.СерверHttp);
			Заголовки = Новый Соответствие();
			HTTPЗапрос = Новый HTTPЗапрос(База.АдресHttp + "/check",Заголовки);
			Результат = HTTPСоединение.Получить(HTTPЗапрос);
		
			Если НЕ Результат.КодСостояния = 200 Тогда
				Продолжить;
			КонецЕсли;
		
			//Завершение работы активных пользователей
			Заголовки = Новый Соответствие();
			Заголовки.Вставить("Port",  СтруктураОбновления.Port);
			Заголовки.Вставить("MainPort",  СтруктураОбновления.MainPort);
			Заголовки.Вставить("BaseName",  База.ИмяБазыДанных);
			Заголовки.Вставить("login",  СтруктураОбновления.ClustersLogin);
			Заголовки.Вставить("password",  СтруктураОбновления.ClustersPassword);
			Заголовки.Вставить("AgentSrv",  База.СерверКластера);
			HTTPЗапрос = Новый HTTPЗапрос(СтруктураОбновления.АдресHttp + "/disconnect",Заголовки);
			Результат = HTTPСоединение.Получить(HTTPЗапрос);
			СообщениеТелеграмБаза = СообщениеТелеграм + Символы.ПС + ?(Результат.КодСостояния = 200, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " завершение активных сеансов";

			//Импорт конфигурации из XML с помощью утилиты ibcmd
			Команда.УстановитьСтрокуЗапуска(""""+ibcmd+""" infobase config import --dbms=MSSQLServer --db-server="+База.СерверБазыДанных+" --db-name="+База.ИмяБазыДанных+" --db-user="+База.ПользовательБазыДанных+" --db-pwd="""+База.ПарольБазыДанных+""" --user="+База.Пользователь1С+" --password="+База.Пароль1С+" """+XML+""" >> """+LOGFILE+""" 2>&1");
			КодВозврата_import = Команда.Исполнить();
			СообщениеТелеграмБаза = СообщениеТелеграмБаза + Символы.ПС + ?(КодВозврата_import = 0, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " загрузка конфигурации в базу из XML";
			
			//Обновление конфигурации 
			Команда.УстановитьСтрокуЗапуска(""""+ibcmd+""" infobase config apply --dbms=MSSQLServer --db-server="+База.СерверБазыДанных+" --db-name="+База.ИмяБазыДанных+" --db-user="+База.ПользовательБазыДанных+" --db-pwd="""+База.ПарольБазыДанных+""" --user="+База.Пользователь1С+" --password="+База.Пароль1С+" --force >> """+LOGFILE+""" 2>&1");
			КодВозврата_apply = Команда.Исполнить();
			СообщениеТелеграмБаза = СообщениеТелеграмБаза + Символы.ПС + ?(КодВозврата_apply = 0, СМАЙЛ_ЗЕЛЕНЫЙ_КРУГ, СМАЙЛ_КРАСНЫЙ_КРУГ) + " обновление конфигурации";
			
			СообщениеТелеграмБаза = "<b>" + ?(КодВозврата_md+КодВозврата_export+КодВозврата_import+КодВозврата_apply = 0, СМАЙЛ_ИТОГ_ЗЕЛЕНЫЙ, СМАЙЛ_ИТОГ_КРАСНЫЙ) + База.Заголовок + СообщениеТелеграмБаза + СообщениеЛогаКоммитов;

			//Отправка сообщения в телеграмм
			Заголовки = Новый Соответствие();
			Заголовки.Вставить("Text",  КодироватьСтроку(СообщениеТелеграмБаза, СпособКодированияСтроки.КодировкаURL));
			HTTPЗапрос = Новый HTTPЗапрос(СтруктураОбновления.АдресHttp + "/telegram",Заголовки);
			Результат = HTTPСоединение.Получить(HTTPЗапрос);
			
		КонецЦикла;	
		
	КонецЕсли;

КонецЦикла;

Краткое описание работы скрипта.

Сначала формируется список параметров и массив баз для обновления. В дальнейшем что бы добавить или удалить базу редактируем в файле функцию ПолучитьМассивБазДляОбновления. Далее обновляем из git-а (который подключен по ssh) ветки и коммиты. Получаем релиз базы, и сравниваем его с релизными ветками (release/*). Если есть новый релиз, тогда переключаемся на ветку релиза и скачиваем изменения. Подготавливаем структуру каталогов и экспортируем в нее проект edt в виде xml файлов. Далее в каждую конфигурацию, из массива мы загружаем данные проекта из xml-файлов, и обновляем ее. В самом конце отправляем сообщение из 1С в зависимости от настроек.

Пример.

Посмотрим, что получается в итоге. На примере, перехода с релиза 0.1.9 на 0.1.10 тестовой конфигурации. В каждой релизной ветке повышаем релиз (версию конфигурации) на следующий. На скриншоте видно, что после релиза 0.1.9 у нас было несколько коммитов, а также в релизной ветке мы изменили версию конфигурации на 0.1.10.

 

 

Запускаем выполнение скрипта командой из cmd или вешаем на планировщик заданий в ОС Windows. Например, запуск из командной строке выглядит так

oscript C:\scripts\update1C.os

После выполнения скрипта получаем сообщение в чат с ботом и обновленную конфигурацию до 0.1.10

 

 

Если что-то не работает, смотрим логи в файле %LOGFILE%

 

Ссылки:

Скачать файлы

Наименование Файл Версия Размер
Автоматизация обновления до последнего релиза: Расширение с веб-сервисом

.cfe 9,07Kb
1
.cfe 9,07Kb 1 Скачать
Автоматизация обновления до последнего релиза: Файл скрипта на OneScript

.os 18,88Kb
0
.os 18,88Kb Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3 Промо

Универсальные функции Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Управляемые формы Управляемые формы Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Каждый программист 1С хотя бы раз задумывался над тем, как уменьшить в разы трудозатраты на обновления переписанных конфигураций. Как не забыть добавить некий код, команду, кнопку в форму типовой конфигурации, изменить стандартный обработчик события формы – этот список можно продолжать до бесконечности. В этой статье изложен метод для управляемых форм, который позволяет реализовать эту возможность.

1 стартмани

10.02.2013    63872    115    pbazeliuk    40    

Автоматическое обновление конфигурации (регламентное задание) для серверных решений

Обновление 1С Инструменты администратора БД Платформа 1С v8.3 Платформа 1С v8.3 Россия Россия Абонемент ($m) Абонемент ($m)

Фоновое задание (внешняя обработка) для автоматического обновления конфигурации: при передаче изменений конфигурации и данных от центральной базы на узел РИБ с последовательным обновлением конфигурации и данных на узле и для "НЕ РИБ" баз по такому же принципу. Выполняется запуском скриптов в пакетном режиме.

1 стартмани

28.09.2022    1585    1    FoxesStyle    0    

Зацикливается обработчик документов сверки взаиморасчетов при обновлении с 2.5.8.232 на 2.5.8.240(245)

Обновление 1С Адаптация типовых решений Платформа 1С v8.3 Платформа 1С v8.3 1С:Управление торговлей 11 1С:Управление торговлей 11 Россия Россия Абонемент ($m) Абонемент ($m)

Зацикливается обработчик документов сверки взаиморасчетов при обновлении с 2.5.8.232 на 2.5.8.240(245), платформа 8.3.19.1522. Установка исправления EF_00_00467553 от 1С не помогает.

1 стартмани

30.08.2022    1414    5    Wildcat55    0    

Быстрое обновление базы 1С из XML-файлов конфигурации (EDT-GIT)

DevOps и автоматизация разработки EDT Обновление 1С Механизмы платформы 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Быстрое обновление конфигурации и базы данных 1С, вместо долгого обновления из EDT (1C:Enterprise Development Tools) при использовании хранилища GIT. Непосредственное обновлении базы на сервере баз данных (минуя сервер 1С) из XML-файлов конфигурации при помощи утилиты автономного сервера 1С - ibcmd.

1 стартмани

13.07.2022    6269    5    Bitnikov    19    

Модуль проверки обновлений для собственной конфигурации Промо

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Если у вас есть конфигурация/подсистема собственной разработки, или просто некоторая очень хорошая обработка, и вы хотите сообщать пользователям о выходе новых версий, можете воспользоваться данным модулем.

1 стартмани

23.11.2012    12827    29    Mogidin    1    

Удаление патчей из конфигурации

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Иногда патчи от 1С мешают обновлению, разработке а руками удалять лень. Данная обработка работает так: через меню Файл - Открыть открывается обработка, которая удаляет - расширения (только патчи).

1 стартмани

28.04.2022    2287    7    ptkrzy    7    

Сценарий обновления платформы 1С:Предприятие 8 для deb-based ОС Linux

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Россия Россия Абонемент ($m) Абонемент ($m)

Сценарий обновления платформы 1С:Предприятие 8 для deb-based ОС Linux для реализации простого способа обновления из установочных файлов формата производителя.

1 стартмани

10.03.2022    2256    1    masterb    0    

Сравнение ячеек (1.0.0.4) Промо

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Данная разработка предназначена для более наглядного отображения информации из отчетов, которые создаются по результатам сравнения объектов конфигураций. Отчеты создаются выбором одного из пунктов меню "Отчет о сравнении объектов".

1 стартмани

15.12.2008    38100    1664    alexk-is    28    

Пакетное обновление информационных баз (типовые конфигурации)

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Решение для пакетного обновления всех типовых баз на базе БСП (библиотеки стандартных подсистем). Скрипт написан на Python, вызывается через cmd файл с аргументом. Предназначено только для работы с сервером 1С:Предприятие. Для работы необходимо установить Python не ниже 3 версии.

1 стартмани

04.03.2022    2329    9    idm80    6    

Блокировка работы пользователей

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Расширение для типового механизма блокировки пользователей БСП.

1 стартмани

24.02.2022    2044    2    7OH    4    

"Обновление через копию" - как это использовать?

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:ERP Управление предприятием 2 Абонемент ($m) Абонемент ($m)

Описание того, как использовать "Обновление через копию" для крупных баз данных типа 1С:ERP.

1 стартмани

26.12.2021    10284    23    Brawler    43    

Автообновление конфигурации после обмена

Архивирование (backup) DevOps и автоматизация разработки Обмен между базами 1C Платформа 1С v8.3 Платформа 1С v8.3 Украина Украина Абонемент ($m) Абонемент ($m)

Рабочий механизм автоматического обновления конфигурации "периферийной" базы после получения пакета обмена. Перед обновлением выполняется резервное копирование базы данных.

1 стартмани

02.09.2021    4296    2    Volvo32    1    

Обновление нетиповой конфигурации с приведением к типовой и выносом всех доработок в расширение. Часть/Способ №1

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 8.3.14 8.3.14 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Думаю, многие сталкивались с тем, что срочно необходимо из-за законов, оборудования, функционала обновиться на последний релиз. Данная публикация будет полезна как опытным программистам - упростить свою жизнь и работу, так и начинающим - узнать, как работают механизмы расширения, накопительного обновления, получить примеры кода, упростить обновление нетиповых конфигураций.

1 стартмани

10.03.2021    7819    8    cloud666    19    

Полный пример запуска 1С в докере (Linux)

DevOps и автоматизация разработки Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Описание примера запуска сервера 1С в докере на CentOS 7. Содержит архив со скриптами и последовательность шагов для запуска тестового сервера (Сервер, Клиент, Web и простой консоли управления информационными базами).

1 стартмани

26.01.2021    20550    48    uasy_user611066    13    

Блокировка пользователей БД + Рассылка

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Блокировка работы пользователей с рассылкой на указанные e-mail.

1 стартмани

26.10.2018    9166    2    bes_d    0    

1С в Windows docker контейнерах

Инструменты администратора БД DevOps и автоматизация разработки Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Создаем Docker-контейнер для windows-версии 1C. Контейнеры позволяют подготовить рабочую среду на любой актуальной версии windows. Благодаря данной технологии можно беспрепятственно запускать требуемую версию сервера 1С или несколько серверов различных версий на одном сервере.

1 стартмани

02.10.2018    41031    46    lishniy    42    

Запуск и контроль выполнения автоматизированных тестов из 1С – Jenkins Skin

Корректировка данных DevOps и автоматизация разработки Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Мы рассмотрим пример создания заданий выполнения автоматизированных тестов из 1С с использованием различных Фреймворков (xUnit1C, Тестирование 3.0): запуск, ожидание завершения, загрузка результатов и выполнение полного цикла тестирования продукта. Убедимся, что все действия можно выполнить в пару кликов в дружественном интерфейсе.

1 стартмани

09.07.2018    24412    16    ivanov660    5    

Автоматическое формирование отчета по качеству кода, используя конфигурацию "Автоматизированная проверка конфигураций"

DevOps и автоматизация разработки Тестирование QA Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Обработка позволяет создавать отчет по качеству кода в автоматическом режиме на сервере сборок Jenkins, используя конфигурацию "Автоматизированная проверка конфигураций"

1 стартмани

06.02.2017    6732    7    aleksey_vk    2    

Органайзер обновления конфигураций 1С

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Абонемент ($m) Абонемент ($m)

Всем, кто забывает/не успевает/забивает следить за выходами релизов конфигураций - данная конфигурация пригодится.

1 стартмани

09.12.2015    14177    25    nbeliaev    17    

Скрипт для выгрузки информационной базы

Архивирование (backup) Администрирование СУБД DevOps и автоматизация разработки Платформа 1С v8.3 Платформа 1С v8.3 Россия Россия Абонемент ($m) Абонемент ($m)

Скрипт позволяет произвести выгрузку информационной базы 1С клиент-серверного варианта.

1 стартмани

06.11.2015    41459    21    bashirov.rs    31    

Клиентское приложение (тонкий и толстый клиент) для Калькулятора релизов 1С

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Обработка для работы с бесплатным сервисом IT-Решение: Калькулятор релизов 1С. Возможности: - расчет количества обновлений с текущей версии до требуемой - определение планового времени процедуры обновления - подсчет плановой стоимости обновления

1 стартмани

08.09.2013    16866    6    bpc222    5    

Как вносить значительные изменения в типовую конфигурацию 1С, сохранив возможность ее обновления с минимальными трудозатратами

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

На любое требование конечного пользователя у специалиста НЕ должен мгновенно срабатывать рефлекс «хватай и кодируй».

1 стартмани

10.04.2013    20445    47    mwoleg    8    

Изменение типовых Конфигураций с последующим обновлением.

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Абонемент ($m) Абонемент ($m)

Иногда встречаются задания, которые для своего выполнения приводят к изменению конфигураций. А иногда встречаются конфигурации в которых вместо внешней печатной формы меняли модуль объекта, всего лишь для добавления пары значений в печатную форму. Для того чтобы в будущем на такие конфигурации быстро накатывать обновления я предлагаю следующий метод.

1 стартмани

24.11.2012    12366    35    rar_xxx    12    

Осторожно: обновление ЗУП 2.5.52.*

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 2.5 1С:Зарплата и Управление Персоналом 2.5 Россия Россия Абонемент ($m) Абонемент ($m)

Наверное почти все, кто как-то связан с ЗУП столкнулись мягко сказать кривоватым обновлением 2.5.52.2. Про 2.5.52.1 вообще речи не идет, официальный ответ 1С: "восстанавливайте из копии которую сделали перед обновлением".

1 стартмани

21.06.2012    15339    33    Zero_nv    30    

Автоматизация обновления доработанных типовых конфигураций

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Данная конфигурация предназначена для автоматизации процесса внесения изменений в тексты модулей типовых конфигураций 1С после проведения очередного обновления.

1 стартмани

19.09.2011    12701    111    s.sintsov    7    

Обновление КЛАДР в информационной базе

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

Обработка предназначена для быстрого обновления информации в регистре сведений "Адресный классификатор" по загруженным регионам в информационной базе.

1 стартмани

19.05.2010    19843    47    tomvlad    1    

Один способ вносить изменения в типовую конфигурацию без проблем с обновлением

Обновление 1С Платформа 1С v8.3 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv8 Россия Россия Абонемент ($m) Абонемент ($m)

В жизни любого 1С-программиста часто возникает необходимость доработки типовой конфигурации под нужды конкретного клиента. Иногда изменения небольшие, иногда существенные. Но в любом случае за изменениями следует наказание в виде утраты совместимости с оригинальной конфигурацией и последующей головной болью при обновлении. В статье описан один способ избежать тяжелых merge-ей.

1 стартмани

08.05.2010    28128    230    zfilin    37