You've already forked OpenIntegrations
							
							
				mirror of
				https://github.com/Bayselonarrend/OpenIntegrations.git
				synced 2025-10-30 23:47:46 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			363 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			363 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
			Vendored
		
	
	
	
| #Использовать "./../../../../src/en/OInt/tools/"
 | |
| #Использовать "./../../../../src/ru/OInt/tools/"
 | |
| #Использовать "./internal"
 | |
| 
 | |
| Перем Путь1с;
 | |
| Перем Сервер1с;
 | |
| Перем База1сRu;
 | |
| Перем База1сEn;
 | |
| 
 | |
| Перем КаталогКонфигурацииYaxUnit;
 | |
| Перем ШаблонКонфигурацииYaxUnit;
 | |
| 
 | |
| Перем СписокРабот;
 | |
| Перем ШаблонCliWindows;
 | |
| Перем ШаблонOsWindows;
 | |
| Перем Шаблон1cWindows;
 | |
| Перем ШаблонOsLinux;
 | |
| Перем ШаблонCliRpm;
 | |
| Перем ШаблонCliDeb;
 | |
| 
 | |
| Перем ШаблонШага;
 | |
| Перем ШаблонВыполненияOs;
 | |
| Перем ШаблонВыполнения1с;
 | |
| Перем ШаблонПайплайна;
 | |
| Перем ШаблонПапки;
 | |
| Перем ЛогинJenkins;
 | |
| Перем ТокенJenkins;
 | |
| Перем ХостJenkins;
 | |
| 
 | |
| Процедура СоздатьНаборWorkflow(Знач Языки, Знач КаталогПараметров, Знач КаталогWorkflow) Экспорт
 | |
| 
 | |
| 	Путь1с   = "C:\\Program Files\\1cv8\\8.3.18.1208\\bin\\1cv8c.exe";
 | |
| 	Сервер1с = "DEVSRV";
 | |
| 	База1сRu = "OpenIntegrations";
 | |
| 	База1сEn = "OpenIntegrationsEng";
 | |
| 
 | |
| 	КаталогКонфигурацииYaxUnit = "./service/yaxunit_conf/";
 | |
| 
 | |
| 	ШаблонКонфигурацииYaxUnit  = КаталогКонфигурацииYaxUnit + "template.txt";
 | |
| 	ШаблонКонфигурацииYaxUnit  = Новый ДвоичныеДанные(ШаблонКонфигурацииYaxUnit);
 | |
| 	ШаблонКонфигурацииYaxUnit = ПолучитьСтрокуИзДвоичныхДанных(ШаблонКонфигурацииYaxUnit);
 | |
| 
 | |
| 	КаталогШаблонов    = "./service/templates/jenkins/";
 | |
| 	ЛогинJenkins       = ПолучитьПеременнуюСреды("JENKINS_LOGIN", РасположениеПеременнойСреды.Машина);
 | |
| 	ТокенJenkins       = ПолучитьПеременнуюСреды("JENKINS_TOKEN", РасположениеПеременнойСреды.Машина);
 | |
| 	ХостJenkins        = "https://jenkins.openintegrations.dev";
 | |
| 
 | |
| 	ПутьШаблонаCliWindows = КаталогШаблонов + "cli_test_windows.txt";
 | |
| 	ПутьШаблонаOsWindows  = КаталогШаблонов + "os_test_windows.txt";
 | |
| 	ПутьШаблонаOsLinux    = КаталогШаблонов + "os_test_linux.txt";
 | |
| 	ПутьШаблонаCliRpm     = КаталогШаблонов + "cli_test_rpm.txt";
 | |
| 	ПутьШаблонаCliDeb     = КаталогШаблонов + "cli_test_deb.txt";
 | |
| 	ПутьШаблона1cWindows  = КаталогШаблонов + "1c_test_windows.txt";
 | |
| 
 | |
| 	ПутьШаблонаШага         = КаталогШаблонов + "test_stage.txt";
 | |
| 	ПутьШаблонаВыполненияOs = КаталогШаблонов + "test_exec_os.txt";
 | |
| 	ПутьШаблонаВыполнения1C = КаталогШаблонов + "test_exec_1c.txt";
 | |
| 	ПутьШаблонаПайплайна    = КаталогШаблонов + "conf_pipeline.txt";
 | |
| 	ПутьШаблонаПапки        = КаталогШаблонов + "conf_folder.txt";
 | |
| 
 | |
| 	ШаблонCliWindows = Новый ДвоичныеДанные(ПутьШаблонаCliWindows);
 | |
