1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-10-30 23:47:46 +02:00
Files
OpenIntegrations/ci/os/internal/Modules/МетодыФормированияТестовJenkins.os

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/");