1
0
mirror of https://github.com/DoublesunRUS/devscripts.git synced 2026-06-11 22:46:51 +02:00

Интеграция / Развертывание

This commit is contained in:
Капралов Александр
2021-03-04 23:01:07 +03:00
parent 50f5a8d53b
commit e87ea24efa
4 changed files with 457 additions and 16 deletions
+83
View File
@@ -0,0 +1,83 @@
before_script:
- CHCP 65001
stages:
- build
- test
- report
variables:
WP: '${CI_PROJECT_DIR}/temp/wp'
buildMR:
stage: build
tags:
- edt
only:
- merge_requests
script:
- executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl buildMR
artifacts:
name: build
paths:
- build/
- ci/
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- $env:WP
testCore:
stage: test
tags:
- edt
only:
- merge_requests
dependencies:
- buildMR
script:
- executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl testCore
artifacts:
name: test
reports:
junit: test/junit/*.xml
paths:
- test/
- ci/
testUI:
stage: test
tags:
- edt
only:
- merge_requests
dependencies:
- buildMR
script:
- executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl testUI
artifacts:
name: test
reports:
junit: test/junit/*.xml
paths:
- test/
- ci/
- public/
environment:
name: allure
url: https://${CI_SERVER_HOST}/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/public/index.html
pages:
stage: report
tags:
- edt
only:
- merge_requests
dependencies:
- testUI
script:
- executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl pages
artifacts:
paths:
- ci/
- public/
@@ -41,7 +41,7 @@ testCore:
artifacts:
name: test
reports:
junit: test/junit/junit.xml
junit: test/junit/*.xml
paths:
- test/
- ci/
@@ -59,11 +59,14 @@ testUI:
artifacts:
name: test
reports:
junit: test/junit/junit.xml
junit: test/junit/*.xml
paths:
- test/
- ci/
- public/
environment:
name: allure
url: https://${CI_SERVER_HOST}/${CI_PROJECT_PATH}/-/jobs/${CI_JOB_ID}/artifacts/file/public/index.html
pages:
stage: report
Binary file not shown.
+369 -14
View File
@@ -32,6 +32,8 @@
иначе
СобратьПоследнийРелиз() // Доработать на СобратьРелизНаДату()
;
когда "buildMR"
СобратьРелизДляСлияния()
когда "testCore"
ПротестироватьКод()
когда "testUI"
@@ -269,6 +271,230 @@
;
;
метод СобратьРелизДляСлияния()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
знч CI_PROJECT_ID = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_ID")
знч CI_PROJECT_PATH = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_PATH")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
знч RELEASES_TOKEN = СредаИсполнения.ПолучитьПеременную("RELEASES_TOKEN")
пер ошибкиТокенов = ""
если RELEASES_TOKEN.Пусто()
ошибкиТокенов += "В переменную RELEASES_TOKEN необходимо поместить api token репозитория Релизов." + Символы.НоваяСтрока
;
знч настройки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR")
если СредаИсполнения.ПолучитьПеременную(настройки.Конфигурация.ПеременнаяТокена).Пусто()
ошибкиТокенов += "В переменную %{настройки.Конфигурация
.ПеременнаяТокена} необходимо поместить read api token репозитория %{настройки.Конфигурация.Имя}." + Символы.НоваяСтрока
;
для репозиторийРасширения из настройки.ПрикладныеРасширения
если СредаИсполнения.ПолучитьПеременную(репозиторийРасширения.ПеременнаяТокена).Пусто()
ошибкиТокенов += "В переменную %{репозиторийРасширения
.ПеременнаяТокена} необходимо поместить read api token репозитория %{репозиторийРасширения.Имя}."
+ Символы.НоваяСтрока
;
;
для репозиторийРасширения из настройки.ТестовыеРасширения
если СредаИсполнения.ПолучитьПеременную(репозиторийРасширения.ПеременнаяТокена).Пусто()
ошибкиТокенов += "В переменную %{репозиторийРасширения
.ПеременнаяТокена} необходимо поместить read api token репозитория %{репозиторийРасширения.Имя}."
+ Символы.НоваяСтрока
;
;
если не ошибкиТокенов.Пусто()
выбросить новый ИсключениеНедопустимоеСостояние(ошибкиТокенов)
;
знч полныйПутьПрикладнойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ"
знч полныйПутьТестовойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ТЕСТОВОЙ_СБОРКИ"
Консоль.Записать("Создать каталог: %полныйПутьПрикладнойСборки")
Файлы.СоздатьКаталог(полныйПутьПрикладнойСборки)
Консоль.Записать("Создать каталог: %полныйПутьТестовойСборки")
Файлы.СоздатьКаталог(полныйПутьТестовойСборки)
знч полныйПутьСлужебнойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ"
Консоль.Записать("Создать каталог: %полныйПутьСлужебнойСборки")
Файлы.СоздатьКаталог(полныйПутьСлужебнойСборки)
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройки.Конфигурация.Ветка)
знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройки.Конфигурация.Имя}/%{настройки.Конфигурация.Проект}"
Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ")
знч исполняемыйФайлПлатформы = ИсполняемыйФайлПлатформы(путьКонфигурацииЕДТ)
знч путьИБ = "%CI_PROJECT_DIR/temp/db"
Консоль.Записать("CreateInfobase: %путьИБ %исполняемыйФайлПлатформы")
CreateInfobase(путьИБ, исполняемыйФайлПлатформы)
знч имяРепозиторияРелизов = "%CI_PROJECT_NAMESPACE\%2Freleases"
Консоль.Записать("Releases_LastDate: %имяРепозиторияРелизов %CI_SERVER_HOST")
знч датаПоследнегоРелиза = Releases_LastDate(имяРепозиторияРелизов, RELEASES_TOKEN, CI_SERVER_HOST)
Консоль.Записать("Дата последнего релиза = %датаПоследнегоРелиза")
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
пер пересобиратьОсновнуюКонфигурацию = Ложь
пер репозиторииДляПересборки = новый Массив()
пер путиСборки = новый Соответствие()
если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта
пересобиратьОсновнуюКонфигурацию = Истина
иначе
знч результатПроверки = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(настройки.Конфигурация, датаПоследнегоРелиза)
если результатПроверки != Неопределено
пересобиратьОсновнуюКонфигурацию = Истина
иначе
если не СкачатьАртефактРепозитория(настройки.Конфигурация, ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ, Ложь)
пересобиратьОсновнуюКонфигурацию = Истина
;
;
;
для репозиторийРасширения из настройки.ПрикладныеРасширения
путиСборки.Вставить(репозиторийРасширения.Имя, полныйПутьПрикладнойСборки)
если репозиторийРасширения.Имя == запросНаСлияние.имяПроекта
репозиторииДляПересборки.Добавить(репозиторийРасширения)
иначе
знч результатПроверкиРасширения = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(репозиторийРасширения, датаПоследнегоРелиза)
если результатПроверкиРасширения != Неопределено
репозиторииДляПересборки.Добавить(репозиторийРасширения)
иначе
если не СкачатьАртефактРепозитория(репозиторийРасширения, ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ, Истина)
репозиторииДляПересборки.Добавить(репозиторийРасширения)
;
;
если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта
пересобиратьОсновнуюКонфигурацию = Истина
;
;
;
для репозиторийРасширения из настройки.ТестовыеРасширения
путиСборки.Вставить(репозиторийРасширения.Имя, полныйПутьТестовойСборки)
если репозиторийРасширения.Имя == запросНаСлияние.имяПроекта
репозиторииДляПересборки.Добавить(репозиторийРасширения)
иначе
знч результатПроверкиРасширения = ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(репозиторийРасширения, датаПоследнегоРелиза)
если результатПроверкиРасширения != Неопределено
репозиторииДляПересборки.Добавить(репозиторийРасширения)
иначе
если не СкачатьАртефактРепозитория(репозиторийРасширения, ИМЯ_КАТАЛОГА_ТЕСТОВОЙ_СБОРКИ, Истина)
репозиторииДляПересборки.Добавить(репозиторийРасширения)
;
;
;
;
если не пересобиратьОсновнуюКонфигурацию и репозиторииДляПересборки.Пусто()
Консоль.Записать("Jobs_Cancel: %CI_JOB_ID %CI_PROJECT_ID %CI_SERVER_HOST")
Jobs_Cancel(CI_JOB_ID, CI_PROJECT_ID, RELEASES_TOKEN, CI_SERVER_HOST)
возврат
;
знч файлКонфигурации = "%полныйПутьПрикладнойСборки/1cv8.cf"
если пересобиратьОсновнуюКонфигурацию
знч путьКонфигурацииПлатформы = "%CI_PROJECT_DIR/temp/src_%{настройки.Конфигурация.Имя}"
Консоль.Записать("WorkspaceExport: %путьКонфигурацииЕДТ %путьКонфигурацииПлатформы %WP")
WorkspaceExport(путьКонфигурацииЕДТ, путьКонфигурацииПлатформы, WP, ВЕРСИЯ_EDT)
попытка
знч файлПоставки = "%путьКонфигурацииПлатформы/Ext/ParentConfigurations.bin"
Консоль.Записать("Удалить файл: %файлПоставки")
Файлы.Удалить(файлПоставки)
поймать исключение: любой
Консоль.Записать("Было исключение %исключение")
;
попытка
знч каталогПоставки = "%путьКонфигурацииПлатформы/Ext/ParentConfigurations"
Консоль.Записать("Удалить каталог: %каталогПоставки")
Файлы.Удалить(каталогПоставки)
поймать исключение: любой
Консоль.Записать("Было исключение %исключение")
;
Консоль.Записать("LoadConfigFromFiles: %путьКонфигурацииПлатформы %путьИБ %исполняемыйФайлПлатформы")
LoadConfigFromFiles(путьКонфигурацииПлатформы, путьИБ, исполняемыйФайлПлатформы)
Консоль.Записать("UpdateDBCfg: %путьИБ %исполняемыйФайлПлатформы")
UpdateDBCfg(путьИБ, исполняемыйФайлПлатформы)
Консоль.Записать("CreateDistributionFiles: %файлКонфигурации %путьИБ %исполняемыйФайлПлатформы")
CreateDistributionFiles(файлКонфигурации, путьИБ, исполняемыйФайлПлатформы)
иначе
Консоль.Записать("LoadCfg: %файлКонфигурации %путьИБ %исполняемыйФайлПлатформы")
LoadCfg(файлКонфигурации, путьИБ, исполняемыйФайлПлатформы)
Консоль.Записать("UpdateDBCfg: %путьИБ %исполняемыйФайлПлатформы")
UpdateDBCfg(путьИБ, исполняемыйФайлПлатформы)
;
для репозиторий из репозиторииДляПересборки
знч адресРепозитория = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторий
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозитория %{репозиторий.Ветка}")
Git_Clone(адресРепозитория, репозиторий.Ветка)
пер путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{репозиторий.Проект}"
если не (новый Файл(путьРасширенияЕДТ)).Существует()
путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{настройки.Конфигурация.Проект}.%{репозиторий
.Проект}"
;
знч путьРасширенияПлатформы = "%CI_PROJECT_DIR/temp/src_%{репозиторий.Имя}"
Консоль.Записать("WorkspaceExport: %путьРасширенияЕДТ %путьРасширенияПлатформы %WP")
WorkspaceExport(путьРасширенияЕДТ, путьРасширенияПлатформы, WP, ВЕРСИЯ_EDT)
Консоль.Записать("LoadExtFromFiles: %путьРасширенияПлатформы %{репозиторий.Проект} %{путьИБ} %исполняемыйФайлПлатформы")
LoadExtFromFiles(путьРасширенияПлатформы, репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы)
Консоль.Записать("UpdateDBExt: %путьИБ %исполняемыйФайлПлатформы")
UpdateDBExt(репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы)
знч путьСборкиРасширения = путиСборки.Получить(репозиторий.Имя)
знч файлРасширения = "%путьСборкиРасширения/%{репозиторий.Проект}.cfe"
Консоль.Записать("DumpDBExt: %файлРасширения %{репозиторий.Проект} %путьИБ %исполняемыйФайлПлатформы")
DumpExt(файлРасширения, репозиторий.Проект, путьИБ, исполняемыйФайлПлатформы)
;
пер списокДвоичныхФайлов = новый Массив()
знч каталогСборкиПроекта = новый Файл(CI_PROJECT_DIR)
для файл из Файлы.Найти(ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ)
знч путьВнутриСборки = файл.Путь.Удалить(каталогСборкиПроекта.Путь)
списокДвоичныхФайлов.Добавить(путьВнутриСборки)
;
знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_bin.json"
Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID")
ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокДвоичныхФайлов)
знч логФайлыРабочейОбласти = "%WP/.metadata/"
пер настройкиПоиска = новый НастройкиПоискаФайлов()
настройкиПоиска.ИмяСодержит(".log")
для файл из Файлы.Найти(логФайлыРабочейОбласти, настройкиПоиска)
Консоль.Записать("Удалить файл: %{файл.Путь}")
Файлы.Удалить(файл)
;
;
метод ПротестироватьКод()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
@@ -295,6 +521,8 @@
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов")
Файлы.СоздатьКаталог(полныйПутьРезультатовТестов)
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/junit")
Файлы.СоздатьКаталог("%полныйПутьРезультатовТестов/junit")
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройки
.Конфигурация
@@ -307,9 +535,15 @@
Консоль.Записать("WorkspaceValidate: %файлРезультатовВалидации %путьКонфигурацииЕДТ %WP")
WorkspaceValidate(файлРезультатовВалидации, путьКонфигурацииЕДТ, WP, ВЕРСИЯ_EDT)
знч данныеОшибок = ОшибкиВФорматеSonarCube(файлРезультатовВалидации)
знч файлSonarQube = "%полныйПутьРезультатовТестов/%{настройки.Конфигурация.Имя}.json"
Консоль.Записать("ПреобразоватьОшибкиВФорматSonarCube: %файлSonarQube %файлРезультатовВалидации")
ПреобразоватьОшибкиВФорматSonarCube(файлSonarQube, файлРезультатовВалидации)
Консоль.Записать("ЗаписатьОшибкиВФорматSonarCube: %файлSonarQube %файлРезультатовВалидации")
ЗаписатьОшибкиВФорматSonarCube(файлSonarQube, данныеОшибок)
знч файлJunit = "%полныйПутьРезультатовТестов/junit/%{настройки.Конфигурация.Имя}.xml"
Консоль.Записать("ЗаписатьОшибкиВФорматJUnit: %файлJunit %файлРезультатовВалидации")
ЗаписатьОшибкиВФорматJUnit(файлJunit, данныеОшибок)
если не настройки.СерверSonarQube.Пусто()
знч файлПараметровСканера = "%CI_PROJECT_DIR/sonar-project-%{настройки.Конфигурация.Имя}.properties"
@@ -404,6 +638,12 @@
пер Пользователи: Массив
;
перечисление VAParamsСпособыСнятияСкриншотовВнешнейКомпонентой
ВесьЭкран умолчание // 0
ТекущееОкноКлиентаТестирования // 1
ВсеОкнаКлиентаТестирования // 2
;
структура VAParams
пер КаталогПроекта: Строка
пер КаталогФич: Строка
@@ -426,6 +666,11 @@
пер ИспользоватьКомпонентуVanessaExt: Булево = Истина
пер ТихаяУстановкаVanessaExt: Булево = Истина
пер ИспользоватьВнешнююКомпонентуДляСкриншотов: Булево = Истина
пер СпособСнятияСкриншотовВнешнейКомпонентой: Число = 2 // VAParamsСпособыСнятияСкриншотовВнешнейКомпонентой
пер ДелатьСкриншотПриВозникновенииОшибки: Булево = Истина
пер СниматьСкриншотКаждогоОкна1С: Булево = Ложь
пер КаталогВыгрузкиСкриншотов: Строка = ""
пер ВыполнениеСценариев: VAParamsВыполнениеСценариев
@@ -451,7 +696,10 @@
структура VAParamsКлиентТестирования
пер ЗапускатьКлиентТестированияСМаксимизированнымОкном: Булево = Истина
пер ЗакрыватьКлиентТестированияПринудительно: Булево = Истина
пер ТаймаутПередПринудительнымЗакрытиемКлиентаТестирования: Число = 10
пер ДиапазонПортовTestclient: Строка = ""
пер ТаймаутЗапуска1С: Число = 25
конструктор()
конструктор(ДиапазонПортовTestclient)
@@ -690,11 +938,13 @@
пер настройкиVAParamsВыполнениеСценариев = новый VAParamsВыполнениеСценариев()
пер настройкиVAParamsКлиентТестирования = новый VAParamsКлиентТестирования("%начальныйПорт-%конечныйПорт")
настройкиVAParamsКлиентТестирования.ТаймаутЗапуска1С = 60
пер настройкиVAParamsОтчетAllure = новый VAParamsОтчетAllure(каталогВыгрузкиAllure, каталогФич)
пер настройкиVAParamsОтчетJUnit = новый VAParamsОтчетJUnit("%полныйПутьРезультатовТестов/junit")
пер настройкиVAParamsОтчетJUnit = новый VAParamsОтчетJUnit(Файлы.СоздатьКаталог("%временныйКаталогИБ/junit").Путь)
пер настройкиVAParams = новый VAParams(каталогПроекта, каталогФич, ["%CI_VA/steps"], настройкиVAParamsВыполнениеСценариев, настройкиVAParamsКлиентТестирования,
настройкиVAParamsОтчетAllure, настройкиVAParamsОтчетJUnit)
настройкиVAParams.КаталогВыгрузкиСкриншотов = Файлы.СоздатьКаталог("%временныйКаталогИБ/screenShots").Путь
знч временныйФайлНастроекVA = Файлы.Создать("%временныйКаталогИБ/VAParams.json")
исп потокНастроекVA = временныйФайлНастроекVA.ОткрытьПотокЗаписи()
@@ -717,6 +967,13 @@
ОбработатьЗавершениеКомандыПлатформы(командаПлатформы)
;
пер индекс = 1
для пользователь из настройки.Шаблоны.Пользователи
пер временныйКаталогИБ = временныеИБПользователей.Получить(пользователь.Представление)
Файлы.Скопировать("%временныйКаталогИБ/junit/junit.xml", "%полныйПутьРезультатовТестов/junit/junit-%индекс.xml")
индекс += 1
;
AllureGenerate(настройки)
;
@@ -937,7 +1194,7 @@
метод СкачатьАртефактРепозитория(репозиторий: ОписаниеРепозитория, путьСборки: Строка, расширение: Булево): Булево
знч CI_COMMIT_REF_SLUG = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_REF_SLUG")
знч CI_PROJECT_ID = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_ID")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
знч RELEASES_TOKEN = СредаИсполнения.ПолучитьПеременную("RELEASES_TOKEN")
@@ -947,9 +1204,11 @@
имяФайла = "%путьСборки/%{репозиторий.Проект}.cfe"
;
знч имяРепозиторияРелизов = "%CI_PROJECT_NAMESPACE\%2Freleases"
Консоль.Записать(
"JobArtifacts_DownloadFile: %имяФайла build %CI_COMMIT_REF_SLUG %CI_PROJECT_ID %CI_SERVER_HOST")
возврат JobArtifacts_DownloadFile(имяФайла, "build", CI_COMMIT_REF_SLUG, CI_PROJECT_ID, RELEASES_TOKEN,
"JobArtifacts_DownloadFile: %имяФайла build %CI_COMMIT_REF_SLUG %имяРепозиторияРелизов %CI_SERVER_HOST")
возврат JobArtifacts_DownloadFile(имяФайла, "build", CI_COMMIT_REF_SLUG, имяРепозиторияРелизов, RELEASES_TOKEN,
CI_SERVER_HOST)
;
@@ -970,7 +1229,7 @@
структура ОписаниеРепозитория
знч Имя: Строка
знч Ветка: Строка
пер Ветка: Строка
знч Проект: Строка
знч ПеременнаяТокена: Строка
@@ -979,7 +1238,32 @@
;
структура ОписаниеЗапросаНаСлияние
знч имяПроекта: Строка
знч веткаПроекта: Строка
;
метод ПараметрыЗапросаНаСлияние(): ОписаниеЗапросаНаСлияние|Неопределено
знч CI_MERGE_REQUEST_PROJECT_PATH = СредаИсполнения.ПолучитьПеременную("CI_MERGE_REQUEST_PROJECT_PATH")
знч CI_MERGE_REQUEST_SOURCE_BRANCH_NAME = СредаИсполнения.ПолучитьПеременную("CI_MERGE_REQUEST_SOURCE_BRANCH_NAME")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
если CI_MERGE_REQUEST_PROJECT_PATH.Пусто()
возврат Неопределено
;
знч имяПроектаСлияния = CI_MERGE_REQUEST_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "")
возврат новый ОписаниеЗапросаНаСлияние(имяПроектаСлияния, CI_MERGE_REQUEST_SOURCE_BRANCH_NAME)
;
метод ПрочитатьНастройкиСборки(путьОписанияНастроек: Строка): ОписаниеНастроекСборки
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
если запросНаСлияние != Неопределено
Консоль.Записать("ЗапросНаСлияние: %{запросНаСлияние.имяПроекта} %{запросНаСлияние.веткаПроекта}")
;
пер файлОписанияНастроек = ".1cicd.json"
если не путьОписанияНастроек.Пусто()
файлОписанияНастроек = "%путьОписанияНастроек/.1cicd.json"
@@ -993,9 +1277,21 @@
пер настройки = СериализацияJson.ПрочитатьОбъект(поток, Тип(ОписаниеНастроекСборки),
настройкиJson) как ОписаниеНастроекСборки
если запросНаСлияние != Неопределено
если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта
настройки.Конфигурация.Ветка = запросНаСлияние.веткаПроекта
;
;
пер прикладныеРасширения = новый Массив()
для репозиторийРасширения из настройки.ПрикладныеРасширения
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Ветка"], репозиторийРасширения["Проект"],
пер веткаРасширения = репозиторийРасширения["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта
веткаРасширения = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"],
репозиторийРасширения["ПеременнаяТокена"])
прикладныеРасширения.Добавить(описание)
;
@@ -1003,7 +1299,13 @@
пер тестовыеРасширения = новый Массив()
для репозиторийРасширения из настройки.ТестовыеРасширения
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Ветка"], репозиторийРасширения["Проект"],
пер веткаРасширения = репозиторийРасширения["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта
веткаРасширения = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"],
репозиторийРасширения["ПеременнаяТокена"])
тестовыеРасширения.Добавить(описание)
;
@@ -1011,8 +1313,13 @@
пер сценарныеТесты = новый Массив()
для репозиторийТестов из настройки.СценарныеТесты
знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], репозиторийТестов["Ветка"],
репозиторийТестов["ПеременнаяТокена"])
пер веткаТестов = репозиторийТестов["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийТестов["Имя"] == запросНаСлияние.имяПроекта
веткаТестов = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], веткаТестов, репозиторийТестов["ПеременнаяТокена"])
сценарныеТесты.Добавить(описание)
;
настройки.СценарныеТесты = сценарныеТесты
@@ -1629,13 +1936,61 @@
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
метод ПреобразоватьОшибкиВФорматSonarCube(файлSonarQube: Строка, файлРезультатовВалидации: Строка)
метод ЗаписатьОшибкиВФорматSonarCube(файлSonarQube: Строка, данныеОшибок: SonarqubeGenericFormat)
знч файлПараметров = новый Файл(файлSonarQube)
исп поток = файлПараметров.ОткрытьПотокЗаписи()
знч данные = ОшибкиВФорматеSonarCube(файлРезультатовВалидации)
СериализацияJson.ЗаписатьОбъект(поток, данныеОшибок)
;
метод ЗаписатьОшибкиВФорматJUnit(файлJUnit: Строка, данныеОшибок: SonarqubeGenericFormat)
знч файлПараметров = новый Файл(файлJUnit)
исп поток = файлПараметров.ОткрытьПотокЗаписи()
пер записьXML = новый ЗаписьXml(поток)
пер количествоОшибок = 0
для ошибка из данныеОшибок.issues
если ошибка.type == SonarqubeType.BUG
количествоОшибок += 1
;
;
записьXML.ЗаписатьНачалоДокумента()
записьXML.ЗаписатьНачалоЭлемента("testsuites")
записьXML
.ЗаписатьНачалоЭлемента("testsuite")
.ЗаписатьАтрибут("name", "EDT Workspace Validate")
.ЗаписатьАтрибут("errors", Строка(количествоОшибок))
.ЗаписатьАтрибут("skipped", "0")
.ЗаписатьАтрибут("tests", Строка(количествоОшибок))
.ЗаписатьАтрибут("failures", "0")
.ЗаписатьАтрибут("time", "0")
для ошибка из данныеОшибок.issues
если ошибка.type != SonarqubeType.BUG
продолжить
;
записьXML
.ЗаписатьНачалоЭлемента("testcase")
.ЗаписатьАтрибут("name", ошибка.ruleId)
.ЗаписатьАтрибут("classname", ошибка.primaryLocation.filePath)
.ЗаписатьАтрибут("time", "0")
записьXML
.ЗаписатьНачалоЭлемента("error")
.ЗаписатьТекст("%{ошибка.primaryLocation.message}\в\нСтрока: %{ошибка.primaryLocation.textRange.startLine}")
.ЗаписатьКонецЭлемента()
записьXML.ЗаписатьКонецЭлемента()
;
записьXML.ЗаписатьКонецЭлемента()
записьXML.ЗаписатьКонецЭлемента()
записьXML.ЗаписатьКонецДокумента()
СериализацияJson.ЗаписатьОбъект(поток, данные)
;
метод ОшибкиВФорматеSonarCube(файлРезультатовВалидации: Строка): SonarqubeGenericFormat