| 	ШаблонCliWindows = ПолучитьСтрокуИзДвоичныхДанных(ШаблонCliWindows);
 | |
| 
 | |
| 	ШаблонOsWindows = Новый ДвоичныеДанные(ПутьШаблонаOsWindows);
 | |
| 	ШаблонOsWindows = ПолучитьСтрокуИзДвоичныхДанных(ШаблонOsWindows);
 | |
| 
 | |
| 	ШаблонOsLinux = Новый ДвоичныеДанные(ПутьШаблонаOsLinux);
 | |
| 	ШаблонOsLinux = ПолучитьСтрокуИзДвоичныхДанных(ШаблонOsLinux);
 | |
| 
 | |
| 	ШаблонCliRpm = Новый ДвоичныеДанные(ПутьШаблонаCliRpm);
 | |
| 	ШаблонCliRpm = ПолучитьСтрокуИзДвоичныхДанных(ШаблонCliRpm);
 | |
| 
 | |
| 	ШаблонCliDeb = Новый ДвоичныеДанные(ПутьШаблонаCliDeb);
 | |
| 	ШаблонCliDeb = ПолучитьСтрокуИзДвоичныхДанных(ШаблонCliDeb);
 | |
| 
 | |
| 	Шаблон1cWindows = Новый ДвоичныеДанные(ПутьШаблона1cWindows);
 | |
| 	Шаблон1cWindows = ПолучитьСтрокуИзДвоичныхДанных(Шаблон1cWindows);
 | |
| 
 | |
| 	ШаблонШага = Новый ДвоичныеДанные(ПутьШаблонаШага);
 | |
| 	ШаблонШага = ПолучитьСтрокуИзДвоичныхДанных(ШаблонШага);
 | |
| 
 | |
| 	ШаблонВыполненияOs = Новый ДвоичныеДанные(ПутьШаблонаВыполненияOs);
 | |
| 	ШаблонВыполненияOs = ПолучитьСтрокуИзДвоичныхДанных(ШаблонВыполненияOs);
 | |
| 
 | |
| 	ШаблонВыполнения1с = Новый ДвоичныеДанные(ПутьШаблонаВыполнения1c);
 | |
| 	ШаблонВыполнения1с = ПолучитьСтрокуИзДвоичныхДанных(ШаблонВыполнения1с);
 | |
| 
 | |
| 	ШаблонПайплайна = Новый ДвоичныеДанные(ПутьШаблонаПайплайна);
 | |
| 	ШаблонПайплайна = ПолучитьСтрокуИзДвоичныхДанных(ШаблонПайплайна);
 | |
| 
 | |
| 	ШаблонПапки = Новый ДвоичныеДанные(ПутьШаблонаПапки);
 | |
| 	ШаблонПапки = ПолучитьСтрокуИзДвоичныхДанных(ШаблонПапки);
 | |
| 
 | |
| 	СоздатьНачальнуюСтруктуруJenkins();
 | |
| 
 | |
| 	Для Каждого Язык Из Языки Цикл
 | |
| 
 | |
| 		ФайлПараметров = КаталогПараметров + Язык + ".json";
 | |
| 		ЛокальныеПараметры = Инструменты.ПрочитатьФайлJSON(ФайлПараметров);
 | |
| 
 | |
| 		СписокБиблиотек = Неопределено;
 | |
| 		Выполнить("СписокБиблиотек = " + ЛокальныеПараметры["testsSectionsMethod"]);
 | |
| 
 | |
| 		ПутьJenkins = "/job/OPITest/job/OpiFullTest";
 | |
| 		СформироватьWorflow(ЛокальныеПараметры, КаталогWorkflow, Язык, СписокБиблиотек, ПутьJenkins);
 | |
| 
 | |
| 		Для Каждого Библиотека Из СписокБиблиотек Цикл
 | |
| 
 | |
| 			ИмяБиблиотеки          = Библиотека.Ключ;
 | |
| 			ПутьJenkinsРаздельных  = "/job/OPITest/job/OpiSplitTests";
 | |
| 			ПутьJenkinsБиблиотеки  = ПутьJenkinsРаздельных + "/job/" + ИмяБиблиотеки;
 | |
| 
 | |
| 			СоздатьПапкуJenkins(ПутьJenkinsРаздельных, ИмяБиблиотеки, ИмяБиблиотеки);
 | |
| 			СформироватьWorflow(ЛокальныеПараметры
 | |
| 				, СтрШаблон("%1%2/%3/", КаталогWorkflow, "split_tests", ИмяБиблиотеки)
 | |
| 				, Язык
 | |
| 				, Библиотека
 | |
| 				, ПутьJenkinsБиблиотеки);
 | |
