You've already forked devscripts
mirror of
https://github.com/DoublesunRUS/devscripts.git
synced 2026-06-11 22:46:51 +02:00
Интеграция / Развертывание
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user