1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Доработка автодобавления новых пайплайнов в Jenkins

This commit is contained in:
Anton Titovets
2025-08-08 11:10:40 +03:00
parent 5115b031e3
commit ff3cf1f9d8
3 changed files with 204 additions and 4 deletions

View File

@@ -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")
.ВернутьОтветКакСтроку();
Сообщить(Результат);
КонецПроцедуры

View File

@@ -0,0 +1,20 @@
<?xml version='1.1' encoding='UTF-8'?>
<com.cloudbees.hudson.plugins.folder.Folder plugin="cloudbees-folder">
<description></description>
<displayName>%1</displayName>
<properties/>
<folderViews class="com.cloudbees.hudson.plugins.folder.views.DefaultFolderViewHolder">
<views>
<hudson.model.AllView>
<owner class="com.cloudbees.hudson.plugins.folder.Folder" reference="../../../.."/>
<name>All</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
<tabBar class="hudson.views.DefaultViewsTabBar"/>
</folderViews>
<healthMetrics/>
<icon class="com.cloudbees.hudson.plugins.folder.icons.StockFolderIcon"/>
</com.cloudbees.hudson.plugins.folder.Folder>

View File

@@ -0,0 +1,56 @@
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job">
<actions>
<org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition"/>
<org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction plugin="pipeline-model-definition">
<jobProperties/>
<triggers/>
<parameters/>
<options/>
</org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction>
</actions>
<description></description>
<displayName>%1</displayName>
<keepDependencies>false</keepDependencies>
<properties>
<org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty>
<abortPrevious>false</abortPrevious>
</org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty>
<com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github">
<projectUrl>https://github.com/Bayselonarrend/OpenIntegrations/</projectUrl>
<displayName></displayName>
</com.coravy.hudson.plugins.github.GithubProjectProperty>
<jenkins.model.BuildDiscarderProperty>
<strategy class="hudson.tasks.LogRotator">
<daysToKeep>-1</daysToKeep>
<numToKeep>5</numToKeep>
<artifactDaysToKeep>-1</artifactDaysToKeep>
<artifactNumToKeep>-1</artifactNumToKeep>
<removeLastBuild>false</removeLastBuild>
</strategy>
</jenkins.model.BuildDiscarderProperty>
</properties>
<definition class="org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition" plugin="workflow-cps">
<scm class="hudson.plugins.git.GitSCM" plugin="git">
<configVersion>2</configVersion>
<userRemoteConfigs>
<hudson.plugins.git.UserRemoteConfig>
<url>https://github.com/Bayselonarrend/OpenIntegrations</url>
<credentialsId>gitmain</credentialsId>
</hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
<branches>
<hudson.plugins.git.BranchSpec>
<name>*/main</name>
</hudson.plugins.git.BranchSpec>
</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<submoduleCfg class="empty-list"/>
<extensions/>
</scm>
<scriptPath>%2</scriptPath>
<lightweight>true</lightweight>
</definition>
<triggers/>
<disabled>false</disabled>
</flow-definition>