| 
 | |
| 		КонецЦикла;
 | |
| 
 | |
| 	КонецЦикла;
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| Процедура СформироватьWorflow(Знач Параметры
 | |
| 	, Знач КаталогWorkflow
 | |
| 	, Знач Язык
 | |
| 	, Знач СписокБиблиотек
 | |
| 	, Знач ПутьJenkins)
 | |
| 	
 | |
| 	СписокРабот     = "";
 | |
| 	ТаблицаТестов   = Неопределено;
 | |
| 	МассивВлияющих  = Новый Массив;
 | |
| 	ЯзыкВрег        = ВРег(Язык);
 | |
| 	ЯзыкТрег        = ТРег(Язык);
 | |
| 
 | |
| 	МодульТестов    = Параметры["testsModulePath"];
 | |
| 	МодульТестовCLI = Параметры["testsCliModulePath"];
 | |
| 
 | |
| 	Выполнить("ТаблицаТестов   = " + Параметры["testsTableMethod"]);
 | |
| 
 | |
| 	КаталогWorkflowОбъект = Новый Файл(КаталогWorkflow);
 | |
| 	
 | |
| 	Если Не КаталогWorkflowОбъект.Существует() Тогда
 | |
| 		СоздатьКаталог(КаталогWorkflow);
 | |
| 	КонецЕсли;
 | |
| 	
 | |
| 	ФайлJenkinsOS    = КаталогWorkflow + "os_test_" + Язык;
 | |
| 	ФайлJenkinsOSRPM = КаталогWorkflow + "os_rpm_test_" + Язык;
 | |
| 	ФайлJenkinsOSDEB = КаталогWorkflow + "os_deb_test_" + Язык;
 | |
| 	ФайлWindowsCLI   = КаталогWorkflow + "cli_test_" + Язык;
 | |
| 	ФайлRpmCLI       = КаталогWorkflow + "cli_rpm_test_" + Язык;
 | |
| 	ФайлDebCLI       = КаталогWorkflow + "cli_deb_test_" + Язык;
 | |
| 	ФайлWindows1c    = КаталогWorkflow + "1c_test_" + Язык;
 | |
| 
 | |
| 	ТекстВыполненияOS  = ПолучитьТекстВыполненияOs(ТаблицаТестов, СписокБиблиотек, Параметры, МодульТестов);
 | |
| 	ТекстВыполненияCLI = ПолучитьТекстВыполненияOs(ТаблицаТестов, СписокБиблиотек, Параметры, МодульТестовCLI);
 | |
| 	ТекстВыполнения1С  = ПолучитьТекстВыполнения1c(ТаблицаТестов, СписокБиблиотек, Параметры, МодульТестов, Язык);
 | |
| 
 | |
| 	ТекстJFCLI   = СтрШаблон(ШаблонCliWindows, Язык, ТекстВыполненияCLI);
 | |
| 	ТекстJFOS    = СтрШаблон(ШаблонOsWindows, Язык, ТекстВыполненияOS);
 | |
| 
 | |
| 	ТекстJFOSRPM = СтрШаблон(ШаблонOsLinux, Язык, ТекстВыполненияOS, "Rpm-Agent");
 | |
| 	ТекстJFOSDEB = СтрШаблон(ШаблонOsLinux, Язык, ТекстВыполненияOS, "Deb-Agent");
 | |
| 	
 | |
| 	ТекстJFCLIRPM = СтрШаблон(ШаблонCliRpm, Язык, ТекстВыполненияCLI, "Rpm-Agent");
 | |
| 	ТекстJFCLIDEB = СтрШаблон(ШаблонCliDeb, Язык, ТекстВыполненияCLI, "Deb-Agent");
 | |
| 
 | |
| 	ТекстJF1CWin = СтрШаблон(Шаблон1cWindows, Язык, ТекстВыполнения1С);
 | |
| 
 | |
| 	ШаблонПредставления = "OPI | Тестирование версии для %1 (%2, %3)";
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFOS).Записать(ФайлJenkinsOS);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiOsWin" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "OneScript", "Windows", ЯзыкВрег)
 | |
| 		, ФайлJenkinsOS);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFOSRPM).Записать(ФайлJenkinsOSRPM);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiOsRpm" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "OneScript", "RPM", ЯзыкВрег)
 | |
| 		, ФайлJenkinsOSRPM);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFOSDEB).Записать(ФайлJenkinsOSDEB);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiOsDeb" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "OneScript", "DEB", ЯзыкВрег)
 | |
