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 @@ процесс.Остановить() ; - знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст() + знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы()) если не текстПотока.Пусто() Консоль.Записать(текстПотока) ;