You've already forked devscripts
mirror of
https://github.com/DoublesunRUS/devscripts.git
synced 2026-06-20 01:16:55 +02:00
Интеграция / Развертывание
This commit is contained in:
@@ -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
@@ -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 @@
|
||||
процесс.Остановить()
|
||||
;
|
||||
|
||||
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст()
|
||||
знч текстПотока = процесс.ПолучитьПотокВывода().ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
|
||||
если не текстПотока.Пусто()
|
||||
Консоль.Записать(текстПотока)
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user