| 		, ФайлJenkinsOSDEB);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFCLI).Записать(ФайлWindowsCLI);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiCliWin" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "CLI", "Windows", ЯзыкВрег)
 | |
| 		, ФайлWindowsCLI);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFCLIRPM).Записать(ФайлRpmCLI);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiCliRpm" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "CLI", "RPM", ЯзыкВрег)
 | |
| 		, ФайлRpmCLI);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJFCLIDEB).Записать(ФайлDebCLI);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "OpiCliDeb" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "CLI", "DEB", ЯзыкВрег)
 | |
| 		, ФайлDebCLI);
 | |
| 
 | |
| 	ПолучитьДвоичныеДанныеИзСтроки(ТекстJF1CWin).Записать(ФайлWindows1c);
 | |
| 	СоздатьПайплайнJenkins(ПутьJenkins
 | |
| 		, "Opi1cWin" + ЯзыкТрег
 | |
| 		, СтрШаблон(ШаблонПредставления, "1C:Enterprise", "Windows", ЯзыкВрег)
 | |
| 		, ФайлWindows1c);
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| Функция ПолучитьТекстВыполненияOs(Знач ТаблицаТестов, Знач СписокБиблиотек, Знач Параметры, Знач МодульТестов)
 | |
| 	
 | |
| 	СтрокаРаздел    = Параметры["sectionsString"];
 | |
| 	СтрокаМетод     = Параметры["methodString"];
 | |
| 	СтрокаСиноним   = Параметры["synonymString"];
 | |
| 
 | |
| 	Если Не ТипЗнч(СписокБиблиотек) = Тип("Структура") Тогда
 | |
| 		СписокБиблиотек_ = Новый Структура;
 | |
| 		СписокБиблиотек_.Вставить(СписокБиблиотек.Ключ, СписокБиблиотек.Значение);
 | |
| 		СписокБиблиотек = СписокБиблиотек_;
 | |
| 	КонецЕсли;
 | |
| 
 | |
| 	МассивШагов = Новый Массив;
 | |
| 	Для Каждого Библиотека Из СписокБиблиотек Цикл
 | |
| 
 | |
| 		Раздел      = Библиотека.Ключ;
 | |
| 
 | |
| 		Отбор = Новый Структура(СтрокаРаздел, Раздел);
 | |
| 		ТестыТекущегоРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
 | |
| 
 | |
| 		МассивВыполнений = Новый Массив;
 | |
| 		Для Каждого Тест Из ТестыТекущегоРаздела Цикл
 | |
| 
 | |
| 			Метод = Тест[СтрокаМетод];
 | |
| 			
 | |
| 			МассивВыполнений.Добавить(СтрШаблон(ШаблонВыполненияOs, МодульТестов, Метод))
 | |
| 
 | |
| 		КонецЦикла;
 | |
| 
 | |
| 		МассивШагов.Добавить(СтрШаблон(ШаблонШага, Раздел, СтрСоединить(МассивВыполнений, Символы.ПС)));
 | |
| 
 | |
| 	КонецЦикла;
 | |
| 
 | |
| 	Возврат СтрСоединить(МассивШагов, Символы.ПС);
 | |
| 
 | |
| КонецФункции
 | |
| 
 | |
| Функция ПолучитьТекстВыполнения1c(Знач ТаблицаТестов, Знач СписокБиблиотек, Знач Параметры, Знач МодульТестов, Знач Язык)
 | |
| 	
 | |
| 	СтрокаРаздел    = Параметры["sectionsString"];
 | |
| 	СтрокаМетод     = Параметры["methodString"];
 | |
| 	СтрокаСиноним   = Параметры["synonymString"];
 | |
| 
 | |
| 	Если Не ТипЗнч(СписокБиблиотек) = Тип("Структура") Тогда
 | |
| 		СписокБиблиотек_ = Новый Структура;
 | |
| 		СписокБиблиотек_.Вставить(СписокБиблиотек.Ключ, СписокБиблиотек.Значение);
 | |
| 		СписокБиблиотек = СписокБиблиотек_;
 | |
| 	КонецЕсли;
 | |
| 
 | |
| 	МассивШагов = Новый Массив;
 | |
| 	Для Каждого Библиотека Из СписокБиблиотек Цикл
 | |
| 
 | |
| 		Раздел  = Библиотека.Ключ;
 | |
| 		База    = ?(Язык = "ru", База1сRu, База1сEn);
 | |
| 		YaxConf = КаталогКонфигурацииYaxUnit + Язык + "/" + Раздел + ".json";
 | |
| 
 | |
| 		Выполнение = СтрШаблон(ШаблонВыполнения1с, Путь1с, Сервер1с, База, Раздел, Язык);
 | |
