diff --git a/GitLab-CI/.gitlab-ci.yml b/GitLab-CI/.gitlab-ci.yml
index a61ae18..64cbf87 100644
--- a/GitLab-CI/.gitlab-ci.yml
+++ b/GitLab-CI/.gitlab-ci.yml
@@ -120,6 +120,22 @@ code_quality:
- test/
- ci/
+sonarQube:
+ stage: report
+ tags:
+ - 1c-edt
+ only:
+ - master
+ - schedules
+ dependencies:
+ - testCore
+ script:
+ - executor_j11 -s $env:CI_SCRIPTS/1cicd.sbsl sonarQube
+ artifacts:
+ paths:
+ - test/
+ - ci/
+
pages:
stage: report
tags:
diff --git a/Скрипты/1cicd.sbsl b/Скрипты/1cicd.sbsl
index af14a70..59225fb 100644
--- a/Скрипты/1cicd.sbsl
+++ b/Скрипты/1cicd.sbsl
@@ -42,14 +42,17 @@
когда "testCore"
ПротестироватьКод()
- когда "qualityCode"
- ПровестиАнализКода()
-
когда "testUI"
ПротестироватьИнтерфейс()
+ когда "qualityCode"
+ ОпубликоватьQualityCode()
+
+ когда "sonarQube"
+ ОпубликоватьSonarQube()
+
когда "pages"
- ОпубликоватьОтчет()
+ ОпубликоватьAllureОтчет()
когда "release"
ОпубликоватьРелиз()
@@ -752,7 +755,7 @@
;
;
-метод ПровестиАнализКода()
+метод ОпубликоватьQualityCode()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_COMMIT_SHORT_SHA = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_SHORT_SHA")
@@ -834,39 +837,8 @@
Консоль.Записать("WorkspaceValidate: %файлРезультатовВалидации %путьКонфигурацииЕДТ %WP")
WorkspaceValidate(файлРезультатовВалидации, путьКонфигурацииЕДТ, WP, Истина, ВЕРСИЯ_EDT)
- знч ошибкиEDT = ОшибкиEDT(файлРезультатовВалидации)
-
пер списокФайловСсылок = новый Массив()
- знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
- если запросНаСлияние == Неопределено и не настройкиСборки.СерверSonarQube.Пусто()
- знч ошибкиSonarQube = ОшибкиВФорматеSonarQube(ошибкиEDT)
- знч файлSonarQube = "%полныйПутьРезультатовТестов/%{настройкиСборки.Конфигурация.Имя}.json"
- Консоль.Записать("ЗаписатьОшибкиВФорматSonarQube: %файлSonarQube %файлРезультатовВалидации")
- ЗаписатьОшибкиВФорматSonarQube(файлSonarQube, ошибкиSonarQube)
-
- знч файлПараметровСканера = "%CI_PROJECT_DIR/sonar-project-%{настройкиСборки.Конфигурация.Имя}.properties"
- знч ключПроекта = "%CI_PROJECT_NAMESPACE-%{настройкиСборки.Конфигурация.Имя}"
-
- знч тегРелиза = ДатаНовогоРелиза().Форматировать("гггг-ММ-дд")
-
- Консоль.Записать("СохранитьНастройкиСканера: %файлПараметровСканера %{настройкиСборки.СерверSonarQube} %ключПроекта %{настройкиСборки
- .Конфигурация
- .Проект} %тегРелиза %путьКонфигурацииЕДТ %файлSonarQube")
- СохранитьНастройкиСканера(файлПараметровСканера, настройкиСборки.СерверSonarQube, ключПроекта, настройкиСборки.Конфигурация
- .Проект, тегРелиза, путьКонфигурацииЕДТ, файлSonarQube)
-
- Консоль.Записать("ЗапуститьSonarScanner: %файлПараметровСканера")
- ЗапуститьSonarScanner(файлПараметровСканера, SONARQUBE_TOKEN, настройкиСкрипта.CI_SONARSCANNER)
-
- пер адресСонарПроекта = настройкиСборки.СерверSonarQube
- если не адресСонарПроекта.ЗаканчиваетсяНа("/")
- адресСонарПроекта += "/"
- ;
- адресСонарПроекта += "dashboard?id=%ключПроекта"
- списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов("SonarQube", адресСонарПроекта))
- ;
-
знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_testCore.json"
Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID")
ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокФайловСсылок,
@@ -927,6 +899,103 @@
;
;
+метод ОпубликоватьSonarQube()
+ знч WP = СредаИсполнения.ПолучитьПеременную("WP")
+
+ знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
+ знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
+ знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
+ знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
+ знч CI_PROJECT_PATH = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_PATH")
+ знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
+ знч CI_COMMIT_SHORT_SHA = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_SHORT_SHA")
+
+ знч SONARQUBE_TOKEN = СредаИсполнения.ПолучитьПеременную("SONARQUBE_TOKEN")
+
+ знч настройкиСкрипта = ПрочитатьНастройкиСкрипта()
+ знч настройкиСборки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR")
+
+ знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
+ если запросНаСлияние != Неопределено или настройкиСборки.СерверSonarQube.Пусто()
+ возврат
+ ;
+
+ пер ошибкиТокенов = ""
+
+ если не настройкиСборки.СерверSonarQube.Пусто() и СредаИсполнения.ПолучитьПеременную("SONARQUBE_TOKEN").Пусто()
+ ошибкиТокенов += "В переменную SONARQUBE_TOKEN необходимо поместить token SonarQube." + Символы.НоваяСтрока
+ ;
+
+ если не настройкиСборки.СерверSonarQube.Пусто() и настройкиСкрипта.CI_SONARSCANNER.Пусто()
+ ошибкиТокенов += "В настройке CI_SONARSCANNER необходимо указать путь к SonarScanner." + Символы.НоваяСтрока
+ ;
+
+ если не ошибкиТокенов.Пусто()
+ выбросить новый ИсключениеНедопустимоеСостояние(ошибкиТокенов)
+ ;
+
+ знч полныйПутьРезультатовТестов = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_РЕЗУЛЬТАТОВ_ТЕСТОВ"
+
+ Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов")
+ Файлы.СоздатьКаталог(полныйПутьРезультатовТестов)
+ Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/sonarQube")
+ Файлы.СоздатьКаталог("%полныйПутьРезультатовТестов/sonarQube")
+
+ знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Имя}/%{настройкиСборки.Конфигурация.Проект}"
+
+ знч имяТекущегоПроекта = CI_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "")
+ если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
+ Файлы.СоздатьКаталог(путьКонфигурацииЕДТ)
+ Файлы.Переместить("%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Проект}", путьКонфигурацииЕДТ)
+ иначе
+ знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройкиСборки
+ .Конфигурация
+ .Имя}.git"
+ Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройкиСборки.Конфигурация.Ветка}")
+ Git_Clone(адресРепозиторияКонфигурации, настройкиСборки.Конфигурация.Ветка)
+ ;
+
+ знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{настройкиСборки.Конфигурация.Имя}.tsv"
+ знч ошибкиEDT = ОшибкиEDT(файлРезультатовВалидации)
+
+ знч ошибкиSonarQube = ОшибкиВФорматеSonarQube(ошибкиEDT)
+ знч файлSonarQube = "%полныйПутьРезультатовТестов/sonarQube/%{настройкиСборки.Конфигурация.Имя}.json"
+ Консоль.Записать("ЗаписатьОшибкиВФорматSonarQube: %файлSonarQube %файлРезультатовВалидации")
+ ЗаписатьОшибкиВФорматSonarQube(файлSonarQube, ошибкиSonarQube)
+
+ знч файлПараметровСканера = "%CI_PROJECT_DIR/sonar-project-%{настройкиСборки.Конфигурация.Имя}.properties"
+ знч ключПроекта = "%CI_PROJECT_NAMESPACE-%{настройкиСборки.Конфигурация.Имя}"
+
+ //TODO: Сделать получение коммита для каждого проекта
+ пер тегРелиза = CI_COMMIT_SHORT_SHA
+ если настройкиСборки.Конфигурация.Имя != имяТекущегоПроекта
+ тегРелиза = ДатаНовогоРелиза().Форматировать("гггг-ММ-дд")
+ ;
+
+ Консоль.Записать("СохранитьНастройкиСканера: %файлПараметровСканера %{настройкиСборки.СерверSonarQube} %ключПроекта %{настройкиСборки
+ .Конфигурация
+ .Проект} %тегРелиза %путьКонфигурацииЕДТ %файлSonarQube")
+ СохранитьНастройкиСканера(файлПараметровСканера, настройкиСборки.СерверSonarQube, ключПроекта, настройкиСборки.Конфигурация
+ .Проект, тегРелиза, путьКонфигурацииЕДТ, файлSonarQube)
+
+ Консоль.Записать("ЗапуститьSonarScanner: %файлПараметровСканера")
+ ЗапуститьSonarScanner(файлПараметровСканера, SONARQUBE_TOKEN, настройкиСкрипта.CI_SONARSCANNER)
+
+ пер списокФайловСсылок = новый Массив()
+
+ пер адресСонарПроекта = настройкиСборки.СерверSonarQube
+ если не адресСонарПроекта.ЗаканчиваетсяНа("/")
+ адресСонарПроекта += "/"
+ ;
+ адресСонарПроекта += "dashboard?id=%ключПроекта"
+ списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов("SonarQube", адресСонарПроекта))
+
+ знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_sonarQube.json"
+ Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID")
+ ЗаписатьОписаниеАссетов(имяФайлаАссетов, CI_PROJECT_PATH, CI_JOB_ID, списокФайловСсылок,
+ "")
+;
+
структура ОписаниеНастроекАвтофич
пер ТестоваяБаза: ОписаниеНастроекТестовойБазы
пер Шаблоны: ОписаниеНастроекШаблонов
@@ -1555,7 +1624,7 @@
выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
;
-метод ОпубликоватьОтчет()
+метод ОпубликоватьAllureОтчет()
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
@@ -1651,6 +1720,16 @@
+ описаниеАссетовTestCore.описание.Заменить(Символы.НоваяСтрока, "
")
;
+ знч описаниеАссетовSonarQube = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_sonarQube.json")
+ для данныеФайла из описаниеАссетовSonarQube.списокФайловСсылок
+ знч ассерт = новый Releases_Create_Assets_Link_Data(данныеФайла.имя, данныеФайла.путь)
+ ссылки.Добавить(ассерт)
+ ;
+ если не описаниеАссетовSonarQube.описание.Пусто()
+ комментарийРелиза += Символы.НоваяСтрока + Символы.НоваяСтрока
+ + описаниеАссетовSonarQube.описание.Заменить(Символы.НоваяСтрока, "
")
+ ;
+
знч описаниеАссетовPages = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_pages.json")
для данныеФайла из описаниеАссетовPages.списокФайловСсылок
знч файлДляУрл = данныеФайла.путь.Заменить("\\", "/")
@@ -3508,7 +3587,7 @@
пер количествоВыведенныхСтрок = 0
пер кодВозврата = Неопределено
пока не процесс.ОжидатьЗавершения(60с) и процесс.Живой()
- знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст()
+ знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
если не текстПотока.Пусто()
Консоль.Записать(текстПотока)
;
@@ -3527,7 +3606,7 @@
процесс.Остановить()
;
- знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст()
+ знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
если не текстПотока.Пусто()
Консоль.Записать(текстПотока)
;