1
0
mirror of https://github.com/DoublesunRUS/devscripts.git synced 2026-06-20 01:16:55 +02:00

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

This commit is contained in:
Капралов Александр
2021-09-03 09:24:28 +03:00
parent cdf75a9ef9
commit f4a049dc77
2 changed files with 134 additions and 39 deletions
+16
View File
@@ -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:
+118 -39
View File
@@ -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.описание.Заменить(Символы.НоваяСтрока, "<br/>")
;
знч описаниеАссетовSonarQube = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_sonarQube.json")
для данныеФайла из описаниеАссетовSonarQube.списокФайловСсылок
знч ассерт = новый Releases_Create_Assets_Link_Data(данныеФайла.имя, данныеФайла.путь)
ссылки.Добавить(ассерт)
;
если не описаниеАссетовSonarQube.описание.Пусто()
комментарийРелиза += Символы.НоваяСтрока + Символы.НоваяСтрока
+ описаниеАссетовSonarQube.описание.Заменить(Символы.НоваяСтрока, "<br/>")
;
знч описаниеАссетовPages = ПрочитатьОписаниеАссетов("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_pages.json")
для данныеФайла из описаниеАссетовPages.списокФайловСсылок
знч файлДляУрл = данныеФайла.путь.Заменить("\\", "/")
@@ -3508,7 +3587,7 @@
пер количествоВыведенныхСтрок = 0
пер кодВозврата = Неопределено
пока не процесс.ОжидатьЗавершения(60с) и процесс.Живой()
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст()
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
если не текстПотока.Пусто()
Консоль.Записать(текстПотока)
;
@@ -3527,7 +3606,7 @@
процесс.Остановить()
;
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст()
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
если не текстПотока.Пусто()
Консоль.Записать(текстПотока)
;