1
0
mirror of https://github.com/DoublesunRUS/devscripts.git synced 2025-07-17 01:12:27 +02:00

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

This commit is contained in:
Капралов Александр
2021-09-06 20:27:06 +03:00
parent a1f479663b
commit e0c3785b11
2 changed files with 235 additions and 159 deletions

View File

@ -7,9 +7,6 @@ stages:
- report
- release
variables:
WP: '${CI_PROJECT_DIR}/temp/wp'
buildMaster:
stage: build
tags:
@ -23,10 +20,6 @@ buildMaster:
paths:
- build/
- ci/
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- $env:WP
buildMergeRequest:
stage: build
@ -55,10 +48,6 @@ buildRelease:
paths:
- build/
- ci/
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- $env:WP
testCore:
stage: test

View File

@ -64,8 +64,7 @@
;
метод СобратьРелизДляВыпуска()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
@ -122,8 +121,8 @@
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройки.Конфигурация.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %CI_COMMIT_BRANCH")
Git_Clone(адресРепозиторияКонфигурации, CI_COMMIT_BRANCH)
знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройки.Конфигурация.Имя}/%{настройки.Конфигурация.Проект}"
Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ")
@ -200,11 +199,20 @@
возврат
;
для репозиторий из репозиторииДляПересборки
знч адресРепозитория = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторий
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозитория %CI_COMMIT_BRANCH")
Git_Clone(адресРепозитория, CI_COMMIT_BRANCH)
;
Консоль.Записать("Дата нового релиза = %датаНовогоРелиза")
пер файлДатаНовогоРелиза = Файлы.Создать("%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/new_release_date.txt")
исп потокЗаписиДатаНовогоРелиза = файлДатаНовогоРелиза.ОткрытьПотокЗаписи()
потокЗаписиДатаНовогоРелиза.Записать(датаНовогоРелиза.Форматировать("гггг-ММ-дд'T'ЧЧ:мм:сс"))
знч WP = "%CI_PROJECT_DIR/temp/wp"
знч файлКонфигурации = "%полныйПутьПрикладнойСборки/1cv8.cf"
если пересобиратьОсновнуюКонфигурацию
знч путьКонфигурацииПлатформы = "%CI_PROJECT_DIR/temp/src_%{настройки.Конфигурация.Имя}"
@ -249,16 +257,7 @@
;
для репозиторий из репозиторииДляПересборки
знч адресРепозитория = "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)
@ -295,8 +294,6 @@
;
метод СобратьРелизДляАнализа()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_COMMIT_TIMESTAMP = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_TIMESTAMP")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
@ -377,8 +374,8 @@
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройкиСборки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройкиСборки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройкиСборки.Конфигурация.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %CI_COMMIT_BRANCH")
Git_Clone(адресРепозиторияКонфигурации, CI_COMMIT_BRANCH)
;
Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ")
@ -451,6 +448,22 @@
;
;
для репозиторий из репозиторииДляПересборки
пер путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{репозиторий.Проект}"
если репозиторий.Имя == имяТекущегоПроекта
Файлы.СоздатьКаталог(путьРасширенияЕДТ)
Файлы.Переместить("%CI_PROJECT_DIR/%{репозиторий.Проект}", путьРасширенияЕДТ)
иначе
знч адресРепозитория = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторий
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозитория %CI_COMMIT_BRANCH")
Git_Clone(адресРепозитория, CI_COMMIT_BRANCH)
;
;
знч WP = "%CI_PROJECT_DIR/temp/wp"
знч файлКонфигурации = "%полныйПутьПрикладнойСборки/1cv8.cf"
если пересобиратьОсновнуюКонфигурацию
знч путьКонфигурацииПлатформы = "%CI_PROJECT_DIR/temp/src_%{настройкиСборки.Конфигурация.Имя}"
@ -489,16 +502,8 @@
;
для репозиторий из репозиторииДляПересборки
знч адресРепозитория = "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)
@ -525,8 +530,6 @@
;
метод СобратьРелизДляСлияния()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
@ -567,6 +570,8 @@
выбросить новый ИсключениеНедопустимоеСостояние(ошибкиТокенов)
;
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
знч полныйПутьПрикладнойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ПРИКЛАДНОЙ_СБОРКИ"
знч полныйПутьТестовойСборки = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_ТЕСТОВОЙ_СБОРКИ"
@ -590,8 +595,8 @@
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройкиСборки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройкиСборки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройкиСборки.Конфигурация.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{запросНаСлияние.веткаПроекта}")
Git_Clone(адресРепозиторияКонфигурации, запросНаСлияние.веткаПроекта)
;
Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ")
@ -606,8 +611,6 @@
знч датаПоследнегоРелиза = Releases_LastDate(имяРепозиторияРелизов, RELEASES_TOKEN, CI_SERVER_HOST)
Консоль.Записать("Дата последнего релиза = %датаПоследнегоРелиза")
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
пер пересобиратьОсновнуюКонфигурацию = Ложь
пер репозиторииДляПересборки = новый Массив()
пер путиСборки = новый Соответствие()
@ -672,6 +675,22 @@
возврат
;
для репозиторий из репозиторииДляПересборки
пер путьРасширенияЕДТ = "%CI_PROJECT_DIR/%{репозиторий.Имя}/%{репозиторий.Проект}"
если репозиторий.Имя == имяТекущегоПроекта
Файлы.СоздатьКаталог(путьРасширенияЕДТ)
Файлы.Переместить("%CI_PROJECT_DIR/%{репозиторий.Проект}", путьРасширенияЕДТ)
иначе
знч адресРепозитория = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторий
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозитория %{запросНаСлияние.веткаПроекта}")
Git_Clone(адресРепозитория, запросНаСлияние.веткаПроекта)
;
;
знч WP = "%CI_PROJECT_DIR/temp/wp"
знч файлКонфигурации = "%полныйПутьПрикладнойСборки/1cv8.cf"
если пересобиратьОсновнуюКонфигурацию
знч путьКонфигурацииПлатформы = "%CI_PROJECT_DIR/temp/src_%{настройкиСборки.Конфигурация.Имя}"
@ -710,16 +729,8 @@
;
для репозиторий из репозиторииДляПересборки
знч адресРепозитория = "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)
@ -756,8 +767,6 @@
;
метод ОпубликоватьQualityCode()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_COMMIT_SHORT_SHA = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_SHORT_SHA")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
@ -774,18 +783,33 @@
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/codequality")
Файлы.СоздатьКаталог("%полныйПутьРезультатовТестов/codequality")
знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{настройкиСборки.Конфигурация.Имя}.tsv"
знч имяТекущегоПроекта = CI_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "")
знч ошибкиEDT = ОшибкиEDT(файлРезультатовВалидации)
пер репозиторииДляПроверки = новый Массив()
знч файлCodeQuality = "%полныйПутьРезультатовТестов/codequality/%{настройкиСборки.Конфигурация.Имя}.json"
Консоль.Записать("ЗаписатьОшибкиВФорматCodeQuality: %файлCodeQuality %файлРезультатовВалидации")
ЗаписатьОшибкиВФорматCodeQuality(файлCodeQuality, ошибкиEDT)
если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(настройкиСборки.Конфигурация)
;
для репозиторийРасширения из настройкиСборки.ПрикладныеРасширения
если репозиторийРасширения.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(репозиторийРасширения)
;
;
для репозиторий из репозиторииДляПроверки
знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{репозиторий.Имя}.tsv"
знч ошибкиEDT = ОшибкиEDT(файлРезультатовВалидации)
знч файлCodeQuality = "%полныйПутьРезультатовТестов/codequality/%{репозиторий.Имя}.json"
Консоль.Записать("ЗаписатьОшибкиВФорматCodeQuality: %файлCodeQuality %файлРезультатовВалидации")
ЗаписатьОшибкиВФорматCodeQuality(файлCodeQuality, ошибкиEDT)
;
;
метод ПротестироватьКод()
знч WP = СредаИсполнения.ПолучитьПеременную("WP")
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
@ -812,6 +836,8 @@
выбросить новый ИсключениеНедопустимоеСостояние(ошибкиТокенов)
;
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
знч полныйПутьРезультатовТестов = "%CI_PROJECT_DIR/%ИМЯ_КАТАЛОГА_РЕЗУЛЬТАТОВ_ТЕСТОВ"
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов")
@ -819,9 +845,20 @@
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/junit")
Файлы.СоздатьКаталог("%полныйПутьРезультатовТестов/junit")
знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Имя}/%{настройкиСборки.Конфигурация.Проект}"
знч имяТекущегоПроекта = CI_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "")
пер имяВетки = CI_COMMIT_BRANCH
если запросНаСлияние != Неопределено
имяВетки = запросНаСлияние.веткаПроекта
;
пер репозиторииДляПроверки = новый Массив()
если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(настройкиСборки.Конфигурация)
;
знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Имя}/%{настройкиСборки.Конфигурация.Проект}"
если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
Файлы.СоздатьКаталог(путьКонфигурацииЕДТ)
Файлы.Переместить("%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Проект}", путьКонфигурацииЕДТ)
@ -829,14 +866,37 @@
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройкиСборки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройкиСборки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройкиСборки.Конфигурация.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %имяВетки")
Git_Clone(адресРепозиторияКонфигурации, имяВетки)
;
знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{настройкиСборки.Конфигурация.Имя}.tsv"
Консоль.Записать("WorkspaceValidate: %файлРезультатовВалидации %путьКонфигурацииЕДТ %WP")
WorkspaceValidate(файлРезультатовВалидации, путьКонфигурацииЕДТ, WP, Истина, ВЕРСИЯ_EDT)
для репозиторийРасширения из настройкиСборки.ПрикладныеРасширения
если репозиторийРасширения.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(репозиторийРасширения)
;
знч путьРасширенияЕДТ = "%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/%{репозиторий.Имя}/%{репозиторий.Проект}"
знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{репозиторий.Имя}.tsv"
знч WP = "%CI_PROJECT_DIR/temp/wp"
Консоль.Записать("WorkspaceValidate: %файлРезультатовВалидации %путьРепозиторияЕДТ %WP")
WorkspaceValidate(файлРезультатовВалидации, путьРепозиторияЕДТ, WP, Истина, ВЕРСИЯ_EDT)
;
пер списокФайловСсылок = новый Массив()
знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_testCore.json"
@ -846,6 +906,7 @@
;
метод ПротестироватьИнтерфейс()
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
@ -876,10 +937,17 @@
;
знч настройкиСборки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR")
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
знч путьКонфигурацииЕДТ = "%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Имя}/%{настройкиСборки.Конфигурация.Проект}"
знч имяТекущегоПроекта = CI_PROJECT_PATH.Заменить("%CI_PROJECT_NAMESPACE/", "")
пер имяВетки = CI_COMMIT_BRANCH
если запросНаСлияние != Неопределено
имяВетки = запросНаСлияние.веткаПроекта
;
если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
Файлы.СоздатьКаталог(путьКонфигурацииЕДТ)
Файлы.Переместить("%CI_PROJECT_DIR/%{настройкиСборки.Конфигурация.Проект}", путьКонфигурацииЕДТ)
@ -887,8 +955,8 @@
знч адресРепозиторияКонфигурации = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{настройкиСборки
.Конфигурация
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %{настройкиСборки.Конфигурация.Ветка}")
Git_Clone(адресРепозиторияКонфигурации, настройкиСборки.Конфигурация.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияКонфигурации %имяВетки")
Git_Clone(адресРепозиторияКонфигурации, имяВетки)
;
Консоль.Записать("ИсполняемыйФайлПлатформы: %путьКонфигурацииЕДТ")
@ -900,17 +968,10 @@
;
метод Опубликовать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")
@ -941,54 +1002,32 @@
Консоль.Записать("Создать каталог: %полныйПутьРезультатовТестов/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
если не адресСонарПроекта.ЗаканчиваетсяНа("/")
адресСонарПроекта += "/"
пер репозиторииДляПроверки = новый Массив()
если настройкиСборки.Конфигурация.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(настройкиСборки.Конфигурация)
;
для репозиторийРасширения из настройкиСборки.ПрикладныеРасширения
если репозиторийРасширения.Имя == имяТекущегоПроекта
репозиторииДляПроверки.Добавить(репозиторийРасширения)
;
;
для репозиторий из репозиторииДляПроверки
знч ключПроекта = ЗапуститьSonarScannerДляРепозитория(репозиторий, репозиторий.Имя == имяТекущегоПроекта)
пер адресСонарПроекта = настройкиСборки.СерверSonarQube
если не адресСонарПроекта.ЗаканчиваетсяНа("/")
адресСонарПроекта += "/"
;
адресСонарПроекта += "dashboard?id=%ключПроекта"
списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов("SonarQube", адресСонарПроекта))
;
адресСонарПроекта += "dashboard?id=%ключПроекта"
списокФайловСсылок.Добавить(новый ОписаниеФайлаСсылкиАссетов("SonarQube", адресСонарПроекта))
знч имяФайлаАссетов = "%ИМЯ_КАТАЛОГА_СЛУЖЕБНОЙ_СБОРКИ/assets_sonarQube.json"
Консоль.Записать("ЗаписатьОписаниеАссетов: %имяФайлаАссетов %CI_PROJECT_PATH %CI_JOB_ID")
@ -996,6 +1035,60 @@
"")
;
метод ЗапуститьSonarScannerДляРепозитория(репозиторий: ОписаниеРепозитория, этоТекущийПроект: Булево): Строка
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_COMMIT_SHORT_SHA = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_SHORT_SHA")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
знч SONARQUBE_TOKEN = СредаИсполнения.ПолучитьПеременную("SONARQUBE_TOKEN")
знч настройкиСкрипта = ПрочитатьНастройкиСкрипта()
знч настройкиСборки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR")
пер имяВетки = CI_COMMIT_BRANCH
знч путьРепозиторияЕДТ = "%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/%ИМЯ_КАТАЛОГА_РЕЗУЛЬТАТОВ_ТЕСТОВ"
знч файлРезультатовВалидации = "%полныйПутьРезультатовТестов/%{репозиторий.Имя}.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)
возврат ключПроекта
;
структура ОписаниеНастроекАвтофич
пер ТестоваяБаза: ОписаниеНастроекТестовойБазы
пер Шаблоны: ОписаниеНастроекШаблонов
@ -1167,15 +1260,25 @@
;
метод ПротестироватьТестовуюБазу(репозиторийСценарныхТестов: ОписаниеРепозитория, настройкиСкрипта: ОписаниеНастроекСкрипта, настройкиСборки: ОписаниеНастроекСборки, исполняемыйФайлПлатформы: Строка)
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
пер имяВетки = CI_COMMIT_BRANCH
если запросНаСлияние != Неопределено
имяВетки = запросНаСлияние.веткаПроекта
;
// TODO: Сделать проверку на существование ветки
имяВетки = "master"
знч адресРепозиторияТестов = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторийСценарныхТестов
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияТестов %{репозиторийСценарныхТестов.Ветка}")
Git_Clone(адресРепозиторияТестов, репозиторийСценарныхТестов.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияТестов %имяВетки")
Git_Clone(адресРепозиторияТестов, имяВетки)
знч настройкиАвтофич = ПрочитатьНастройкиАвтофич("%CI_PROJECT_DIR/%{репозиторийСценарныхТестов.Имя}/auto_features/AFParams.json")
@ -1621,6 +1724,7 @@
;
метод ОпубликоватьAllureОтчет()
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_JOB_ID = СредаИсполнения.ПолучитьПеременную("CI_JOB_ID")
знч CI_JOB_TOKEN = СредаИсполнения.ПолучитьПеременную("CI_JOB_TOKEN")
знч CI_PROJECT_DIR = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_DIR")
@ -1629,12 +1733,20 @@
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
знч настройки = ПрочитатьНастройкиСборки("%CI_PROJECT_DIR")
знч запросНаСлияние = ПараметрыЗапросаНаСлияние()
пер имяВетки = CI_COMMIT_BRANCH
если запросНаСлияние != Неопределено
имяВетки = запросНаСлияние.веткаПроекта
;
// TODO: Сделать проверку на существование ветки
имяВетки = "master"
для репозиторийСценарныхТестов из настройки.СценарныеТесты
знч адресРепозиторияТестов = "https://gitlab-ci-token:%CI_JOB_TOKEN@%CI_SERVER_HOST/%CI_PROJECT_NAMESPACE/%{репозиторийСценарныхТестов
.Имя}.git"
Консоль.Записать("Git_Clone: %адресРепозиторияТестов %{репозиторийСценарныхТестов.Ветка}")
Git_Clone(адресРепозиторияТестов, репозиторийСценарныхТестов.Ветка)
Консоль.Записать("Git_Clone: %адресРепозиторияТестов %имяВетки")
Git_Clone(адресРепозиторияТестов, имяВетки)
знч настройкиАвтофич = ПрочитатьНастройкиАвтофич("%CI_PROJECT_DIR/%{репозиторийСценарныхТестов.Имя}/auto_features/AFParams.json")
@ -1745,6 +1857,7 @@
;
метод ПроверитьКоммитыРепозиторияДляПоследнегоРелиза(репозиторий: ОписаниеРепозитория, датаПоследнегоРелиза: ДатаВремя): ДатаВремя?
знч CI_COMMIT_BRANCH = СредаИсполнения.ПолучитьПеременную("CI_COMMIT_BRANCH")
знч CI_PROJECT_NAMESPACE = СредаИсполнения.ПолучитьПеременную("CI_PROJECT_NAMESPACE")
знч CI_SERVER_HOST = СредаИсполнения.ПолучитьПеременную("CI_SERVER_HOST")
@ -1753,12 +1866,11 @@
знч имяПроекта = "%CI_PROJECT_NAMESPACE/%{репозиторий.Имя}".Заменить("/", "\%2F")
пер коммиты = новый Массив()
если датаПоследнегоРелиза == новый ДатаВремя(1, 1, 1)
Консоль.Записать("Commits_List: %{репозиторий.Ветка} %имяПроекта %CI_SERVER_HOST")
коммиты = Commits_List(репозиторий.Ветка, имяПроекта, токен, CI_SERVER_HOST, "", датаПоследнегоРелиза)
Консоль.Записать("Commits_List: %CI_COMMIT_BRANCH %имяПроекта %CI_SERVER_HOST")
коммиты = Commits_List(CI_COMMIT_BRANCH, имяПроекта, токен, CI_SERVER_HOST, "", датаПоследнегоРелиза)
иначе
Консоль.Записать("Commits_List_Since: %{репозиторий
.Ветка} %имяПроекта %CI_SERVER_HOST %датаПоследнегоРелиза")
коммиты = Commits_List_Since(репозиторий.Ветка, имяПроекта, токен, CI_SERVER_HOST, датаПоследнегоРелиза)
Консоль.Записать("Commits_List_Since: %CI_COMMIT_BRANCH %имяПроекта %CI_SERVER_HOST %датаПоследнегоРелиза")
коммиты = Commits_List_Since(CI_COMMIT_BRANCH, имяПроекта, токен, CI_SERVER_HOST, датаПоследнегоРелиза)
;
если коммиты.Пусто()
Консоль.Записать("Нет новых коммитов в репозитории %{репозиторий.Имя}")
@ -1812,12 +1924,11 @@
структура ОписаниеРепозитория
знч Имя: Строка
пер Ветка: Строка
знч Проект: Строка
знч ПеременнаяТокена: Строка
конструктор (Имя, Ветка, ПеременнаяТокена)
конструктор (Имя, Ветка, Проект, ПеременнаяТокена)
конструктор (Имя, ПеременнаяТокена)
конструктор (Имя, Проект, ПеременнаяТокена)
;
@ -1860,21 +1971,9 @@
пер настройки = СериализацияJson.ПрочитатьОбъект(поток, Тип(ОписаниеНастроекСборки),
настройкиJson) как ОписаниеНастроекСборки
если запросНаСлияние != Неопределено
если настройки.Конфигурация.Имя == запросНаСлияние.имяПроекта
настройки.Конфигурация.Ветка = запросНаСлияние.веткаПроекта
;
;
пер прикладныеРасширения = новый Массив()
для репозиторийРасширения из настройки.ПрикладныеРасширения
пер веткаРасширения = репозиторийРасширения["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта
веткаРасширения = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"],
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Проект"],
репозиторийРасширения["ПеременнаяТокена"])
прикладныеРасширения.Добавить(описание)
;
@ -1882,13 +1981,7 @@
пер тестовыеРасширения = новый Массив()
для репозиторийРасширения из настройки.ТестовыеРасширения
пер веткаРасширения = репозиторийРасширения["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийРасширения["Имя"] == запросНаСлияние.имяПроекта
веткаРасширения = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], веткаРасширения, репозиторийРасширения["Проект"],
знч описание = новый ОписаниеРепозитория(репозиторийРасширения["Имя"], репозиторийРасширения["Проект"],
репозиторийРасширения["ПеременнаяТокена"])
тестовыеРасширения.Добавить(описание)
;
@ -1896,13 +1989,7 @@
пер сценарныеТесты = новый Массив()
для репозиторийТестов из настройки.СценарныеТесты
пер веткаТестов = репозиторийТестов["Ветка"]
если запросНаСлияние != Неопределено
если репозиторийТестов["Имя"] == запросНаСлияние.имяПроекта
веткаТестов = запросНаСлияние.веткаПроекта
;
;
знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], веткаТестов, репозиторийТестов["ПеременнаяТокена"])
знч описание = новый ОписаниеРепозитория(репозиторийТестов["Имя"], "", репозиторийТестов["ПеременнаяТокена"])
сценарныеТесты.Добавить(описание)
;
настройки.СценарныеТесты = сценарныеТесты