| 
 | |
| 		Отбор = Новый Структура(СтрокаРаздел, Раздел);
 | |
| 		ТестыТекущегоРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
 | |
| 
 | |
| 		МассивМетодов = Новый Массив;
 | |
| 
 | |
| 		Для Каждого Тест Из ТестыТекущегоРаздела Цикл
 | |
| 
 | |
| 			Метод = Тест[СтрокаМетод];
 | |
| 			МассивМетодов.Добавить("""" + Метод + """" );
 | |
| 			
 | |
| 		КонецЦикла;
 | |
| 
 | |
| 		ПолучитьДвоичныеДанныеИзСтроки(СтрШаблон(ШаблонКонфигурацииYaxUnit, Раздел, СтрСоединить(МассивМетодов, "," + Символы.ПС)))
 | |
| 			.Записать(КаталогКонфигурацииYaxUnit + Язык + "/" + Раздел + ".json");
 | |
| 
 | |
| 		МассивШагов.Добавить(СтрШаблон(ШаблонШага, Раздел, Выполнение));
 | |
| 
 | |
| 	КонецЦикла;
 | |
| 
 | |
| 	Возврат СтрСоединить(МассивШагов, Символы.ПС);
 | |
| 
 | |
| КонецФункции
 | |
| 
 | |
| Процедура СоздатьНачальнуюСтруктуруJenkins()
 | |
| 
 | |
| 	УдалитьЭлементJenkins("/job/OPITest");
 | |
| 
 | |
| 	СоздатьПапкуJenkins("", "OPITest", "OPI | Тестирование");
 | |
| 	СоздатьПапкуJenkins("/job/OPITest", "OpiFullTest", "Полные тесты");
 | |
| 	СоздатьПапкуJenkins("/job/OPITest", "OpiSplitTests", "Раздельные тесты");
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| Процедура СоздатьПапкуJenkins(Знач Путь, Знач Имя, Знач Представление)
 | |
| 
 | |
| 	Данные = СтрШаблон(ШаблонПапки, Представление);
 | |
| 
 | |
| 	СоздатьЭлементJenkins(Путь, Имя + "&mode=com.cloudbees.hudson.plugins.folder.Folder", Данные);
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| Процедура СоздатьПайплайнJenkins(Знач Путь, Знач Имя, Знач Представление, Знач Jenkinsfile)
 | |
| 
 | |
| 	Данные = СтрШаблон(ШаблонПайплайна, Представление, Jenkinsfile);
 | |
| 
 | |
| 	СоздатьЭлементJenkins(Путь, Имя, Данные);
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| Процедура СоздатьЭлементJenkins(Знач Путь, Знач Имя, Знач Данные)
 | |
| 
 | |
| 	Url = СтрШаблон("%1%2/createItem?name=%3", ХостJenkins, Путь, Имя);
 | |
| 
 | |
| 	Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
 | |
|         .Инициализировать()
 | |
|         .УстановитьURL(URL)
 | |
| 		.УстановитьСтроковоеТело(Данные)
 | |
| 		.УстановитьТипДанных("application/xml")
 | |
|         .ДобавитьBasicАвторизацию(ЛогинJenkins, ТокенJenkins)
 | |
|         .ОбработатьЗапрос("POST")
 | |
|         .ВернутьОтвет()
 | |
| 		.КодСостояния;
 | |
| 
 | |
| 	Сообщить(СтрШаблон("Создание %1: %2", Путь, Результат));
 | |
| 	
 | |
| КонецПроцедуры
 | |
| 
 | |
| Процедура УдалитьЭлементJenkins(Знач Путь)
 | |
| 
 | |
| 	Url = СтрШаблон("%1%2/doDelete", ХостJenkins, Путь);
 | |
| 
 | |
|     Результат = OPI_ЗапросыHTTP.НовыйЗапрос()
 | |
|         .Инициализировать()
 | |
|         .УстановитьURL(URL)
 | |
|         .ДобавитьBasicАвторизацию(ЛогинJenkins, ТокенJenkins)
 | |
|         .ОбработатьЗапрос("POST")
 | |
|         .ВернутьОтвет()
 | |
| 		.КодСостояния;
 | |
| 
 | |
| 	Сообщить(СтрШаблон("Удаление %1: %2", Путь, Результат));
 | |
| 
 | |
| КонецПроцедуры
 | |
| 
 | |
| 
 | |
| Языки = Новый Массив;
 | |
| Языки.Добавить("ru");
 | |
| 
 | |
| СоздатьНаборWorkflow(Языки, "./service/localization_vars/", "./ci/"); |