From ff3cf1f9d8c79f71dba68652be937205a6722982 Mon Sep 17 00:00:00 2001 From: Anton Titovets Date: Fri, 8 Aug 2025 11:10:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BF=D0=B0=D0=B9=D0=BF=D0=BB=D0=B0=D0=B9=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B2=20Jenkins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../МетодыФормированияТестовJenkins.os | 132 +++++++++++++++++- service/templates/jenkins/conf_folder.txt | 20 +++ service/templates/jenkins/conf_pipeline.txt | 56 ++++++++ 3 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 service/templates/jenkins/conf_folder.txt create mode 100644 service/templates/jenkins/conf_pipeline.txt diff --git a/ci/os/internal/Modules/МетодыФормированияТестовJenkins.os b/ci/os/internal/Modules/МетодыФормированияТестовJenkins.os index 15efd5dd08..d36eddf623 100644 --- a/ci/os/internal/Modules/МетодыФормированияТестовJenkins.os +++ b/ci/os/internal/Modules/МетодыФормированияТестовJenkins.os @@ -10,10 +10,18 @@ Перем ШаблонCliDeb; Перем ШаблонШага; Перем ШаблонВыполнения; +Перем ШаблонПайплайна; +Перем ШаблонПапки; +Перем ЛогинJenkins; +Перем ТокенJenkins; +Перем ХостJenkins; Процедура СоздатьНаборWorkflow(Знач Языки, Знач КаталогПараметров, Знач КаталогWorkflow) Экспорт - КаталогШаблонов = "./service/templates/jenkins/"; + КаталогШаблонов = "./service/templates/jenkins/"; + ЛогинJenkins = ПолучитьПеременнуюСреды("JENKINS_LOGIN", РасположениеПеременнойСреды.Машина); + ТокенJenkins = ПолучитьПеременнуюСреды("JENKINS_TOKEN", РасположениеПеременнойСреды.Машина); + ХостJenkins = "https://jenkins.openintegrations.dev"; ПутьШаблонаCliWindows = КаталогШаблонов + "cli_test_windows.txt"; ПутьШаблонаOsWindows = КаталогШаблонов + "os_test_windows.txt"; @@ -23,6 +31,8 @@ ПутьШаблонаШага = КаталогШаблонов + "test_stage.txt"; ПутьШаблонаВыполнения = КаталогШаблонов + "test_exec.txt"; + ПутьШаблонаПайплайна = КаталогШаблонов + "conf_pipeline.txt"; + ПутьШаблонаПапки = КаталогШаблонов + "conf_folder.txt"; ШаблонCliWindows = Новый ДвоичныеДанные(ПутьШаблонаCliWindows); ШаблонCliWindows = ПолучитьСтрокуИзДвоичныхДанных(ШаблонCliWindows); @@ -45,6 +55,14 @@ ШаблонВыполнения = Новый ДвоичныеДанные(ПутьШаблонаВыполнения); ШаблонВыполнения = ПолучитьСтрокуИзДвоичныхДанных(ШаблонВыполнения); + ШаблонПайплайна = Новый ДвоичныеДанные(ПутьШаблонаПайплайна); + ШаблонПайплайна = ПолучитьСтрокуИзДвоичныхДанных(ШаблонПайплайна); + + ШаблонПапки = Новый ДвоичныеДанные(ПутьШаблонаПапки); + ШаблонПапки = ПолучитьСтрокуИзДвоичныхДанных(ШаблонПапки); + + СоздатьНачальнуюСтруктуруJenkins(); + Для Каждого Язык Из Языки Цикл ФайлПараметров = КаталогПараметров + Язык + ".json"; @@ -53,17 +71,33 @@ СписокБиблиотек = Неопределено; Выполнить("СписокБиблиотек = " + ЛокальныеПараметры["testsSectionsMethod"]); - СформироватьWorflow(ЛокальныеПараметры, КаталогWorkflow, Язык, СписокБиблиотек); + ПутьJenkins = "/job/OPITest/job/OpiFullTest"; + СформироватьWorflow(ЛокальныеПараметры, КаталогWorkflow, Язык, СписокБиблиотек, ПутьJenkins); Для Каждого Библиотека Из СписокБиблиотек Цикл - СформироватьWorflow(ЛокальныеПараметры, СтрШаблон("%1%2/%3/", КаталогWorkflow, "split_tests", Библиотека.Ключ), Язык, Библиотека); + + ИмяБиблиотеки = Библиотека.Ключ; + ПутьJenkinsРаздельных = "/job/OPITest/job/OpiSplitTests"; + ПутьJenkinsБиблиотеки = ПутьJenkinsРаздельных + "/job/" + ИмяБиблиотеки; + + СоздатьПапкуJenkins(ПутьJenkinsРаздельных, ИмяБиблиотеки, ИмяБиблиотеки); + СформироватьWorflow(ЛокальныеПараметры + , СтрШаблон("%1%2/%3/", КаталогWorkflow, "split_tests", ИмяБиблиотеки) + , Язык + , Библиотека + , ПутьJenkinsБиблиотеки); + КонецЦикла; КонецЦикла; КонецПроцедуры -Процедура СформироватьWorflow(Знач Параметры, Знач КаталогWorkflow, Знач Язык, Знач СписокБиблиотек) +Процедура СформироватьWorflow(Знач Параметры + , Знач КаталогWorkflow + , Знач Язык + , Знач СписокБиблиотек + , Знач ПутьJenkins) СписокРабот = ""; ТаблицаТестов = Неопределено; @@ -99,12 +133,43 @@ ТекстJFCLIRPM = СтрШаблон(ШаблонCliRpm, Язык, ТекстВыполненияCLI, "Rpm-Agent"); ТекстJFCLIDEB = СтрШаблон(ШаблонCliDeb, Язык, ТекстВыполненияCLI, "Deb-Agent"); + ШаблонПредставления = "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); КонецПроцедуры @@ -145,4 +210,63 @@ КонецФункции +Процедура СоздатьНачальнуюСтруктуру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") + .ВернутьОтветКакСтроку(); + + Сообщить(Результат); + +КонецПроцедуры + +Процедура УдалитьЭлементJenkins(Знач Путь) + + Url = СтрШаблон("%1%2/doDelete", ХостJenkins, Путь); + + Результат = OPI_ЗапросыHTTP.НовыйЗапрос() + .Инициализировать() + .УстановитьURL(URL) + .ДобавитьBasicАвторизацию(ЛогинJenkins, ТокенJenkins) + .ОбработатьЗапрос("POST") + .ВернутьОтветКакСтроку(); + + Сообщить(Результат); + +КонецПроцедуры + + diff --git a/service/templates/jenkins/conf_folder.txt b/service/templates/jenkins/conf_folder.txt new file mode 100644 index 0000000000..ba9dfda20e --- /dev/null +++ b/service/templates/jenkins/conf_folder.txt @@ -0,0 +1,20 @@ + + + + %1 + + + + + + All + false + false + + + + + + + + \ No newline at end of file diff --git a/service/templates/jenkins/conf_pipeline.txt b/service/templates/jenkins/conf_pipeline.txt new file mode 100644 index 0000000000..63034ad58a --- /dev/null +++ b/service/templates/jenkins/conf_pipeline.txt @@ -0,0 +1,56 @@ + + + + + + + + + + + + + %1 + false + + + false + + + https://github.com/Bayselonarrend/OpenIntegrations/ + + + + + -1 + 5 + -1 + -1 + false + + + + + + 2 + + + https://github.com/Bayselonarrend/OpenIntegrations + gitmain + + + + + */main + + + false + + + + %2 + true + + + false + \ No newline at end of file