From f8646600a5d1928a5ff966d3c950aace05415870 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 14:50:38 +0300 Subject: [PATCH 01/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/globalConfiguration.json | 5 +- resources/schema.json | 645 +++++++++--------- .../configuration/ConfigurationReader.groovy | 21 +- .../configuration/InitInfoBaseOptions.groovy | 25 + .../library/configuration/InitMethod.groovy | 12 + .../configuration/JobConfiguration.groovy | 9 + .../configuration/TimeoutOptions.groovy | 10 + .../EdtToDesignerFormatTransformation.groovy | 55 +- .../library/steps/GetExtensions.groovy | 96 +++ .../library/steps/LoadExtensions.groovy | 55 ++ vars/getExtensions.groovy | 10 + vars/loadExtensions.groovy | 10 + vars/pipeline1C.groovy | 26 +- 13 files changed, 665 insertions(+), 314 deletions(-) create mode 100644 src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy create mode 100644 src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy create mode 100644 src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy create mode 100644 vars/getExtensions.groovy create mode 100644 vars/loadExtensions.groovy diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index 5fcd3eb7..45936811 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -24,11 +24,13 @@ "timeout": { "smoke": 240, "bdd": 120, + "getBinaries": 60, "createInfoBase": 60, "designerToEdtFormatTransformation": 60, "edtToDesignerFormatTransformation": 60, "edtValidate": 240, "initInfoBase": 60, + "loadExtensions": 60, "resultTransformation": 10, "sonarqube": 90, "syntaxCheck": 240, @@ -37,7 +39,8 @@ "initInfobase": { "initMethod": "fromStorage", "runMigration": true, - "additionalInitializationSteps": [] + "additionalInitializationSteps": [], + "extensions": [] }, "bdd": { "vrunnerSteps": [ diff --git a/resources/schema.json b/resources/schema.json index fbeb0dd8..5b89ff26 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -1,368 +1,405 @@ { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:JobConfiguration", - "properties" : { - "v8version" : { - "type" : "string", - "description" : "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх." + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:JobConfiguration", + "properties": { + "v8version": { + "type": "string", + "description": "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх." }, - "edtVersion" : { - "type" : "string", - "description" : "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64" + "edtVersion": { + "type": "string", + "description": "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64" }, - "srcDir" : { - "type" : "string", - "description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту" + "srcDir": { + "type": "string", + "description": "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту" }, - "sourceFormat" : { - "type" : "string", - "description" : "Формат исходников конфигурации", - "enum" : [ "edt", "designer" ] + "sourceFormat": { + "type": "string", + "description": "Формат исходников конфигурации", + "enum": ["edt", "designer"] }, - "defaultBranch" : { - "type" : "string", - "description" : "Имя ветки по умолчанию. Значение по умолчанию - main." + "defaultBranch": { + "type": "string", + "description": "Имя ветки по умолчанию. Значение по умолчанию - main." }, - "secrets" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:Secrets", - "description" : "Идентификаторы сохраненных секретов", - "properties" : { - "storagePath" : { - "type" : "string", - "description" : "Путь к хранилищу конфигурации" - }, - "storage" : { - "type" : "string", - "description" : "Данные авторизации в хранилище конфигурации" - }, - "telegramChatId" : { - "type" : "string", - "description" : "Идентификатор telegram-чата для отправки уведомлений" - }, - "telegramBotToken" : { - "type" : "string", - "description" : "Токен авторизации telegram-бота для отправки уведомлений" + "secrets": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:Secrets", + "description": "Идентификаторы сохраненных секретов", + "properties": { + "storagePath": { + "type": "string", + "description": "Путь к хранилищу конфигурации" + }, + "storage": { + "type": "string", + "description": "Данные авторизации в хранилище конфигурации" + }, + "telegramChatId": { + "type": "string", + "description": "Идентификатор telegram-чата для отправки уведомлений" + }, + "telegramBotToken": { + "type": "string", + "description": "Токен авторизации telegram-бота для отправки уведомлений" } } }, - "stages" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:StageFlags", - "description" : "Включение этапов сборок", - "properties" : { - "sonarqube" : { - "type" : "boolean", - "description" : "Анализ SonarQube включен" - }, - "syntaxCheck" : { - "type" : "boolean", - "description" : "Синтаксический контроль включен" - }, - "edtValidate" : { - "type" : "boolean", - "description" : "Валидация EDT включена" - }, - "smoke" : { - "type" : "boolean", - "description" : "Дымовые тесты включены" - }, - "initSteps" : { - "type" : "boolean", - "description" : "Предварительные шаги инициализации включены" - }, - "bdd" : { - "type" : "boolean", - "description" : "Запуск BDD сценариев включен" - }, - "email" : { - "type" : "boolean", - "description" : "Выполнять рассылку результатов сборки на email" - }, - "telegram" : { - "type" : "boolean", - "description" : "Выполнять рассылку результатов сборки в telegram" + "stages": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:StageFlags", + "description": "Включение этапов сборок", + "properties": { + "sonarqube": { + "type": "boolean", + "description": "Анализ SonarQube включен" + }, + "syntaxCheck": { + "type": "boolean", + "description": "Синтаксический контроль включен" + }, + "edtValidate": { + "type": "boolean", + "description": "Валидация EDT включена" + }, + "smoke": { + "type": "boolean", + "description": "Дымовые тесты включены" + }, + "initSteps": { + "type": "boolean", + "description": "Предварительные шаги инициализации включены" + }, + "bdd": { + "type": "boolean", + "description": "Запуск BDD сценариев включен" + }, + "email": { + "type": "boolean", + "description": "Выполнять рассылку результатов сборки на email" + }, + "telegram": { + "type": "boolean", + "description": "Выполнять рассылку результатов сборки в telegram" } } }, - "timeout" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:TimeoutOptions", - "description" : "Настройка таймаутов для шагов", - "properties" : { - "edtToDesignerFormatTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "createInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "initInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "zipInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "designerToEdtFormatTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "edtValidate" : { - "type" : "integer", - "description" : "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "resultTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n " - }, - "bdd" : { - "type" : "integer", - "description" : "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n " - }, - "syntaxCheck" : { - "type" : "integer", - "description" : "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "smoke" : { - "type" : "integer", - "description" : "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "sonarqube" : { - "type" : "integer", - "description" : "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n " + "timeout": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:TimeoutOptions", + "description": "Настройка таймаутов для шагов", + "properties": { + "edtToDesignerFormatTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "getBinaries": { + "type": "integer", + "description": "Таймаут шага получения бинарников, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "createInfoBase": { + "type": "integer", + "description": "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "initInfoBase": { + "type": "integer", + "description": "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "loadExtensions": { + "type": "integer", + "description": "Таймаут шага загрузки расширений в базу, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "zipInfoBase": { + "type": "integer", + "description": "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "designerToEdtFormatTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "edtValidate": { + "type": "integer", + "description": "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "resultTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n " + }, + "bdd": { + "type": "integer", + "description": "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n " + }, + "syntaxCheck": { + "type": "integer", + "description": "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "smoke": { + "type": "integer", + "description": "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "sonarqube": { + "type": "integer", + "description": "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n " } } }, - "initInfobase" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions", - "description" : "Настройки шага инициализации ИБ", - "properties" : { - "initMethod" : { - "type" : "string", - "description" : "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".", - "enum" : [ "fromStorage", "fromSource", "defaultBranchFromStorage" ] - }, - "runMigration" : { - "type" : "boolean", - "description" : "Запустить миграцию ИБ" - }, - "additionalInitializationSteps" : { - "type" : "array", - "description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ", - "items" : { - "type" : "string" + "initInfobase": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions", + "description": "Настройки шага инициализации ИБ", + "properties": { + "initMethod": { + "type": "string", + "description": "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".", + "enum": ["fromStorage", "fromSource", "defaultBranchFromStorage"] + }, + "runMigration": { + "type": "boolean", + "description": "Запустить миграцию ИБ" + }, + "additionalInitializationSteps": { + "type": "array", + "description": "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ", + "items": { + "type": "string" + } + }, + "extensions": { + "type": "array", + "description": "Массив расширений для загрузки в конфигурацию.", + "items": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions:extensions:exception", + "description": "Информация о расширении для загрузки", + "properties": { + "name": { + "type": "string", + "description": "Имя расширения с которым оно грузится в конфигурацию" + }, + "initMethod": { + "type": "string", + "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromInternet - скачивание скомпилированного cfe по ссылке.", + "enum": ["fromSource", "fromInternet"] + }, + "path": { + "type": "string", + "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается ссылка на cfe-файл" + } + } } } } }, - "bdd" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions", - "description" : "Настройки шага запуска BDD сценариев", - "properties" : { - "vrunnerSteps" : { - "type" : "array", - "description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ", - "items" : { - "type" : "string" + "bdd": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions", + "description": "Настройки шага запуска BDD сценариев", + "properties": { + "vrunnerSteps": { + "type": "array", + "description": "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ", + "items": { + "type": "string" } } } }, - "sonarqube" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SonarQubeOptions", - "description" : "Настройки анализа SonarQube", - "properties" : { - "sonarQubeInstallation" : { - "type" : "string", - "description" : "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым." - }, - "useSonarScannerFromPath" : { - "type" : "boolean", - "description" : "Использовать sonar-scanner, доступный в PATH" - }, - "sonarScannerToolName" : { - "type" : "string", - "description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false." - }, - "infoBaseUpdateModuleName" : { - "type" : "string", - "description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n " - }, - "branchAnalysisConfiguration" : { - "type" : "string", - "description" : "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.", - "enum" : [ "auto", "fromEnv" ] - }, - "waitForQualityGate" : { - "type" : "boolean", - "description" : "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n " + "sonarqube": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SonarQubeOptions", + "description": "Настройки анализа SonarQube", + "properties": { + "sonarQubeInstallation": { + "type": "string", + "description": "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым." + }, + "useSonarScannerFromPath": { + "type": "boolean", + "description": "Использовать sonar-scanner, доступный в PATH" + }, + "sonarScannerToolName": { + "type": "string", + "description": "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false." + }, + "infoBaseUpdateModuleName": { + "type": "string", + "description": "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n " + }, + "branchAnalysisConfiguration": { + "type": "string", + "description": "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.", + "enum": ["auto", "fromEnv"] + }, + "waitForQualityGate": { + "type": "boolean", + "description": "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n " } } }, - "syntaxCheck" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions", - "description" : "Настройки синтаксического контроля", - "properties" : { - "pathToJUnitReport" : { - "type" : "string", - "description" : "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n " - }, - "groupErrorsByMetadata" : { - "type" : "boolean", - "description" : "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n " - }, - "checkModes" : { - "type" : "array", - "description" : "Режимы проверки конфигурации", - "items" : { - "type" : "string" + "syntaxCheck": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions", + "description": "Настройки синтаксического контроля", + "properties": { + "pathToJUnitReport": { + "type": "string", + "description": "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n " + }, + "groupErrorsByMetadata": { + "type": "boolean", + "description": "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n " + }, + "checkModes": { + "type": "array", + "description": "Режимы проверки конфигурации", + "items": { + "type": "string" } }, - "exceptionFile" : { - "type" : "string", - "description" : "Путь к файлу с указанием пропускаемых ошибок.\n Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть\n Кодировка: UTF-8\n " + "exceptionFile": { + "type": "string", + "description": "Путь к файлу с указанием пропускаемых ошибок.\n Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть\n Кодировка: UTF-8\n " }, - "vrunnerSettings" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " + "vrunnerSettings": { + "type": "string", + "description": "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " } } }, - "smoke" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SmokeTestOptions", - "description" : "Настройки дымового тестирования", - "properties" : { - "vrunnerSettings" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " - }, - "xddConfigPath" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n " - }, - "publishToAllureReport" : { - "type" : "boolean", - "description" : "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n " - }, - "publishToJUnitReport" : { - "type" : "boolean", - "description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n " + "smoke": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SmokeTestOptions", + "description": "Настройки дымового тестирования", + "properties": { + "vrunnerSettings": { + "type": "string", + "description": "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " + }, + "xddConfigPath": { + "type": "string", + "description": "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n " + }, + "publishToAllureReport": { + "type": "boolean", + "description": "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n " + }, + "publishToJUnitReport": { + "type": "boolean", + "description": "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n " } } }, - "resultsTransform" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:ResultsTransformOptions", - "description" : "Настройки трансформации результатов анализа", - "properties" : { - "removeSupport" : { - "type" : "boolean", - "description" : "Фильтровать замечания по уровню поддержки модуля. По умолчанию включено." - }, - "supportLevel" : { - "type" : "integer", - "description" : "Настройка фильтрации замечаний по уровню поддержки.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n " + "resultsTransform": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:ResultsTransformOptions", + "description": "Настройки трансформации результатов анализа", + "properties": { + "removeSupport": { + "type": "boolean", + "description": "Фильтровать замечания по уровню поддержки модуля. По умолчанию включено." + }, + "supportLevel": { + "type": "integer", + "description": "Настройка фильтрации замечаний по уровню поддержки.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n " } } }, - "notifications" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:NotificationsOptions", - "description" : "Настройки рассылки результатов сборки", - "properties" : { - "email" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:EmailNotificationOptions", - "description" : "Настройки рассылки результатов сборки через email", - "properties" : { - "onAlways" : { - "type" : "boolean", - "description" : "Отправлять всегда" + "notifications": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:NotificationsOptions", + "description": "Настройки рассылки результатов сборки", + "properties": { + "email": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:EmailNotificationOptions", + "description": "Настройки рассылки результатов сборки через email", + "properties": { + "onAlways": { + "type": "boolean", + "description": "Отправлять всегда" }, - "onSuccess" : { - "type" : "boolean", - "description" : "Отправлять при успешной сборке" + "onSuccess": { + "type": "boolean", + "description": "Отправлять при успешной сборке" }, - "onFailure" : { - "type" : "boolean", - "description" : "Отправлять при падении сборки" + "onFailure": { + "type": "boolean", + "description": "Отправлять при падении сборки" }, - "onUnstable" : { - "type" : "boolean", - "description" : "Отправлять при нестабильной сборке" + "onUnstable": { + "type": "boolean", + "description": "Отправлять при нестабильной сборке" }, - "alwaysOptions" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration", - "properties" : { - "attachLog" : { - "type" : "boolean" + "alwaysOptions": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration", + "properties": { + "attachLog": { + "type": "boolean" }, - "directRecipients" : { - "type" : "array", - "items" : { - "type" : "string" + "directRecipients": { + "type": "array", + "items": { + "type": "string" } }, - "recipientProviders" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "developers", "requestor", "brokenBuildSuspects", "brokenTestsSuspects" ] + "recipientProviders": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "developers", + "requestor", + "brokenBuildSuspects", + "brokenTestsSuspects" + ] } } } }, - "successOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "successOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" }, - "failureOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "failureOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" }, - "unstableOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "unstableOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" } } }, - "telegram" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:TelegramNotificationOptions", - "description" : "Настройки рассылки результатов сборки через telegram", - "properties" : { - "onAlways" : { - "type" : "boolean", - "description" : "Отправлять всегда" + "telegram": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:TelegramNotificationOptions", + "description": "Настройки рассылки результатов сборки через telegram", + "properties": { + "onAlways": { + "type": "boolean", + "description": "Отправлять всегда" }, - "onSuccess" : { - "type" : "boolean", - "description" : "Отправлять при успешной сборке" + "onSuccess": { + "type": "boolean", + "description": "Отправлять при успешной сборке" }, - "onFailure" : { - "type" : "boolean", - "description" : "Отправлять при падении сборки" + "onFailure": { + "type": "boolean", + "description": "Отправлять при падении сборки" }, - "onUnstable" : { - "type" : "boolean", - "description" : "Отправлять при нестабильной сборке" + "onUnstable": { + "type": "boolean", + "description": "Отправлять при нестабильной сборке" } } } } }, - "logosConfig" : { - "type" : "string", - "description" : "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки" + "logosConfig": { + "type": "string", + "description": "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки" } } -} \ No newline at end of file +} diff --git a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy index a7f2c1c8..ab835753 100644 --- a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy @@ -61,6 +61,7 @@ class ConfigurationReader implements Serializable { "stageFlags", "timeoutOptions", "initInfoBaseOptions", + "extensions", "bddOptions", "sonarQubeOptions", "smokeTestOptions", @@ -113,12 +114,30 @@ class ConfigurationReader implements Serializable { @NonCPS private static void mergeInitInfoBaseOptions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { - if (objectToMerge == null || objectToMerge.additionalInitializationSteps == null) { + if (objectToMerge == null) { + return + } + mergeInitInfoBaseAdditionalInitializationSteps(baseObject, objectToMerge) + mergeInitInfoBaseExtintions(baseObject, objectToMerge) + } + + @NonCPS + private static void mergeInitInfoBaseAdditionalInitializationSteps(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + if (objectToMerge.additionalInitializationSteps == null) { return } baseObject.additionalInitializationSteps = objectToMerge.additionalInitializationSteps.clone() } + + @NonCPS + private static void mergeInitInfoBaseExtintions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + if (objectToMerge.extensions == null) { + return + } + baseObject.extensions = objectToMerge.extensions.clone() + } + @NonCPS private static void mergeBddOptions(BddOptions baseObject, BddOptions objectToMerge) { if (objectToMerge == null || objectToMerge.vrunnerSteps == null) { diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index f0874a60..3031e548 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -25,6 +25,30 @@ class InitInfoBaseOptions implements Serializable { """) String[] additionalInitializationSteps + @JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.") + Extension[] extensions; + + @JsonIgnoreProperties(ignoreUnknown = true) + static class Extension implements Serializable { + @JsonPropertyDescription("Имя расширения с которым оно грузится в конфигурацию") + String name; + + @JsonPropertyDescription(""" + Способ инициализации расширения. + Поддерживается два варианта: + * fromSource - инициализация расширения из исходников; + * fromInternet - скачивание скомпилированного cfe по ссылке. + """) + InitMethod initMethod; + + @JsonPropertyDescription(""" + Хранит в себе путь к расширению. + * В случае если выбран initMethod - указывается путь к исходникам расширения. + * В случае если выбран initMethod - указывается ссылка на cfe-файл + """) + String path; + } + @Override @NonCPS String toString() { @@ -32,6 +56,7 @@ class InitInfoBaseOptions implements Serializable { "initMethod=" + initMethod + ", runMigration=" + runMigration + ", additionalInitializationSteps=" + additionalInitializationSteps + + ", extensions=" + extensions + '}'; } } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy new file mode 100644 index 00000000..4473c598 --- /dev/null +++ b/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy @@ -0,0 +1,12 @@ +package ru.pulsar.jenkins.library.configuration + +import com.fasterxml.jackson.annotation.JsonProperty + +enum InitMethod { + @JsonProperty("fromSource") + SOURCE, + + @JsonProperty("fromInternet") + INTERNET + +} \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy index 75932fd9..101f3dac 100644 --- a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy @@ -100,6 +100,15 @@ class JobConfiguration implements Serializable { (initMethod == InitInfoBaseMethod.DEFAULT_BRANCH_FROM_STORAGE && branchName != defaultBranch) } + boolean needLoadExtensions() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + def env = steps.env(); + String branchName = env.BRANCH_NAME; + def extensions = initInfoBaseOptions.extensions + + return extensions.length != 0 + } + String v8AgentLabel() { return v8version } diff --git a/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy index 4def6ec1..612dc2b6 100644 --- a/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy @@ -11,6 +11,11 @@ class TimeoutOptions implements Serializable { ''') Integer edtToDesignerFormatTransformation + @JsonPropertyDescription('''Таймаут шага получения бинарников, в минутах. + По умолчанию содержит значение 60. + ''') + Integer getBinaries + @JsonPropertyDescription('''Таймаут шага создания информационной базы, в минутах. По умолчанию содержит значение 60. ''') @@ -21,6 +26,11 @@ class TimeoutOptions implements Serializable { ''') Integer initInfoBase + @JsonPropertyDescription('''Таймаут шага загрузки расширений в базу, в минутах. + По умолчанию содержит значение 60. + ''') + Integer loadExtensions + @JsonPropertyDescription('''Таймаут шага архивирования информационной базы, в минутах. По умолчанию содержит значение 60. ''') diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index f80acf22..edad3de5 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,6 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat +import ru.pulsar.jenkins.library.configuration.InitMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT @@ -16,6 +17,9 @@ class EdtToDesignerFormatTransformation implements Serializable { public static final String CONFIGURATION_DIR = 'build/cfg' public static final String CONFIGURATION_ZIP = 'build/cfg.zip' public static final String CONFIGURATION_ZIP_STASH = 'cfg-zip' + public static final String EXTENSION_DIR = 'build/cfe_src' + public static final String EXTENSION_ZIP = 'build/cfe_src.zip' + public static final String EXTENSION_ZIP_STASH = 'cfe_src-zip' private final JobConfiguration config; @@ -35,18 +39,29 @@ class EdtToDesignerFormatTransformation implements Serializable { def env = steps.env(); - def srcDir = config.srcDir - def projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") - def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") - def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + String srcDir = config.srcDir + String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") + + String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf") + String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") + String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + + + String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR") def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir) - steps.deleteDir(configurationRoot) - Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора") + transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing) + transformExtensions(steps, workspaceDir, extensionRoot, edtVersionForRing) + } - def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\"" + private void transformConfiguration(IStepExecutor steps, String projectDir, String projectWorkspaceDir, String configurationRoot, String edtVersionForRing) { + + Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора") + steps.deleteDir(configurationRoot) + + def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$projectWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\"" def ringOpts = [Constants.DEFAULT_RING_OPTS] steps.withEnv(ringOpts) { @@ -57,4 +72,30 @@ class EdtToDesignerFormatTransformation implements Serializable { steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP) } + private void transformExtensions(IStepExecutor steps, String workspaceDir, String extensionRoot, String edtVersionForRing) { + steps.deleteDir(extensionRoot) + + config.initInfoBaseOptions.extensions.each { + + if (it.initMethod != InitMethod.SOURCE) { + return + } + + Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора") + + def env = steps.env(); + def projectDir = FileUtils.getFilePath("$env.WORKSPACE/${it.path}") + def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}") + + def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\"" + + def ringOpts = [Constants.DEFAULT_RING_OPTS] + steps.withEnv(ringOpts) { + steps.cmd(ringCommand) + } + } + steps.zip(EXTENSION_DIR, EXTENSION_ZIP) + steps.stash(EXTENSION_ZIP_STASH, EXTENSION_ZIP) + } + } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy new file mode 100644 index 00000000..b891f4cb --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -0,0 +1,96 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.configuration.SourceFormat +import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Logger +import ru.pulsar.jenkins.library.utils.VRunner +import hudson.FilePath +import ru.pulsar.jenkins.library.utils.FileUtils + +class GetExtensions implements Serializable { + + public static final String EXTENSIONS_OUT_DIR = 'build/out/cfe' + + private final JobConfiguration config; + + GetExtensions(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + def env = steps.env() + + steps.installLocalDependencies(); + + + String vrunnerPath = initVRunnerPath(); + + + Logger.println("Сборка расширений") + + String sourceDirName = "" + + if (config.sourceFormat == SourceFormat.EDT) { + sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" + } + extractConvertedExtensions(sourceDirName, steps) + + config.initInfoBaseOptions.extensions.each { + if (it.initMethod == InitMethod.SOURCE) { + Logger.println("Сборка расширения ${it.name} из исходников") + String srcDir = getSrcDir(it, sourceDirName) + buildExtension(it, srcDir, vrunnerPath, steps) + } else { + Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") + loadExtension(it, env) + } + } + } + + private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА + + def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" + List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] + steps.withEnv(logosConfig) { + VRunner.exec(compileExtCommand) + } + } + + private void loadExtension(Extension extension, def env) { + String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" + FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) + localPathToExtension.copyFrom(new URL(extension.path)) + } + + + private String initVRunnerPath() { + return VRunner.getVRunnerPath() + } + + private String getSrcDir(Extension extension, String sourceDirName) { + if (config.sourceFormat == SourceFormat.EDT) { + return "${sourceDirName}/${extension.name}" + } else { + return "${sourceDirName}/${extension.path}" + } + } + + private void extractConvertedExtensions(String sourceDirName, IStepExecutor steps) { + if (config.sourceFormat == SourceFormat.EDT) { + // распакуем расширения + steps.unstash(EdtToDesignerFormatTransformation.EXTENSION_ZIP_STASH) + steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) + } + } +} diff --git a/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy new file mode 100644 index 00000000..53be96c6 --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy @@ -0,0 +1,55 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Logger +import ru.pulsar.jenkins.library.utils.VRunner +import hudson.FilePath +import ru.pulsar.jenkins.library.utils.FileUtils + +class LoadExtensions implements Serializable { + + private final JobConfiguration config; + + LoadExtensions(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + def env = steps.env(); + String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR" + + String vrunnerPath = VRunner.getVRunnerPath(); + + config.initInfoBaseOptions.extensions.each { + Logger.println("Установим расширение ${it.name}") + loadExtension(it, vrunnerPath, steps, cfeDir) + } + } + + private void loadExtension (Extension extension, String vrunnerPath, IStepExecutor steps, String cfeDir) { + + String pathToExt = "$cfeDir/${extension.name}.cfe" + FilePath localPathToExt = FileUtils.getFilePath(pathToExt) + + // Команда загрузки расширения + String loadCommand = vrunnerPath + ' run --command "Путь=' + localPathToExt + ';ЗавершитьРаботуСистемы;" --execute ' + String executeParameter = '$runnerRoot/epf/ЗагрузитьРасширениеВРежимеПредприятия.epf' + if (steps.isUnix()) { + executeParameter = '\\' + executeParameter + } + loadCommand += executeParameter + loadCommand += ' --ibconnection "/F./build/ib"' + + List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] + steps.withEnv(logosConfig) { + VRunner.exec(loadCommand) + } + } +} diff --git a/vars/getExtensions.groovy b/vars/getExtensions.groovy new file mode 100644 index 00000000..12a79c82 --- /dev/null +++ b/vars/getExtensions.groovy @@ -0,0 +1,10 @@ +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.GetExtensions + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def getExtensions = new GetExtensions(config) + getExtensions.run() +} \ No newline at end of file diff --git a/vars/loadExtensions.groovy b/vars/loadExtensions.groovy new file mode 100644 index 00000000..78e8b766 --- /dev/null +++ b/vars/loadExtensions.groovy @@ -0,0 +1,10 @@ +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.LoadExtensions + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def loadExtensions = new LoadExtensions(config) + loadExtensions.run() +} \ No newline at end of file diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 89faa801..23785161 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -76,10 +76,22 @@ void call() { } stages { + stage('Сборка из исходников'){ + when { + expression { config.needLoadExtensions() } + } + steps { + timeout(time: config.timeoutOptions.getBinaries, unit: TimeUnit.MINUTES) { + createDir('build/out/cfe') + // Соберем или загрузим cfe из исходников и положим их в папку build/out/cfe + getExtensions config + } + } + } stage('Создание ИБ') { steps { timeout(time: config.timeoutOptions.createInfoBase, unit: TimeUnit.MINUTES) { - createDir('build/out') + createDir('build/out/') script { if (config.infoBaseFromFiles()) { @@ -107,6 +119,18 @@ void call() { } } + stage('Загрузка расширений в конфигурацию'){ + when { + beforeAgent true + expression { config.needLoadExtensions() } + } + steps { + timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) { + loadExtensions config + } + } + } + stage('Архивация ИБ') { steps { timeout(time: config.timeoutOptions.zipInfoBase, unit: TimeUnit.MINUTES) { From c70b46191aaef0c22e77754eb2f44fb327972aaa Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:03:41 +0300 Subject: [PATCH 02/73] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 0dd12c5c..3d177b34 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,21 @@ pipeline1C() * Если информационная база нужна для запуска в режиме "Предприятие" (например, для шагов `bdd` или `smoke`), то будет запущен шаг "Миграция ИБ". * После загрузки конфигурации в ИБ будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП (`initInfobase` -> `runMigration`). * Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексикографической сортировки имен файлов. +* Загрузка расширений в информационную базу + * Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. + * При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. + * Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) + * Для каждого из расширений необходимо указать: + * Имя (`extensions` -> `name`) + * Способ получения (`extensions` -> `initMethod`) + + Сейчас поддерживаются 2 варианта: + * Из исходников(`fromSource`); + * Скачать cfe-файл из интернета (`fromInternet`) + * Путь до расширения (`extensions` -> `path`) + + * В случае загрузки из исходников - необходимо указать путь к исходникам расширения + * В случае загрузки из интернета - Укажите url по которому будет скачан cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) * BDD: * Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`. * Дымовые тесты: From b2a7aee0ad1efe8e6d1b32839fab7f3f893080af Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:21:41 +0300 Subject: [PATCH 03/73] =?UTF-8?q?=D0=94=D0=BB=D1=8F=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=BD=D0=BE=20=D0=BD=D0=B0=D1=83=D0=B3?= =?UTF-8?q?=D0=B0=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- jenkinsResources/core-version.txt | 2 +- test/integration/groovy/jobConfigurationTest.groovy | 1 + test/integration/resources/jobConfiguration.json | 7 ++++++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 14f2850e..7b6e22dd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,7 +48,7 @@ dependencies { testImplementation("org.slf4j", "slf4j-api", slf4jVersion) testImplementation("org.slf4j", "slf4j-simple", slf4jVersion) - + // integration-tests integrationTestImplementation("org.spockframework", "spock-core", spockVersion) integrationTestImplementation("org.codehaus.groovy", "groovy-all", groovyVersion) diff --git a/jenkinsResources/core-version.txt b/jenkinsResources/core-version.txt index b8b8d1ea..efd56a90 100644 --- a/jenkinsResources/core-version.txt +++ b/jenkinsResources/core-version.txt @@ -1 +1 @@ -2.246 \ No newline at end of file +2.441 \ No newline at end of file diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index e3ded0b8..7418bccb 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,5 +74,6 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) + rule.assertLogContains("path='/src/cfe/тест'", run) } } \ No newline at end of file diff --git a/test/integration/resources/jobConfiguration.json b/test/integration/resources/jobConfiguration.json index e027b9f9..38b207a9 100644 --- a/test/integration/resources/jobConfiguration.json +++ b/test/integration/resources/jobConfiguration.json @@ -1,6 +1,11 @@ { "v8version": "8.3.12.1500", "initInfobase": { - "initMethod": "fromSource" + "initMethod": "fromSource", + "extensions": [{ + "name": "Тест", + "initMethod": "fromSource", + "path": "/src/cfe/тест" + }] } } \ No newline at end of file From 20c4bccb53a48136a52dd2b7ef8878cbfc641b09 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:38:47 +0300 Subject: [PATCH 04/73] add filter --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index b891f4cb..ac8d5330 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -41,6 +41,9 @@ class GetExtensions implements Serializable { if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" } + else { + sourceDirName = "$env.WORKSPACE" + } extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { From e512a03e3f64d9b805ce1a9a73b97cd6547844d6 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:05:48 +0300 Subject: [PATCH 05/73] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3d177b34..cea2670c 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ pipeline1C() * Выгрузка результатов в формат `jUnit` осуществляется в файл `./build/out/jUnit/syntax.xml` (`syntaxCheck` -> `pathToJUnitReport`). * Если в репозитории существует файл `./tools/syntax-check-exception-file.txt`, то команде запуска синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр `--exception-file`) (`syntaxCheck` -> `exceptionFile`). * Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (`syntaxCheck` -> `checkModes`). + * Если вы хотите провести синтаксический контроль для расширения воспользуйтесь режимом проверки `-Extension <Имя расширения>`, или же `-AllExtensions` для проверки всех расширений. * Трансформация результатов валидации EDT: * По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`). * Анализ SonarQube: From 4d7efed5f07c288aa632451c11cc2e91f9c728d4 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:30:18 +0300 Subject: [PATCH 06/73] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D1=85=D0=B0=D0=BA=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index ac8d5330..422985f7 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -30,14 +30,11 @@ class GetExtensions implements Serializable { steps.installLocalDependencies(); - String vrunnerPath = initVRunnerPath(); - Logger.println("Сборка расширений") String sourceDirName = "" - if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" } @@ -46,6 +43,8 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) + steps.createDir(EXTENSIONS_OUT_DIR) + config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -59,9 +58,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From ea96d9703cd7fd7bc6743791a44cba5d908ff32a Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:39:17 +0300 Subject: [PATCH 07/73] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=B9=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82,=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D1=83=D1=82=D1=8C,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 422985f7..772a8258 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -43,7 +43,7 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) - steps.createDir(EXTENSIONS_OUT_DIR) + steps.createDir("${env.WORKSPACE}/${EXTENSIONS_OUT_DIR}") config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { @@ -58,6 +58,9 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From ea98885829913b48c9e6168035a5f429593dfb92 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:53:50 +0300 Subject: [PATCH 08/73] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=B9=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82,=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D1=83=D1=82=D1=8C,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 772a8258..91bbe28a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -58,9 +58,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 9f279c0415b350eddf2fdb11324eef87588887e6 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:56:55 +0300 Subject: [PATCH 09/73] =?UTF-8?q?=D0=9D=D0=B5=D1=82,=20=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=20=D1=82=D0=BE=D0=B6=D0=B5=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 91bbe28a..42f37ec5 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -43,8 +43,6 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) - steps.createDir("${env.WORKSPACE}/${EXTENSIONS_OUT_DIR}") - config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -58,6 +56,9 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From c2d9a20e9ceb91f93534fee29f8bc533e5e9468e Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Tue, 20 Feb 2024 14:23:49 +0300 Subject: [PATCH 10/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20deleteDir()=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B8?= =?UTF-8?q?=D0=BF=D0=B0=20FilePath?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/IStepExecutor.groovy | 3 +++ src/ru/pulsar/jenkins/library/StepExecutor.groovy | 8 ++++++++ .../steps/DesignerToEdtFormatTransformation.groovy | 2 +- .../steps/EdtToDesignerFormatTransformation.groovy | 4 ++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy index beb43207..4e15fe6f 100644 --- a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy @@ -1,5 +1,6 @@ package ru.pulsar.jenkins.library +import hudson.FilePath import jenkins.plugins.http_request.HttpMode import jenkins.plugins.http_request.MimeType import jenkins.plugins.http_request.ResponseContentSupplier @@ -53,6 +54,8 @@ interface IStepExecutor { void deleteDir(String path) + void deleteDir(FilePath path) + def withEnv(List strings, Closure body) def archiveArtifacts(String path) diff --git a/src/ru/pulsar/jenkins/library/StepExecutor.groovy b/src/ru/pulsar/jenkins/library/StepExecutor.groovy index b58b4943..59030cfa 100644 --- a/src/ru/pulsar/jenkins/library/StepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/StepExecutor.groovy @@ -1,5 +1,6 @@ package ru.pulsar.jenkins.library +import hudson.FilePath import jenkins.plugins.http_request.HttpMode import jenkins.plugins.http_request.MimeType import jenkins.plugins.http_request.ResponseContentSupplier @@ -119,6 +120,13 @@ class StepExecutor implements IStepExecutor { } } + @Override + void deleteDir(FilePath path) { + steps.dir(path.getRemote()) { + steps.deleteDir() + } + } + @Override def withEnv(List strings, Closure body) { steps.withEnv(strings) { diff --git a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy index 1f32ecaf..8ff00731 100644 --- a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy @@ -39,7 +39,7 @@ class DesignerToEdtFormatTransformation implements Serializable { def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") def edtVersionForRing = EDT.ringModule(config) - steps.deleteDir(workspaceDir.getRemote()) + steps.deleteDir(workspaceDir) Logger.println("Конвертация исходников из формата конфигуратора в формат EDT") diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 498f4ff0..f80acf22 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -41,8 +41,8 @@ class EdtToDesignerFormatTransformation implements Serializable { def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") def edtVersionForRing = EDT.ringModule(config) - steps.deleteDir(workspaceDir.getRemote()) - steps.deleteDir(configurationRoot.getRemote()) + steps.deleteDir(workspaceDir) + steps.deleteDir(configurationRoot) Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора") From 50889769fafb4c2d85e6b6f8d475b83ccd65e167 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 18:28:24 +0300 Subject: [PATCH 11/73] Squashed commit of the following: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit commit df9515fc67904701e1b763a1500ed70692e315f3 Merge: d79e367 0899819 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue Feb 13 16:55:11 2024 +0000 Merge pull request #109 from firstBitMarksistskaya/dependabot/github_actions/actions/checkout-4 commit 08998197bdc17c8cf7e015060b9e69b011fa2e3a Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue Feb 13 16:53:45 2024 +0000 Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] commit d79e367d323a037c214a830ec38a85b2939aa84d Merge: 1cfefc2 5bdca69 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue Feb 13 16:53:11 2024 +0000 Merge pull request #108 from firstBitMarksistskaya/dependabot/github_actions/actions/setup-java-4 commit 5bdca690ce210c610024034f161ae7f9739c9460 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue Feb 13 16:51:29 2024 +0000 Bump actions/setup-java from 3 to 4 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] commit 1cfefc24dea9332fafe5af02ee8157c593bb5e7b Author: Nikita Fedkin Date: Tue Feb 13 17:51:01 2024 +0100 Create dependabot.yml commit 3a1c9fb80c3d45f20bc0086b1e57ffb77f57b72c Merge: be33515 494f9b9 Author: Nikita Fedkin Date: Tue Feb 13 17:43:26 2024 +0100 Merge pull request #107 from ivanmolodec/file-exist-bug commit 494f9b9b138e81661544b006db49f0eab5984dc2 Merge: 8c9a702 be33515 Author: Ivan Smirnov <52702497+ivanmolodec@users.noreply.github.com> Date: Tue Feb 13 19:38:25 2024 +0300 Merge branch 'firstBitMarksistskaya:develop' into file-exist-bug commit be335151c42cfafbc9f1efe45f10fdb5cd5459c2 Author: Nikita Fedkin Date: Tue Feb 13 17:29:25 2024 +0100 Fix dependencies download commit 8c9a7028c9f8e677c975eedd462f6ea3166ddcd8 Author: Ivan Smirnov Date: Tue Feb 13 19:05:26 2024 +0300 Внесены правки в yaml файл для ci commit 7fb7fa1742d876395a7b8ed0b877972d928ce232 Author: Ivan Smirnov Date: Tue Feb 13 18:29:56 2024 +0300 Возвращено создание папки build/out commit bd943e9bcc1190305935fefadae5ee165d05926f Author: Ivan Smirnov Date: Tue Feb 13 15:07:44 2024 +0300 Добавлена проверка на существование файла 1Cv8.1CD.zip, удален дубль создания папки build/out --- .github/dependabot.yml | 11 +++++++++++ .github/workflows/gradle.yml | 12 ++++++------ build.gradle.kts | 5 +++++ vars/zipInfobase.groovy | 3 +++ 4 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..0d08e261 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "github-actions" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index e94b5496..1c1e5550 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -14,13 +14,13 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up JDK 11 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - - name: Build with Gradle - uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1 - with: - arguments: check + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + - name: Execute Gradle build + run: ./gradlew check diff --git a/build.gradle.kts b/build.gradle.kts index 7b6e22dd..2de8c201 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,6 +9,10 @@ plugins { id("org.jenkins-ci.jpi") version "0.38.0" apply false } +repositories { + mavenCentral() +} + tasks { register("resolveIntegrationTestDependencies") { @@ -106,5 +110,6 @@ sharedLibrary { dependency("org.jenkinsci.plugins", "pipeline-model-definition", declarativePluginsVersion) dependency("org.jenkinsci.plugins", "pipeline-model-extensions", declarativePluginsVersion) dependency("io.jenkins.blueocean", "blueocean-pipeline-api-impl", "1.25.3") + dependency("sp.sd", "file-operations", "214.v2e7dc7f25757") } } diff --git a/vars/zipInfobase.groovy b/vars/zipInfobase.groovy index 74004bb5..14bc94ae 100644 --- a/vars/zipInfobase.groovy +++ b/vars/zipInfobase.groovy @@ -1,4 +1,7 @@ def call() { + if (fileExists('1Cv8.1CD.zip')) { + fileOperations([fileDeleteOperation(includes: '1Cv8.1CD.zip')]) + } zip dir: 'build/ib', glob: '1Cv8.1CD', zipFile: '1Cv8.1CD.zip' stash name: "1Cv8.1CD.zip", includes: "1Cv8.1CD.zip", allowEmpty: false } From 4aa5070df34dea959c7b61ddf768096ad0741b3c Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 18:50:55 +0300 Subject: [PATCH 12/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jenkinsResources/core-version.txt | 2 +- .../jenkins/library/configuration/ConfigurationReader.groovy | 4 ++-- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jenkinsResources/core-version.txt b/jenkinsResources/core-version.txt index efd56a90..b8b8d1ea 100644 --- a/jenkinsResources/core-version.txt +++ b/jenkinsResources/core-version.txt @@ -1 +1 @@ -2.441 \ No newline at end of file +2.246 \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy index ab835753..395da027 100644 --- a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy @@ -118,7 +118,7 @@ class ConfigurationReader implements Serializable { return } mergeInitInfoBaseAdditionalInitializationSteps(baseObject, objectToMerge) - mergeInitInfoBaseExtintions(baseObject, objectToMerge) + mergeInitInfoBaseExtensions(baseObject, objectToMerge) } @NonCPS @@ -131,7 +131,7 @@ class ConfigurationReader implements Serializable { @NonCPS - private static void mergeInitInfoBaseExtintions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + private static void mergeInitInfoBaseExtensions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { if (objectToMerge.extensions == null) { return } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 3031e548..aa1a40ca 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -30,7 +30,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { - @JsonPropertyDescription("Имя расширения с которым оно грузится в конфигурацию") + @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") String name; @JsonPropertyDescription(""" From 5eb94cbf5d53bbc094f0e3bcb486c7fb398da1e1 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 18:53:14 +0300 Subject: [PATCH 13/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../steps/EdtToDesignerFormatTransformation.groovy | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 74db5375..08fa8950 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -40,14 +40,14 @@ class EdtToDesignerFormatTransformation implements Serializable { def env = steps.env(); String srcDir = config.srcDir - String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") + String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote() - String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf") - String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") - String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote() + String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir").getRemote() + String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR").getRemote() - String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR") + String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR").getRemote() def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir.getRemote()) From 1140af1f483e6136827e37cf04a8911897d3a325 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:11:15 +0300 Subject: [PATCH 14/73] =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B5=D0=B9=D0=BC=20in?= =?UTF-8?q?itMethod=20->=20InitExtentionMethod=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8=20=D0=B8=D0=BD=D1=84?= =?UTF-8?q?=D1=83=20=D0=BF=D0=BE=20=D1=81=D0=B8=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8E=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - .../{InitMethod.groovy => InitExtentionMethod.groovy} | 2 +- .../library/configuration/InitInfoBaseOptions.groovy | 6 +++--- .../jenkins/library/configuration/JobConfiguration.groovy | 7 +------ 4 files changed, 5 insertions(+), 11 deletions(-) rename src/ru/pulsar/jenkins/library/configuration/{InitMethod.groovy => InitExtentionMethod.groovy} (87%) diff --git a/README.md b/README.md index cea2670c..3d177b34 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,6 @@ pipeline1C() * Выгрузка результатов в формат `jUnit` осуществляется в файл `./build/out/jUnit/syntax.xml` (`syntaxCheck` -> `pathToJUnitReport`). * Если в репозитории существует файл `./tools/syntax-check-exception-file.txt`, то команде запуска синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр `--exception-file`) (`syntaxCheck` -> `exceptionFile`). * Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (`syntaxCheck` -> `checkModes`). - * Если вы хотите провести синтаксический контроль для расширения воспользуйтесь режимом проверки `-Extension <Имя расширения>`, или же `-AllExtensions` для проверки всех расширений. * Трансформация результатов валидации EDT: * По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`). * Анализ SonarQube: diff --git a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy similarity index 87% rename from src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy rename to src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy index 4473c598..4b31eb5b 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy @@ -2,7 +2,7 @@ package ru.pulsar.jenkins.library.configuration import com.fasterxml.jackson.annotation.JsonProperty -enum InitMethod { +enum InitExtentionMethod { @JsonProperty("fromSource") SOURCE, diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index aa1a40ca..88f51b4c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -31,7 +31,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") - String name; + String name = "extention"; @JsonPropertyDescription(""" Способ инициализации расширения. @@ -39,14 +39,14 @@ class InitInfoBaseOptions implements Serializable { * fromSource - инициализация расширения из исходников; * fromInternet - скачивание скомпилированного cfe по ссылке. """) - InitMethod initMethod; + InitExtentionMethod initMethod = InitExtentionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. * В случае если выбран initMethod - указывается путь к исходникам расширения. * В случае если выбран initMethod - указывается ссылка на cfe-файл """) - String path; + String path = "src/cfe/extention"; } @Override diff --git a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy index 101f3dac..8c1d331c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy @@ -101,12 +101,7 @@ class JobConfiguration implements Serializable { } boolean needLoadExtensions() { - IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - def env = steps.env(); - String branchName = env.BRANCH_NAME; - def extensions = initInfoBaseOptions.extensions - - return extensions.length != 0 + return initInfoBaseOptions.extensions.length != 0 } String v8AgentLabel() { From cfa9d47672dfb86b8cc3e63f2263336c8f877c5f Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:16:34 +0300 Subject: [PATCH 15/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 4 ++-- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 08fa8950..d94e2456 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,7 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitExtentionMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT @@ -78,7 +78,7 @@ class EdtToDesignerFormatTransformation implements Serializable { config.initInfoBaseOptions.extensions.each { - if (it.initMethod != InitMethod.SOURCE) { + if (it.initMethod != InitExtentionMethod.SOURCE) { return } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 42f37ec5..8e19a8c9 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -3,7 +3,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitExtentionMethod import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Logger @@ -44,7 +44,7 @@ class GetExtensions implements Serializable { extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { - if (it.initMethod == InitMethod.SOURCE) { + if (it.initMethod == InitExtentionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) From 4fe9a0c7b5198dd4fa5a8d510f4a5fce121064f7 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:29:50 +0300 Subject: [PATCH 16/73] =?UTF-8?q?=D0=A1=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA=D0=B8=20=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/groovy/jobConfigurationTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index 7418bccb..f88ce732 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,6 +74,6 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) - rule.assertLogContains("path='/src/cfe/тест'", run) + rule.assertLogContains("path=\"/src/cfe/тест\"", run) } } \ No newline at end of file From 9f03c79291916aae3436b1dc35b4c33e95ff8d37 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 26 Feb 2024 14:17:23 +0300 Subject: [PATCH 17/73] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{InitExtentionMethod.groovy => InitExtensionMethod.groovy} | 2 +- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- .../library/steps/EdtToDesignerFormatTransformation.groovy | 4 ++-- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- test/integration/groovy/jobConfigurationTest.groovy | 1 - 5 files changed, 6 insertions(+), 7 deletions(-) rename src/ru/pulsar/jenkins/library/configuration/{InitExtentionMethod.groovy => InitExtensionMethod.groovy} (87%) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy similarity index 87% rename from src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy rename to src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy index 4b31eb5b..cafc8c61 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy @@ -2,7 +2,7 @@ package ru.pulsar.jenkins.library.configuration import com.fasterxml.jackson.annotation.JsonProperty -enum InitExtentionMethod { +enum InitExtensionMethod { @JsonProperty("fromSource") SOURCE, diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 88f51b4c..860923ae 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -39,7 +39,7 @@ class InitInfoBaseOptions implements Serializable { * fromSource - инициализация расширения из исходников; * fromInternet - скачивание скомпилированного cfe по ссылке. """) - InitExtentionMethod initMethod = InitExtentionMethod.SOURCE; + InitExtensionMethod initMethod = InitExtensionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index d94e2456..ca3c6a42 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,7 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitExtentionMethod +import ru.pulsar.jenkins.library.configuration.InitExtensionMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT @@ -78,7 +78,7 @@ class EdtToDesignerFormatTransformation implements Serializable { config.initInfoBaseOptions.extensions.each { - if (it.initMethod != InitExtentionMethod.SOURCE) { + if (it.initMethod != InitExtensionMethod.SOURCE) { return } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 8e19a8c9..772b2a41 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -3,7 +3,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitExtentionMethod +import ru.pulsar.jenkins.library.configuration.InitExtensionMethod import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Logger @@ -44,7 +44,7 @@ class GetExtensions implements Serializable { extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { - if (it.initMethod == InitExtentionMethod.SOURCE) { + if (it.initMethod == InitExtensionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index f88ce732..e3ded0b8 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,6 +74,5 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) - rule.assertLogContains("path=\"/src/cfe/тест\"", run) } } \ No newline at end of file From 6ac28af8a09c9d19d877fe5a80fe56c938093021 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov <52702497+ivanmolodec@users.noreply.github.com> Date: Fri, 1 Mar 2024 16:36:11 +0300 Subject: [PATCH 18/73] Edt transformation fix (#2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обработка ошибки EDT: утилита ring не повышает в командной строке errorlevel, поэтому при ошибке в ринге шаг не считается проваленным. Изменил метод cmd для возможности проверить текст отработки ring и дальнейшего выявления из текста ошибки --- .../pulsar/jenkins/library/IStepExecutor.groovy | 10 ++++++---- .../pulsar/jenkins/library/StepExecutor.groovy | 12 ++++++------ src/ru/pulsar/jenkins/library/steps/Cmd.groovy | 16 +++++++++++----- .../DesignerToEdtFormatTransformation.groovy | 7 +++++-- vars/cmd.groovy | 4 ++-- 5 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy index 4e15fe6f..b71d0ffb 100644 --- a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy @@ -12,9 +12,9 @@ interface IStepExecutor { boolean isUnix() - int sh(String script, boolean returnStatus, String encoding) + def sh(String script, boolean returnStatus, boolean returnStdout, String encoding) - int bat(String script, boolean returnStatus, String encoding) + def bat(String script, boolean returnStatus, boolean returnStdout, String encoding) String libraryResource(String path) @@ -30,9 +30,11 @@ interface IStepExecutor { void echo(message) - int cmd(String script, boolean returnStatus) + def cmd(String script, boolean returnStatus, boolean returnStdout) - int cmd(String script) + def cmd(String script, boolean returnStatus) + + def cmd(String script) void tool(String toolName) diff --git a/src/ru/pulsar/jenkins/library/StepExecutor.groovy b/src/ru/pulsar/jenkins/library/StepExecutor.groovy index 59030cfa..e02585fa 100644 --- a/src/ru/pulsar/jenkins/library/StepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/StepExecutor.groovy @@ -23,13 +23,13 @@ class StepExecutor implements IStepExecutor { } @Override - int sh(String script, boolean returnStatus, String encoding) { - steps.sh script: script, returnStatus: returnStatus, encoding: encoding + def sh(String script, boolean returnStatus, boolean returnStdout, String encoding) { + steps.sh script: script, returnStatus: returnStatus, returnStdout: returnStdout, encoding: encoding } @Override - int bat(String script, boolean returnStatus, String encoding) { - steps.bat script: script, returnStatus: returnStatus, encoding: encoding + def bat(String script, boolean returnStatus, boolean returnStdout, String encoding) { + steps.bat script: script, returnStatus: returnStatus, returnStdout: returnStdout, encoding: encoding } @Override @@ -58,8 +58,8 @@ class StepExecutor implements IStepExecutor { } @Override - int cmd(String script, boolean returnStatus = false) { - return steps.cmd(script, returnStatus) + def cmd(String script, boolean returnStatus = false, boolean returnStdout = false) { + return steps.cmd(script, returnStatus, returnStdout) } @Override diff --git a/src/ru/pulsar/jenkins/library/steps/Cmd.groovy b/src/ru/pulsar/jenkins/library/steps/Cmd.groovy index f2037522..15ea4395 100644 --- a/src/ru/pulsar/jenkins/library/steps/Cmd.groovy +++ b/src/ru/pulsar/jenkins/library/steps/Cmd.groovy @@ -7,22 +7,28 @@ class Cmd implements Serializable { private String script; private boolean returnStatus + private boolean returnStdout private String encoding = 'UTF-8' - Cmd(String script, boolean returnStatus = false) { + Cmd(String script, boolean returnStatus = false, boolean returnStdout = false) { this.script = script this.returnStatus = returnStatus + this.returnStdout = returnStdout }; - int run() { + def run() { IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - int returnValue + def returnValue + + if (returnStatus & returnStdout) { + return "returnStatus and returnStdout are not supported at the same time" + } if (steps.isUnix()) { - returnValue = steps.sh("$script", returnStatus, encoding) + returnValue = steps.sh("$script", returnStatus, returnStdout, encoding) } else { - returnValue = steps.bat("chcp 65001 > nul \n$script", returnStatus, encoding) + returnValue = steps.bat("chcp 65001 > nul \n$script", returnStatus, returnStdout, encoding) } return returnValue diff --git a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy index 8ff00731..d06ca93e 100644 --- a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy @@ -34,7 +34,7 @@ class DesignerToEdtFormatTransformation implements Serializable { def env = steps.env(); - def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") + String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote() def srcDir = config.srcDir def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") def edtVersionForRing = EDT.ringModule(config) @@ -47,7 +47,10 @@ class DesignerToEdtFormatTransformation implements Serializable { def ringOpts = [Constants.DEFAULT_RING_OPTS] steps.withEnv(ringOpts) { - steps.cmd(ringCommand) + String ringMessage = steps.cmd(ringCommand, false, true) + if (ringMessage.contains("error")) { + steps.error(ringMessage) + } } steps.zip(WORKSPACE, WORKSPACE_ZIP) diff --git a/vars/cmd.groovy b/vars/cmd.groovy index 692b019e..b882092c 100644 --- a/vars/cmd.groovy +++ b/vars/cmd.groovy @@ -1,9 +1,9 @@ import ru.pulsar.jenkins.library.steps.Cmd import ru.pulsar.jenkins.library.ioc.ContextRegistry -int call(String script, boolean returnStatus = false) { +int call(String script, boolean returnStatus = false, boolean returnStdout = false ) { ContextRegistry.registerDefaultContext(this) - Cmd cmd = new Cmd(script, returnStatus) + Cmd cmd = new Cmd(script, returnStatus, returnStdout) return cmd.run() } From d73b9a97c940c5ee6a913ca1a5ad1ccf3f309d63 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Wed, 6 Mar 2024 18:29:38 +0300 Subject: [PATCH 19/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=88=D0=B0=D0=B3=D0=B0=20ringComma?= =?UTF-8?q?nd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jenkins/library/IStepExecutor.groovy | 2 ++ .../jenkins/library/StepExecutor.groovy | 5 ++++ .../DesignerToEdtFormatTransformation.groovy | 7 ++--- .../jenkins/library/steps/RingCommand.groovy | 22 +++++++++++++++ .../pulsar/jenkins/library/steps/CmdTest.java | 27 ++++++++++--------- vars/cmd.groovy | 2 +- vars/ringCommand.groovy | 9 +++++++ 7 files changed, 56 insertions(+), 18 deletions(-) create mode 100644 src/ru/pulsar/jenkins/library/steps/RingCommand.groovy create mode 100644 vars/ringCommand.groovy diff --git a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy index b71d0ffb..e9f9cb50 100644 --- a/src/ru/pulsar/jenkins/library/IStepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/IStepExecutor.groovy @@ -36,6 +36,8 @@ interface IStepExecutor { def cmd(String script) + def ringCommand(String script) + void tool(String toolName) def withCredentials(List bindings, Closure body) diff --git a/src/ru/pulsar/jenkins/library/StepExecutor.groovy b/src/ru/pulsar/jenkins/library/StepExecutor.groovy index e02585fa..e8ffe04f 100644 --- a/src/ru/pulsar/jenkins/library/StepExecutor.groovy +++ b/src/ru/pulsar/jenkins/library/StepExecutor.groovy @@ -62,6 +62,11 @@ class StepExecutor implements IStepExecutor { return steps.cmd(script, returnStatus, returnStdout) } + @Override + def ringCommand(String script) { + return steps.ringCommand(script) + } + @Override void tool(String toolName) { steps.tool toolName diff --git a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy index d06ca93e..e6f62561 100644 --- a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy @@ -34,7 +34,7 @@ class DesignerToEdtFormatTransformation implements Serializable { def env = steps.env(); - String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote() + def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") def srcDir = config.srcDir def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") def edtVersionForRing = EDT.ringModule(config) @@ -47,10 +47,7 @@ class DesignerToEdtFormatTransformation implements Serializable { def ringOpts = [Constants.DEFAULT_RING_OPTS] steps.withEnv(ringOpts) { - String ringMessage = steps.cmd(ringCommand, false, true) - if (ringMessage.contains("error")) { - steps.error(ringMessage) - } + steps.ringCommand(ringCommand) } steps.zip(WORKSPACE, WORKSPACE_ZIP) diff --git a/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy b/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy new file mode 100644 index 00000000..d58c777d --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy @@ -0,0 +1,22 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.ioc.ContextRegistry + +class RingCommand implements Serializable { + + private String script; + + RingCommand(String script) { + this.script = script + }; + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + String ringMessage = steps.cmd(script, false, true) + if (ringMessage.contains("error")) { + steps.error(ringMessage) + } + } +} diff --git a/test/unit/groovy/ru/pulsar/jenkins/library/steps/CmdTest.java b/test/unit/groovy/ru/pulsar/jenkins/library/steps/CmdTest.java index 4d605480..a5518494 100644 --- a/test/unit/groovy/ru/pulsar/jenkins/library/steps/CmdTest.java +++ b/test/unit/groovy/ru/pulsar/jenkins/library/steps/CmdTest.java @@ -29,14 +29,17 @@ void runOk() { final String script = "echo hello"; Cmd cmd = new Cmd(script); + when(steps.bat(anyString(), anyBoolean(), anyBoolean(), anyString())).thenReturn(0); + when(steps.sh(anyString(), anyBoolean(), anyBoolean(), anyString())).thenReturn(0); + // when - int run = cmd.run(); + Object run = cmd.run(); // then verify(steps).isUnix(); assertThat(steps).satisfiesAnyOf( - steps -> verify(steps).bat(contains(script), eq(false), anyString()), - steps -> verify(steps).sh(contains(script), eq(false), anyString()) + steps -> verify(steps).bat(contains(script), eq(false), eq(false), anyString()), + steps -> verify(steps).sh(contains(script), eq(false), eq(false), anyString()) ); assertThat(run).isEqualTo(0); @@ -49,8 +52,8 @@ void runFailNoReturn() { Cmd cmd = new Cmd(script); String thrownText = "failed"; - when(steps.bat(anyString(), anyBoolean(), anyString())).thenThrow(new Error(thrownText)); - when(steps.sh(anyString(), anyBoolean(), anyString())).thenThrow(new Error(thrownText)); + when(steps.bat(anyString(), anyBoolean(), anyBoolean(), anyString())).thenThrow(new Error(thrownText)); + when(steps.sh(anyString(), anyBoolean(), anyBoolean(), anyString())).thenThrow(new Error(thrownText)); // when Throwable thrown = catchThrowable(cmd::run); @@ -59,8 +62,8 @@ void runFailNoReturn() { // then verify(steps).isUnix(); assertThat(steps).satisfiesAnyOf( - steps -> verify(steps).bat(contains(script), eq(false), anyString()), - steps -> verify(steps).sh(contains(script), eq(false), anyString()) + steps -> verify(steps).bat(contains(script), eq(false), eq(false), anyString()), + steps -> verify(steps).sh(contains(script), eq(false), eq(false), anyString()) ); } @@ -70,17 +73,17 @@ void runPassAndReturn() { final String script = "false"; Cmd cmd = new Cmd(script, true); - when(steps.bat(anyString(), anyBoolean(), anyString())).thenReturn(1); - when(steps.sh(anyString(), anyBoolean(), anyString())).thenReturn(1); + when(steps.bat(anyString(), anyBoolean(), anyBoolean(), anyString())).thenReturn(1); + when(steps.sh(anyString(), anyBoolean(), anyBoolean(), anyString())).thenReturn(1); // when - int run = cmd.run(); + Object run = cmd.run(); // then verify(steps).isUnix(); assertThat(steps).satisfiesAnyOf( - steps -> verify(steps).bat(contains(script), eq(true), anyString()), - steps -> verify(steps).sh(contains(script), eq(true), anyString()) + steps -> verify(steps).bat(contains(script), eq(true), eq(false), anyString()), + steps -> verify(steps).sh(contains(script), eq(true), eq(false), anyString()) ); assertThat(run).isEqualTo(1); diff --git a/vars/cmd.groovy b/vars/cmd.groovy index b882092c..810dcb4c 100644 --- a/vars/cmd.groovy +++ b/vars/cmd.groovy @@ -1,7 +1,7 @@ import ru.pulsar.jenkins.library.steps.Cmd import ru.pulsar.jenkins.library.ioc.ContextRegistry -int call(String script, boolean returnStatus = false, boolean returnStdout = false ) { +def call(String script, boolean returnStatus = false, boolean returnStdout = false ) { ContextRegistry.registerDefaultContext(this) Cmd cmd = new Cmd(script, returnStatus, returnStdout) diff --git a/vars/ringCommand.groovy b/vars/ringCommand.groovy new file mode 100644 index 00000000..bc646c0b --- /dev/null +++ b/vars/ringCommand.groovy @@ -0,0 +1,9 @@ +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.RingCommand + +def call(String script ) { + ContextRegistry.registerDefaultContext(this) + + RingCommand ringCommand = new RingCommand(script) + return ringCommand.run() +} \ No newline at end of file From 0fd8cae14fac9849b4ce9442f16dcf3275569ec2 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Wed, 6 Mar 2024 18:57:20 +0300 Subject: [PATCH 20/73] =?UTF-8?q?=D0=A1=D0=BC=D0=B5=D0=BD=D0=B0=20=D1=88?= =?UTF-8?q?=D0=B0=D0=B3=D0=B0=20cmd=20=D0=BD=D0=B0=20ringCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 2 +- src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index f80acf22..315d7974 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -50,7 +50,7 @@ class EdtToDesignerFormatTransformation implements Serializable { def ringOpts = [Constants.DEFAULT_RING_OPTS] steps.withEnv(ringOpts) { - steps.cmd(ringCommand) + steps.ringCommand(ringCommand) } steps.zip(CONFIGURATION_DIR, CONFIGURATION_ZIP) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy index c24f812a..1c225fbb 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy @@ -55,7 +55,7 @@ class EdtValidate implements Serializable { def ringOpts = [Constants.DEFAULT_RING_OPTS] steps.withEnv(ringOpts) { steps.catchError { - steps.cmd(ringCommand) + steps.ringCommand(ringCommand) } } From bef4a4ed240c8ad88b031b14c3000528774652b5 Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Thu, 7 Mar 2024 14:24:46 +0300 Subject: [PATCH 21/73] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=D0=B0=20=D0=BD=D0=B0=20rin?= =?UTF-8?q?gCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/Cmd.groovy | 2 +- .../DesignerToEdtFormatTransformation.groovy | 6 +----- .../EdtToDesignerFormatTransformation.groovy | 6 +----- .../jenkins/library/steps/EdtValidate.groovy | 8 ++------ .../jenkins/library/steps/RingCommand.groovy | 16 ++++++++++++---- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/Cmd.groovy b/src/ru/pulsar/jenkins/library/steps/Cmd.groovy index 15ea4395..ead109c3 100644 --- a/src/ru/pulsar/jenkins/library/steps/Cmd.groovy +++ b/src/ru/pulsar/jenkins/library/steps/Cmd.groovy @@ -22,7 +22,7 @@ class Cmd implements Serializable { def returnValue if (returnStatus & returnStdout) { - return "returnStatus and returnStdout are not supported at the same time" + steps.error("returnStatus and returnStdout are not supported at the same time") } if (steps.isUnix()) { diff --git a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy index e6f62561..f678d0cf 100644 --- a/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/DesignerToEdtFormatTransformation.groovy @@ -4,7 +4,6 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.ioc.ContextRegistry -import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils import ru.pulsar.jenkins.library.utils.Logger @@ -45,10 +44,7 @@ class DesignerToEdtFormatTransformation implements Serializable { def ringCommand = "ring $edtVersionForRing workspace import --configuration-files \"$configurationRoot\" --project-name $PROJECT_NAME --workspace-location \"$workspaceDir\"" - def ringOpts = [Constants.DEFAULT_RING_OPTS] - steps.withEnv(ringOpts) { - steps.ringCommand(ringCommand) - } + steps.ringCommand(ringCommand) steps.zip(WORKSPACE, WORKSPACE_ZIP) steps.stash(WORKSPACE_ZIP_STASH, WORKSPACE_ZIP) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 315d7974..2dfa3908 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -5,7 +5,6 @@ import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat import ru.pulsar.jenkins.library.ioc.ContextRegistry -import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils import ru.pulsar.jenkins.library.utils.Logger @@ -48,10 +47,7 @@ class EdtToDesignerFormatTransformation implements Serializable { def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\"" - def ringOpts = [Constants.DEFAULT_RING_OPTS] - steps.withEnv(ringOpts) { - steps.ringCommand(ringCommand) - } + steps.ringCommand(ringCommand) steps.zip(CONFIGURATION_DIR, CONFIGURATION_ZIP) steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy index 1c225fbb..f766b9e0 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy @@ -4,7 +4,6 @@ import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat import ru.pulsar.jenkins.library.ioc.ContextRegistry -import ru.pulsar.jenkins.library.utils.Constants import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils import ru.pulsar.jenkins.library.utils.Logger @@ -52,11 +51,8 @@ class EdtValidate implements Serializable { Logger.println("Выполнение валидации EDT") def ringCommand = "ring $edtVersionForRing workspace validate --workspace-location \"$workspaceLocation\" --file \"$resultFile\" $projectList" - def ringOpts = [Constants.DEFAULT_RING_OPTS] - steps.withEnv(ringOpts) { - steps.catchError { - steps.ringCommand(ringCommand) - } + steps.catchError { + steps.ringCommand(ringCommand) } steps.archiveArtifacts("$DesignerToEdtFormatTransformation.WORKSPACE/.metadata/.log") diff --git a/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy b/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy index d58c777d..53617302 100644 --- a/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy +++ b/src/ru/pulsar/jenkins/library/steps/RingCommand.groovy @@ -2,21 +2,29 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Constants class RingCommand implements Serializable { - private String script; + private String script + private boolean returnStatus + private boolean returnStdout RingCommand(String script) { this.script = script + this.returnStatus = false + this.returnStdout = true }; def run() { IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - String ringMessage = steps.cmd(script, false, true) - if (ringMessage.contains("error")) { - steps.error(ringMessage) + def ringOpts = [Constants.DEFAULT_RING_OPTS] + steps.withEnv(ringOpts) { + String ringMessage = steps.cmd(script, returnStatus, returnStdout) + if (ringMessage.contains("error")) { + steps.error(ringMessage) + } } } } From 9a40360f7c044cf06418df28e62b10625e3e144e Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:55:56 +0300 Subject: [PATCH 22/73] Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy Co-authored-by: Nikita Fedkin --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 860923ae..1aa2e677 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -31,7 +31,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") - String name = "extention"; + String name = "extension"; @JsonPropertyDescription(""" Способ инициализации расширения. From 1549b21406614632f19c06e4253f3231449f1084 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:56:09 +0300 Subject: [PATCH 23/73] Update vars/pipeline1C.groovy Co-authored-by: Nikita Fedkin --- vars/pipeline1C.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 23785161..f5d8ee8a 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -76,7 +76,7 @@ void call() { } stages { - stage('Сборка из исходников'){ + stage('Сборка расширений из исходников') { when { expression { config.needLoadExtensions() } } From 5074264a96a19f52df50a0d4c311c93b1bf794da Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:57:28 +0300 Subject: [PATCH 24/73] Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy Co-authored-by: Nikita Fedkin --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 1aa2e677..83cdecef 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -46,7 +46,7 @@ class InitInfoBaseOptions implements Serializable { * В случае если выбран initMethod - указывается путь к исходникам расширения. * В случае если выбран initMethod - указывается ссылка на cfe-файл """) - String path = "src/cfe/extention"; + String path = "src/cfe/extension"; } @Override From 46cd1eeb4322b712e1f7f99f194f7e84817447e8 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:00:02 +0300 Subject: [PATCH 25/73] Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy Co-authored-by: Nikita Fedkin --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index ca3c6a42..15d6972c 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -50,7 +50,7 @@ class EdtToDesignerFormatTransformation implements Serializable { String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR").getRemote() def edtVersionForRing = EDT.ringModule(config) - steps.deleteDir(workspaceDir.getRemote()) + steps.deleteDir(workspaceDir) steps.deleteDir(configurationRoot.getRemote()) transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing) From 9347ab52c32c795e7044ed486d23354653eb1f81 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:00:21 +0300 Subject: [PATCH 26/73] Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy Co-authored-by: Nikita Fedkin --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 15d6972c..7b2f16b1 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -51,7 +51,7 @@ class EdtToDesignerFormatTransformation implements Serializable { def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir) - steps.deleteDir(configurationRoot.getRemote()) + steps.deleteDir(configurationRoot) transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing) transformExtensions(steps, workspaceDir, extensionRoot, edtVersionForRing) From 25bc817f90fd5015b8dac3b056ba50d5fd6f01e5 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 18:51:06 +0300 Subject: [PATCH 27/73] =?UTF-8?q?=D0=A4=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5.=20=D0=A3?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BA=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BF?= =?UTF-8?q?=D1=83=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 49 +++++++++++++------ resources/schema.json | 6 +-- .../configuration/InitExtensionMethod.groovy | 4 +- .../library/steps/GetExtensions.groovy | 17 +++++-- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 3d177b34..6c154c44 100644 --- a/README.md +++ b/README.md @@ -128,21 +128,6 @@ pipeline1C() * Если информационная база нужна для запуска в режиме "Предприятие" (например, для шагов `bdd` или `smoke`), то будет запущен шаг "Миграция ИБ". * После загрузки конфигурации в ИБ будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП (`initInfobase` -> `runMigration`). * Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексикографической сортировки имен файлов. -* Загрузка расширений в информационную базу - * Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. - * При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. - * Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) - * Для каждого из расширений необходимо указать: - * Имя (`extensions` -> `name`) - * Способ получения (`extensions` -> `initMethod`) - - Сейчас поддерживаются 2 варианта: - * Из исходников(`fromSource`); - * Скачать cfe-файл из интернета (`fromInternet`) - * Путь до расширения (`extensions` -> `path`) - - * В случае загрузки из исходников - необходимо указать путь к исходникам расширения - * В случае загрузки из интернета - Укажите url по которому будет скачан cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) * BDD: * Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`. * Дымовые тесты: @@ -180,3 +165,37 @@ pipeline1C() * Прямые получатели уведомлений не заполнены (`notifications` -> `email` -> `*options` -> `directRecipients`). * Telegram: * Уведомления о результатах сборки по умолчанию рассылаются всегда (`notifications` -> `telegram` -> `onAlways`, `onFailure`, `onUnstable`, `onSuccess`). + +## Конфигурирование загрузки расширений + +Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. +* При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. +* Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) + +Для загрузки расширений в информационную базу необходимо выполнить следующие шаги: + +1. Укажите имя расширения(`extensions` -> `name`). +1. Определите метод загрузки для каждого расширения(`extensions` -> `initMethod`). Поддерживаются два метода загрузки: + - `fromSource` - загрузка из исходников; + - `fromFile` - загрузка cfe-файла. +1. Укажите путь до расширения или URL для скачивания cfe-файла(`extensions` -> `path`). + - В случае загрузки из исходников - необходимо указать путь к исходникам расширения + - В случае загрузки cfe - Укажите путь по которому будет скачан cfe. На данный момент можно указывать как локальный путь, так и url для скачивания cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) + +Пример конфигурации для загрузки расширений: +```json +"initInfobase": { + "extensions": [ + { + "name": "ИмяРасширения1", + "initMethod": "fromSource", + "path": "путь/до/исходников/расширения" + }, + { + "name": "ИмяРасширения2", + "initMethod": "fromFile", + "path": "https://example.com/path/to/extension.cfe" + } + ] +} +``` \ No newline at end of file diff --git a/resources/schema.json b/resources/schema.json index 5b89ff26..f3c942c0 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -179,12 +179,12 @@ }, "initMethod": { "type": "string", - "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromInternet - скачивание скомпилированного cfe по ссылке.", - "enum": ["fromSource", "fromInternet"] + "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - использование скомпилированного cfe.", + "enum": ["fromSource", "fromFile"] }, "path": { "type": "string", - "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается ссылка на cfe-файл" + "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается путь к cfe-файлу" } } } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy index cafc8c61..fc98ad2c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy @@ -6,7 +6,7 @@ enum InitExtensionMethod { @JsonProperty("fromSource") SOURCE, - @JsonProperty("fromInternet") - INTERNET + @JsonProperty("fromFile") + FILE } \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 772b2a41..fa770ad5 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -37,8 +37,7 @@ class GetExtensions implements Serializable { String sourceDirName = "" if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" - } - else { + } else { sourceDirName = "$env.WORKSPACE" } extractConvertedExtensions(sourceDirName, steps) @@ -48,9 +47,11 @@ class GetExtensions implements Serializable { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) - } else { + } elseif (it.initMethod == InitExtensionMethod.FILE){ Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") loadExtension(it, env) + } else { + Logger.println("Неизвестный метод инициализации расширения ${it.name}") } } } @@ -70,7 +71,15 @@ class GetExtensions implements Serializable { private void loadExtension(Extension extension, def env) { String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) - localPathToExtension.copyFrom(new URL(extension.path)) + + if (extension.path.startsWith("http")) { + // If the path is a URL, download the file + localPathToExtension.copyFrom(new URL(extension.path)) + } else { + // If the path is a local file, copy the file + FilePath localFilePath = FileUtils.getFilePath(extension.path) + localPathToExtension.copyFrom(localFilePath.toURI().toURL()) + } } From ce77557e84b07cbfc507931a4d7d6edfa8f07249 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 18:55:25 +0300 Subject: [PATCH 28/73] small fix --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 83cdecef..b6614983 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -37,14 +37,14 @@ class InitInfoBaseOptions implements Serializable { Способ инициализации расширения. Поддерживается два варианта: * fromSource - инициализация расширения из исходников; - * fromInternet - скачивание скомпилированного cfe по ссылке. + * fromFile - скачивание скомпилированного cfe по ссылке. """) InitExtensionMethod initMethod = InitExtensionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. * В случае если выбран initMethod - указывается путь к исходникам расширения. - * В случае если выбран initMethod - указывается ссылка на cfe-файл + * В случае если выбран initMethod - указывается путь к cfe-файлу """) String path = "src/cfe/extension"; } From 93af3ff546932c2bf0d39d0031d109cb879bfae1 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:17:17 +0300 Subject: [PATCH 29/73] typo --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index fa770ad5..2c2f29c0 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -47,7 +47,7 @@ class GetExtensions implements Serializable { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) - } elseif (it.initMethod == InitExtensionMethod.FILE){ + } else if (it.initMethod == InitExtensionMethod.FILE){ Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") loadExtension(it, env) } else { From 626333a313688561fc1dfd1ad6f9eb07bb5d0777 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:41:30 +0300 Subject: [PATCH 30/73] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20.?= =?UTF-8?q?=20=D0=BD=D0=B0=20WORKSPACE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 2c2f29c0..5de3843c 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -48,7 +48,7 @@ class GetExtensions implements Serializable { String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) } else if (it.initMethod == InitExtensionMethod.FILE){ - Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") + Logger.println("Загрузка расширения ${it.name} из ${it.path}") loadExtension(it, env) } else { Logger.println("Неизвестный метод инициализации расширения ${it.name}") @@ -77,7 +77,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - FilePath localFilePath = FileUtils.getFilePath(extension.path) + String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath.toURI().toURL()) } } From c30558c2eb64907482d021ca9cff46bd7dc030ad Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:59:20 +0300 Subject: [PATCH 31/73] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 5de3843c..d2771d91 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -79,7 +79,7 @@ class GetExtensions implements Serializable { // If the path is a local file, copy the file String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path FilePath localFilePath = FileUtils.getFilePath(localPath) - localPathToExtension.copyFrom(localFilePath.toURI().toURL()) + localPathToExtension.copyFrom(localFilePath) } } From 2200c8d692ba4af64732e5ae9f1a8b1399150974 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:18:39 +0300 Subject: [PATCH 32/73] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20http=20=D0=BD=D0=B0=20isvalidurl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pulsar/jenkins/library/steps/GetExtensions.groovy | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index d2771d91..47bcdd82 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -72,7 +72,7 @@ class GetExtensions implements Serializable { String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) - if (extension.path.startsWith("http")) { + if (isValidUrl(extension.path)) { // If the path is a URL, download the file localPathToExtension.copyFrom(new URL(extension.path)) } else { @@ -103,4 +103,13 @@ class GetExtensions implements Serializable { steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) } } + + private static boolean isValidUrl(String url) { + try { + new URL(url) + return true + } catch (MalformedURLException e) { + return false + } + } } From 569eba57b27a6765b14474c1ec683fc1825bc35a Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:28:30 +0300 Subject: [PATCH 33/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B3=D1=80?= =?UTF-8?q?=D1=8F=D0=B7=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=85=D0=B0=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 47bcdd82..1fd343da 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -42,6 +42,10 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) + String pathToExtensionDir = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/" + FilePath localPathToExtensionDir = FileUtils.getFilePath(pathToExtensionDir) + localPathToExtensionDir.mkdirs() + config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitExtensionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -57,9 +61,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 09b885b937f6a745076aacb030c5b8f40bd0e857 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:31:27 +0300 Subject: [PATCH 34/73] =?UTF-8?q?=D0=97=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20.=20=D0=BD?= =?UTF-8?q?=D0=B0=20./?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 1fd343da..84edd897 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,7 +78,7 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } From 19951749c2b6bde1ae3542fdf1c22fcabc6ce74c Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 22:12:30 +0300 Subject: [PATCH 35/73] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 84edd897..4f497f04 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,8 +78,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path - FilePath localFilePath = FileUtils.getFilePath(localPath) + // String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + FilePath localFilePath = FileUtils.getFilePath(extension.path) localPathToExtension.copyFrom(localFilePath) } } From 923725a750cfe476c16cf5ba6b63b1c1612dad35 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:20:40 +0300 Subject: [PATCH 36/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BF=D1=83=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jenkins/library/steps/GetExtensions.groovy | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 4f497f04..bc4a7cd3 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,8 +78,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - // String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path - FilePath localFilePath = FileUtils.getFilePath(extension.path) + String localPath = getAbsolutePath(extension.path) + FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } } @@ -113,4 +113,13 @@ class GetExtensions implements Serializable { return false } } + + private static String getAbsolutePath(String path) { + // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь + if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { + return path + } else { + return "${env.WORKSPACE}/${path}" + } + } } From 316893714fefa3b5fbd7942a3f051a6551db0966 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:24:33 +0300 Subject: [PATCH 37/73] fix --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index bc4a7cd3..2a1c2b6a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,7 +78,7 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = getAbsolutePath(extension.path) + String localPath = getAbsolutePath(extension.path, env) FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } @@ -114,7 +114,7 @@ class GetExtensions implements Serializable { } } - private static String getAbsolutePath(String path) { + private static String getAbsolutePath(String path, def env) { // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { return path From 21538eaac77e07db44f3a009cbfaa7a26886d71b Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:29:45 +0300 Subject: [PATCH 38/73] small fixes --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 2a1c2b6a..cf52e90a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -99,7 +99,7 @@ class GetExtensions implements Serializable { private void extractConvertedExtensions(String sourceDirName, IStepExecutor steps) { if (config.sourceFormat == SourceFormat.EDT) { - // распакуем расширения + // usntash and unzip the edt to designer format transformation steps.unstash(EdtToDesignerFormatTransformation.EXTENSION_ZIP_STASH) steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) } @@ -115,8 +115,7 @@ class GetExtensions implements Serializable { } private static String getAbsolutePath(String path, def env) { - // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь - if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { + if (path.startsWith("/") || path.startsWith("\\") || path.matches("^[A-Za-z]:.*")) { return path } else { return "${env.WORKSPACE}/${path}" From 94887b47b4cda1818c7b54a13cb5ee7df79a5df8 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:45:05 +0300 Subject: [PATCH 39/73] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c154c44..51bd76c3 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ pipeline1C() ## Внешний вид пайплайна в интерфейсе Blue Ocean -![image](https://user-images.githubusercontent.com/1132840/140793320-d0856afe-0864-4f0e-8964-6a9d6d5822b4.png) +![image](https://github.com/firstBitMarksistskaya/jenkins-lib/assets/80944823/e34a0112-2fe5-4116-92ac-8fcca08bba43) ## Конфигурирование From aafa4a4ada3108980baa74b19bdf7cb1d6de3413 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 15 Mar 2024 13:58:50 +0300 Subject: [PATCH 40/73] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 51bd76c3..3faa810c 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ 1. Все шаги можно запустить на базе docker-образов из https://github.com/firstBitMarksistskaya/onec-docker. См. [памятку по слоям и последовательности сборки](https://github.com/firstBitMarksistskaya/onec-docker/blob/feature/first-bit/Layers.md). 1. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT. 1. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников). +1. Подготовка и загрузка расширений конфигурации из исходных файлов расширения, из cfe-файлов. 1. Запуск ИБ в режиме выполнения обработчиков обновления БСП. 1. Дополнительные шаги инициализации данных в ИБ. 1. Трансформация кода из формата конфигуратора в формат EDT. From 1aae48b3c19185a042b73e9e6129069b14fcb3f7 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 14:50:38 +0300 Subject: [PATCH 41/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D1=83.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/globalConfiguration.json | 5 +- resources/schema.json | 645 +++++++++--------- .../configuration/ConfigurationReader.groovy | 21 +- .../configuration/InitInfoBaseOptions.groovy | 25 + .../library/configuration/InitMethod.groovy | 12 + .../configuration/JobConfiguration.groovy | 9 + .../configuration/TimeoutOptions.groovy | 10 + .../EdtToDesignerFormatTransformation.groovy | 55 +- .../library/steps/GetExtensions.groovy | 96 +++ .../library/steps/LoadExtensions.groovy | 55 ++ vars/getExtensions.groovy | 10 + vars/loadExtensions.groovy | 10 + vars/pipeline1C.groovy | 26 +- 13 files changed, 665 insertions(+), 314 deletions(-) create mode 100644 src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy create mode 100644 src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy create mode 100644 src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy create mode 100644 vars/getExtensions.groovy create mode 100644 vars/loadExtensions.groovy diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index 5fcd3eb7..45936811 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -24,11 +24,13 @@ "timeout": { "smoke": 240, "bdd": 120, + "getBinaries": 60, "createInfoBase": 60, "designerToEdtFormatTransformation": 60, "edtToDesignerFormatTransformation": 60, "edtValidate": 240, "initInfoBase": 60, + "loadExtensions": 60, "resultTransformation": 10, "sonarqube": 90, "syntaxCheck": 240, @@ -37,7 +39,8 @@ "initInfobase": { "initMethod": "fromStorage", "runMigration": true, - "additionalInitializationSteps": [] + "additionalInitializationSteps": [], + "extensions": [] }, "bdd": { "vrunnerSteps": [ diff --git a/resources/schema.json b/resources/schema.json index fbeb0dd8..5b89ff26 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -1,368 +1,405 @@ { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:JobConfiguration", - "properties" : { - "v8version" : { - "type" : "string", - "description" : "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх." + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:JobConfiguration", + "properties": { + "v8version": { + "type": "string", + "description": "Версия платформы 1С:Предприятие в формате 8.3.хх.хххх." }, - "edtVersion" : { - "type" : "string", - "description" : "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64" + "edtVersion": { + "type": "string", + "description": "Версия модуля 1C:Enterprise Development Tools формате xxxx.x.x:x86_64" }, - "srcDir" : { - "type" : "string", - "description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту" + "srcDir": { + "type": "string", + "description": "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту" }, - "sourceFormat" : { - "type" : "string", - "description" : "Формат исходников конфигурации", - "enum" : [ "edt", "designer" ] + "sourceFormat": { + "type": "string", + "description": "Формат исходников конфигурации", + "enum": ["edt", "designer"] }, - "defaultBranch" : { - "type" : "string", - "description" : "Имя ветки по умолчанию. Значение по умолчанию - main." + "defaultBranch": { + "type": "string", + "description": "Имя ветки по умолчанию. Значение по умолчанию - main." }, - "secrets" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:Secrets", - "description" : "Идентификаторы сохраненных секретов", - "properties" : { - "storagePath" : { - "type" : "string", - "description" : "Путь к хранилищу конфигурации" - }, - "storage" : { - "type" : "string", - "description" : "Данные авторизации в хранилище конфигурации" - }, - "telegramChatId" : { - "type" : "string", - "description" : "Идентификатор telegram-чата для отправки уведомлений" - }, - "telegramBotToken" : { - "type" : "string", - "description" : "Токен авторизации telegram-бота для отправки уведомлений" + "secrets": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:Secrets", + "description": "Идентификаторы сохраненных секретов", + "properties": { + "storagePath": { + "type": "string", + "description": "Путь к хранилищу конфигурации" + }, + "storage": { + "type": "string", + "description": "Данные авторизации в хранилище конфигурации" + }, + "telegramChatId": { + "type": "string", + "description": "Идентификатор telegram-чата для отправки уведомлений" + }, + "telegramBotToken": { + "type": "string", + "description": "Токен авторизации telegram-бота для отправки уведомлений" } } }, - "stages" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:StageFlags", - "description" : "Включение этапов сборок", - "properties" : { - "sonarqube" : { - "type" : "boolean", - "description" : "Анализ SonarQube включен" - }, - "syntaxCheck" : { - "type" : "boolean", - "description" : "Синтаксический контроль включен" - }, - "edtValidate" : { - "type" : "boolean", - "description" : "Валидация EDT включена" - }, - "smoke" : { - "type" : "boolean", - "description" : "Дымовые тесты включены" - }, - "initSteps" : { - "type" : "boolean", - "description" : "Предварительные шаги инициализации включены" - }, - "bdd" : { - "type" : "boolean", - "description" : "Запуск BDD сценариев включен" - }, - "email" : { - "type" : "boolean", - "description" : "Выполнять рассылку результатов сборки на email" - }, - "telegram" : { - "type" : "boolean", - "description" : "Выполнять рассылку результатов сборки в telegram" + "stages": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:StageFlags", + "description": "Включение этапов сборок", + "properties": { + "sonarqube": { + "type": "boolean", + "description": "Анализ SonarQube включен" + }, + "syntaxCheck": { + "type": "boolean", + "description": "Синтаксический контроль включен" + }, + "edtValidate": { + "type": "boolean", + "description": "Валидация EDT включена" + }, + "smoke": { + "type": "boolean", + "description": "Дымовые тесты включены" + }, + "initSteps": { + "type": "boolean", + "description": "Предварительные шаги инициализации включены" + }, + "bdd": { + "type": "boolean", + "description": "Запуск BDD сценариев включен" + }, + "email": { + "type": "boolean", + "description": "Выполнять рассылку результатов сборки на email" + }, + "telegram": { + "type": "boolean", + "description": "Выполнять рассылку результатов сборки в telegram" } } }, - "timeout" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:TimeoutOptions", - "description" : "Настройка таймаутов для шагов", - "properties" : { - "edtToDesignerFormatTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "createInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "initInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "zipInfoBase" : { - "type" : "integer", - "description" : "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "designerToEdtFormatTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n " - }, - "edtValidate" : { - "type" : "integer", - "description" : "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "resultTransformation" : { - "type" : "integer", - "description" : "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n " - }, - "bdd" : { - "type" : "integer", - "description" : "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n " - }, - "syntaxCheck" : { - "type" : "integer", - "description" : "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "smoke" : { - "type" : "integer", - "description" : "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n " - }, - "sonarqube" : { - "type" : "integer", - "description" : "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n " + "timeout": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:TimeoutOptions", + "description": "Настройка таймаутов для шагов", + "properties": { + "edtToDesignerFormatTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "getBinaries": { + "type": "integer", + "description": "Таймаут шага получения бинарников, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "createInfoBase": { + "type": "integer", + "description": "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "initInfoBase": { + "type": "integer", + "description": "Таймаут шага инициализации информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "loadExtensions": { + "type": "integer", + "description": "Таймаут шага загрузки расширений в базу, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "zipInfoBase": { + "type": "integer", + "description": "Таймаут шага архивирования информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "designerToEdtFormatTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.\n По умолчанию содержит значение 60.\n " + }, + "edtValidate": { + "type": "integer", + "description": "Таймаут шага валидации EDT, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "resultTransformation": { + "type": "integer", + "description": "Таймаут шага трансформации результатов EDT, в минутах.\n По умолчанию содержит значение 10.\n " + }, + "bdd": { + "type": "integer", + "description": "Таймаут шага проверки сценариев поведения, в минутах.\n По умолчанию содержит значение 120.\n " + }, + "syntaxCheck": { + "type": "integer", + "description": "Таймаут шага синтаксического контроля, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "smoke": { + "type": "integer", + "description": "Таймаут шага дымовых тестов, в минутах.\n По умолчанию содержит значение 240.\n " + }, + "sonarqube": { + "type": "integer", + "description": "Таймаут шага статического анализа SonarQube, в минутах.\n По умолчанию содержит значение 90.\n " } } }, - "initInfobase" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions", - "description" : "Настройки шага инициализации ИБ", - "properties" : { - "initMethod" : { - "type" : "string", - "description" : "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".", - "enum" : [ "fromStorage", "fromSource", "defaultBranchFromStorage" ] - }, - "runMigration" : { - "type" : "boolean", - "description" : "Запустить миграцию ИБ" - }, - "additionalInitializationSteps" : { - "type" : "array", - "description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ", - "items" : { - "type" : "string" + "initInfobase": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions", + "description": "Настройки шага инициализации ИБ", + "properties": { + "initMethod": { + "type": "string", + "description": "\n Способ инициализации информационной базы.\n Поддерживается три варианта:\n * fromStorage - инициализация информационной базы из хранилища конфигурации;\n * fromSource - инициализация информационной базы из исходников конфигурации;\n * defaultBranchFromStorage - инициализация основной ветки из хранилища конфигурации, остальных - из исходников конфигурации.\n По умолчанию содержит значение \"fromStorage\".", + "enum": ["fromStorage", "fromSource", "defaultBranchFromStorage"] + }, + "runMigration": { + "type": "boolean", + "description": "Запустить миграцию ИБ" + }, + "additionalInitializationSteps": { + "type": "array", + "description": "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ", + "items": { + "type": "string" + } + }, + "extensions": { + "type": "array", + "description": "Массив расширений для загрузки в конфигурацию.", + "items": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions:extensions:exception", + "description": "Информация о расширении для загрузки", + "properties": { + "name": { + "type": "string", + "description": "Имя расширения с которым оно грузится в конфигурацию" + }, + "initMethod": { + "type": "string", + "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromInternet - скачивание скомпилированного cfe по ссылке.", + "enum": ["fromSource", "fromInternet"] + }, + "path": { + "type": "string", + "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается ссылка на cfe-файл" + } + } } } } }, - "bdd" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions", - "description" : "Настройки шага запуска BDD сценариев", - "properties" : { - "vrunnerSteps" : { - "type" : "array", - "description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ", - "items" : { - "type" : "string" + "bdd": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions", + "description": "Настройки шага запуска BDD сценариев", + "properties": { + "vrunnerSteps": { + "type": "array", + "description": "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ", + "items": { + "type": "string" } } } }, - "sonarqube" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SonarQubeOptions", - "description" : "Настройки анализа SonarQube", - "properties" : { - "sonarQubeInstallation" : { - "type" : "string", - "description" : "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым." - }, - "useSonarScannerFromPath" : { - "type" : "boolean", - "description" : "Использовать sonar-scanner, доступный в PATH" - }, - "sonarScannerToolName" : { - "type" : "string", - "description" : "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false." - }, - "infoBaseUpdateModuleName" : { - "type" : "string", - "description" : "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n " - }, - "branchAnalysisConfiguration" : { - "type" : "string", - "description" : "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.", - "enum" : [ "auto", "fromEnv" ] - }, - "waitForQualityGate" : { - "type" : "boolean", - "description" : "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n " + "sonarqube": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SonarQubeOptions", + "description": "Настройки анализа SonarQube", + "properties": { + "sonarQubeInstallation": { + "type": "string", + "description": "Имя настроенного SonarQube-сервера (SonarQube installations).\nЕсли настроен только один сервер, то может быть оставлено пустым." + }, + "useSonarScannerFromPath": { + "type": "boolean", + "description": "Использовать sonar-scanner, доступный в PATH" + }, + "sonarScannerToolName": { + "type": "string", + "description": "Имя настроенной утилиты sonar-scanner.\nПрименяется, если useSonarScannerFromPath установлено в false." + }, + "infoBaseUpdateModuleName": { + "type": "string", + "description": "Имя общего модуля (например, ОбновлениеИнформационнойБазыXXX), в котором указана версия библиотеки.\n Версия должна задаваться в виде присвоения `Описание.Версия = \"ваш номер версии\";`\n " + }, + "branchAnalysisConfiguration": { + "type": "string", + "description": "Вариант конфигурации branch plugin.\n Поддерживаемые варианты:\n * auto - применяется автоконфигурация sonar-scanner силами branchplugin. Так же может применяться для отключения конфигурирования, если branch plugin отсутствует;\n * fromEnv - применяется ручная конфигурация sonar-scanner на основе переменных среды.\n Значение по умолчанию: fromEnv.", + "enum": ["auto", "fromEnv"] + }, + "waitForQualityGate": { + "type": "boolean", + "description": "Ожидать состояние Quality Gate от SonarQube после загрузки анализа. По умолчанию `false`.\n Таймаут ожидания состояния равен таймауту шага.\n " } } }, - "syntaxCheck" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions", - "description" : "Настройки синтаксического контроля", - "properties" : { - "pathToJUnitReport" : { - "type" : "string", - "description" : "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n " - }, - "groupErrorsByMetadata" : { - "type" : "boolean", - "description" : "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n " - }, - "checkModes" : { - "type" : "array", - "description" : "Режимы проверки конфигурации", - "items" : { - "type" : "string" + "syntaxCheck": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SyntaxCheckOptions", + "description": "Настройки синтаксического контроля", + "properties": { + "pathToJUnitReport": { + "type": "string", + "description": "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n " + }, + "groupErrorsByMetadata": { + "type": "boolean", + "description": "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n " + }, + "checkModes": { + "type": "array", + "description": "Режимы проверки конфигурации", + "items": { + "type": "string" } }, - "exceptionFile" : { - "type" : "string", - "description" : "Путь к файлу с указанием пропускаемых ошибок.\n Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть\n Кодировка: UTF-8\n " + "exceptionFile": { + "type": "string", + "description": "Путь к файлу с указанием пропускаемых ошибок.\n Формат файла: в каждой строке файла указан текст пропускаемого исключения или его часть\n Кодировка: UTF-8\n " }, - "vrunnerSettings" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " + "vrunnerSettings": { + "type": "string", + "description": "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " } } }, - "smoke" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SmokeTestOptions", - "description" : "Настройки дымового тестирования", - "properties" : { - "vrunnerSettings" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " - }, - "xddConfigPath" : { - "type" : "string", - "description" : "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n " - }, - "publishToAllureReport" : { - "type" : "boolean", - "description" : "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n " - }, - "publishToJUnitReport" : { - "type" : "boolean", - "description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n " + "smoke": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:SmokeTestOptions", + "description": "Настройки дымового тестирования", + "properties": { + "vrunnerSettings": { + "type": "string", + "description": "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " + }, + "xddConfigPath": { + "type": "string", + "description": "Путь к конфигурационному файлу для xddTestRunner.\n По умолчанию содержит значение \"./tools/xUnitParams.json\".\n " + }, + "publishToAllureReport": { + "type": "boolean", + "description": "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n " + }, + "publishToJUnitReport": { + "type": "boolean", + "description": "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n " } } }, - "resultsTransform" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:ResultsTransformOptions", - "description" : "Настройки трансформации результатов анализа", - "properties" : { - "removeSupport" : { - "type" : "boolean", - "description" : "Фильтровать замечания по уровню поддержки модуля. По умолчанию включено." - }, - "supportLevel" : { - "type" : "integer", - "description" : "Настройка фильтрации замечаний по уровню поддержки.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n " + "resultsTransform": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:ResultsTransformOptions", + "description": "Настройки трансформации результатов анализа", + "properties": { + "removeSupport": { + "type": "boolean", + "description": "Фильтровать замечания по уровню поддержки модуля. По умолчанию включено." + }, + "supportLevel": { + "type": "integer", + "description": "Настройка фильтрации замечаний по уровню поддержки.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n " } } }, - "notifications" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:NotificationsOptions", - "description" : "Настройки рассылки результатов сборки", - "properties" : { - "email" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:EmailNotificationOptions", - "description" : "Настройки рассылки результатов сборки через email", - "properties" : { - "onAlways" : { - "type" : "boolean", - "description" : "Отправлять всегда" + "notifications": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:NotificationsOptions", + "description": "Настройки рассылки результатов сборки", + "properties": { + "email": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:EmailNotificationOptions", + "description": "Настройки рассылки результатов сборки через email", + "properties": { + "onAlways": { + "type": "boolean", + "description": "Отправлять всегда" }, - "onSuccess" : { - "type" : "boolean", - "description" : "Отправлять при успешной сборке" + "onSuccess": { + "type": "boolean", + "description": "Отправлять при успешной сборке" }, - "onFailure" : { - "type" : "boolean", - "description" : "Отправлять при падении сборки" + "onFailure": { + "type": "boolean", + "description": "Отправлять при падении сборки" }, - "onUnstable" : { - "type" : "boolean", - "description" : "Отправлять при нестабильной сборке" + "onUnstable": { + "type": "boolean", + "description": "Отправлять при нестабильной сборке" }, - "alwaysOptions" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration", - "properties" : { - "attachLog" : { - "type" : "boolean" + "alwaysOptions": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration", + "properties": { + "attachLog": { + "type": "boolean" }, - "directRecipients" : { - "type" : "array", - "items" : { - "type" : "string" + "directRecipients": { + "type": "array", + "items": { + "type": "string" } }, - "recipientProviders" : { - "type" : "array", - "items" : { - "type" : "string", - "enum" : [ "developers", "requestor", "brokenBuildSuspects", "brokenTestsSuspects" ] + "recipientProviders": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "developers", + "requestor", + "brokenBuildSuspects", + "brokenTestsSuspects" + ] } } } }, - "successOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "successOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" }, - "failureOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "failureOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" }, - "unstableOptions" : { - "type" : "object", - "$ref" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" + "unstableOptions": { + "type": "object", + "$ref": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:email:EmailExtConfiguration" } } }, - "telegram" : { - "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:TelegramNotificationOptions", - "description" : "Настройки рассылки результатов сборки через telegram", - "properties" : { - "onAlways" : { - "type" : "boolean", - "description" : "Отправлять всегда" + "telegram": { + "type": "object", + "id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:notification:TelegramNotificationOptions", + "description": "Настройки рассылки результатов сборки через telegram", + "properties": { + "onAlways": { + "type": "boolean", + "description": "Отправлять всегда" }, - "onSuccess" : { - "type" : "boolean", - "description" : "Отправлять при успешной сборке" + "onSuccess": { + "type": "boolean", + "description": "Отправлять при успешной сборке" }, - "onFailure" : { - "type" : "boolean", - "description" : "Отправлять при падении сборки" + "onFailure": { + "type": "boolean", + "description": "Отправлять при падении сборки" }, - "onUnstable" : { - "type" : "boolean", - "description" : "Отправлять при нестабильной сборке" + "onUnstable": { + "type": "boolean", + "description": "Отправлять при нестабильной сборке" } } } } }, - "logosConfig" : { - "type" : "string", - "description" : "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки" + "logosConfig": { + "type": "string", + "description": "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки" } } -} \ No newline at end of file +} diff --git a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy index a7f2c1c8..ab835753 100644 --- a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy @@ -61,6 +61,7 @@ class ConfigurationReader implements Serializable { "stageFlags", "timeoutOptions", "initInfoBaseOptions", + "extensions", "bddOptions", "sonarQubeOptions", "smokeTestOptions", @@ -113,12 +114,30 @@ class ConfigurationReader implements Serializable { @NonCPS private static void mergeInitInfoBaseOptions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { - if (objectToMerge == null || objectToMerge.additionalInitializationSteps == null) { + if (objectToMerge == null) { + return + } + mergeInitInfoBaseAdditionalInitializationSteps(baseObject, objectToMerge) + mergeInitInfoBaseExtintions(baseObject, objectToMerge) + } + + @NonCPS + private static void mergeInitInfoBaseAdditionalInitializationSteps(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + if (objectToMerge.additionalInitializationSteps == null) { return } baseObject.additionalInitializationSteps = objectToMerge.additionalInitializationSteps.clone() } + + @NonCPS + private static void mergeInitInfoBaseExtintions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + if (objectToMerge.extensions == null) { + return + } + baseObject.extensions = objectToMerge.extensions.clone() + } + @NonCPS private static void mergeBddOptions(BddOptions baseObject, BddOptions objectToMerge) { if (objectToMerge == null || objectToMerge.vrunnerSteps == null) { diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index f0874a60..3031e548 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -25,6 +25,30 @@ class InitInfoBaseOptions implements Serializable { """) String[] additionalInitializationSteps + @JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.") + Extension[] extensions; + + @JsonIgnoreProperties(ignoreUnknown = true) + static class Extension implements Serializable { + @JsonPropertyDescription("Имя расширения с которым оно грузится в конфигурацию") + String name; + + @JsonPropertyDescription(""" + Способ инициализации расширения. + Поддерживается два варианта: + * fromSource - инициализация расширения из исходников; + * fromInternet - скачивание скомпилированного cfe по ссылке. + """) + InitMethod initMethod; + + @JsonPropertyDescription(""" + Хранит в себе путь к расширению. + * В случае если выбран initMethod - указывается путь к исходникам расширения. + * В случае если выбран initMethod - указывается ссылка на cfe-файл + """) + String path; + } + @Override @NonCPS String toString() { @@ -32,6 +56,7 @@ class InitInfoBaseOptions implements Serializable { "initMethod=" + initMethod + ", runMigration=" + runMigration + ", additionalInitializationSteps=" + additionalInitializationSteps + + ", extensions=" + extensions + '}'; } } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy new file mode 100644 index 00000000..4473c598 --- /dev/null +++ b/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy @@ -0,0 +1,12 @@ +package ru.pulsar.jenkins.library.configuration + +import com.fasterxml.jackson.annotation.JsonProperty + +enum InitMethod { + @JsonProperty("fromSource") + SOURCE, + + @JsonProperty("fromInternet") + INTERNET + +} \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy index 75932fd9..101f3dac 100644 --- a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy @@ -100,6 +100,15 @@ class JobConfiguration implements Serializable { (initMethod == InitInfoBaseMethod.DEFAULT_BRANCH_FROM_STORAGE && branchName != defaultBranch) } + boolean needLoadExtensions() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + def env = steps.env(); + String branchName = env.BRANCH_NAME; + def extensions = initInfoBaseOptions.extensions + + return extensions.length != 0 + } + String v8AgentLabel() { return v8version } diff --git a/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy index 4def6ec1..612dc2b6 100644 --- a/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy @@ -11,6 +11,11 @@ class TimeoutOptions implements Serializable { ''') Integer edtToDesignerFormatTransformation + @JsonPropertyDescription('''Таймаут шага получения бинарников, в минутах. + По умолчанию содержит значение 60. + ''') + Integer getBinaries + @JsonPropertyDescription('''Таймаут шага создания информационной базы, в минутах. По умолчанию содержит значение 60. ''') @@ -21,6 +26,11 @@ class TimeoutOptions implements Serializable { ''') Integer initInfoBase + @JsonPropertyDescription('''Таймаут шага загрузки расширений в базу, в минутах. + По умолчанию содержит значение 60. + ''') + Integer loadExtensions + @JsonPropertyDescription('''Таймаут шага архивирования информационной базы, в минутах. По умолчанию содержит значение 60. ''') diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 2dfa3908..5b560887 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,6 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat +import ru.pulsar.jenkins.library.configuration.InitMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils @@ -15,6 +16,9 @@ class EdtToDesignerFormatTransformation implements Serializable { public static final String CONFIGURATION_DIR = 'build/cfg' public static final String CONFIGURATION_ZIP = 'build/cfg.zip' public static final String CONFIGURATION_ZIP_STASH = 'cfg-zip' + public static final String EXTENSION_DIR = 'build/cfe_src' + public static final String EXTENSION_ZIP = 'build/cfe_src.zip' + public static final String EXTENSION_ZIP_STASH = 'cfe_src-zip' private final JobConfiguration config; @@ -34,18 +38,29 @@ class EdtToDesignerFormatTransformation implements Serializable { def env = steps.env(); - def srcDir = config.srcDir - def projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") - def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") - def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + String srcDir = config.srcDir + String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") + + String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf") + String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") + String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + + + String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR") def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir) - steps.deleteDir(configurationRoot) - Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора") + transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing) + transformExtensions(steps, workspaceDir, extensionRoot, edtVersionForRing) + } - def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\"" + private void transformConfiguration(IStepExecutor steps, String projectDir, String projectWorkspaceDir, String configurationRoot, String edtVersionForRing) { + + Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора") + steps.deleteDir(configurationRoot) + + def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$projectWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\"" steps.ringCommand(ringCommand) @@ -53,4 +68,30 @@ class EdtToDesignerFormatTransformation implements Serializable { steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP) } + private void transformExtensions(IStepExecutor steps, String workspaceDir, String extensionRoot, String edtVersionForRing) { + steps.deleteDir(extensionRoot) + + config.initInfoBaseOptions.extensions.each { + + if (it.initMethod != InitMethod.SOURCE) { + return + } + + Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора") + + def env = steps.env(); + def projectDir = FileUtils.getFilePath("$env.WORKSPACE/${it.path}") + def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}") + + def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\"" + + def ringOpts = [Constants.DEFAULT_RING_OPTS] + steps.withEnv(ringOpts) { + steps.cmd(ringCommand) + } + } + steps.zip(EXTENSION_DIR, EXTENSION_ZIP) + steps.stash(EXTENSION_ZIP_STASH, EXTENSION_ZIP) + } + } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy new file mode 100644 index 00000000..b891f4cb --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -0,0 +1,96 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.configuration.SourceFormat +import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Logger +import ru.pulsar.jenkins.library.utils.VRunner +import hudson.FilePath +import ru.pulsar.jenkins.library.utils.FileUtils + +class GetExtensions implements Serializable { + + public static final String EXTENSIONS_OUT_DIR = 'build/out/cfe' + + private final JobConfiguration config; + + GetExtensions(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + def env = steps.env() + + steps.installLocalDependencies(); + + + String vrunnerPath = initVRunnerPath(); + + + Logger.println("Сборка расширений") + + String sourceDirName = "" + + if (config.sourceFormat == SourceFormat.EDT) { + sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" + } + extractConvertedExtensions(sourceDirName, steps) + + config.initInfoBaseOptions.extensions.each { + if (it.initMethod == InitMethod.SOURCE) { + Logger.println("Сборка расширения ${it.name} из исходников") + String srcDir = getSrcDir(it, sourceDirName) + buildExtension(it, srcDir, vrunnerPath, steps) + } else { + Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") + loadExtension(it, env) + } + } + } + + private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА + + def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" + List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] + steps.withEnv(logosConfig) { + VRunner.exec(compileExtCommand) + } + } + + private void loadExtension(Extension extension, def env) { + String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" + FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) + localPathToExtension.copyFrom(new URL(extension.path)) + } + + + private String initVRunnerPath() { + return VRunner.getVRunnerPath() + } + + private String getSrcDir(Extension extension, String sourceDirName) { + if (config.sourceFormat == SourceFormat.EDT) { + return "${sourceDirName}/${extension.name}" + } else { + return "${sourceDirName}/${extension.path}" + } + } + + private void extractConvertedExtensions(String sourceDirName, IStepExecutor steps) { + if (config.sourceFormat == SourceFormat.EDT) { + // распакуем расширения + steps.unstash(EdtToDesignerFormatTransformation.EXTENSION_ZIP_STASH) + steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) + } + } +} diff --git a/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy new file mode 100644 index 00000000..53be96c6 --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy @@ -0,0 +1,55 @@ +package ru.pulsar.jenkins.library.steps + +import ru.pulsar.jenkins.library.IStepExecutor +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.utils.Logger +import ru.pulsar.jenkins.library.utils.VRunner +import hudson.FilePath +import ru.pulsar.jenkins.library.utils.FileUtils + +class LoadExtensions implements Serializable { + + private final JobConfiguration config; + + LoadExtensions(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + def env = steps.env(); + String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR" + + String vrunnerPath = VRunner.getVRunnerPath(); + + config.initInfoBaseOptions.extensions.each { + Logger.println("Установим расширение ${it.name}") + loadExtension(it, vrunnerPath, steps, cfeDir) + } + } + + private void loadExtension (Extension extension, String vrunnerPath, IStepExecutor steps, String cfeDir) { + + String pathToExt = "$cfeDir/${extension.name}.cfe" + FilePath localPathToExt = FileUtils.getFilePath(pathToExt) + + // Команда загрузки расширения + String loadCommand = vrunnerPath + ' run --command "Путь=' + localPathToExt + ';ЗавершитьРаботуСистемы;" --execute ' + String executeParameter = '$runnerRoot/epf/ЗагрузитьРасширениеВРежимеПредприятия.epf' + if (steps.isUnix()) { + executeParameter = '\\' + executeParameter + } + loadCommand += executeParameter + loadCommand += ' --ibconnection "/F./build/ib"' + + List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] + steps.withEnv(logosConfig) { + VRunner.exec(loadCommand) + } + } +} diff --git a/vars/getExtensions.groovy b/vars/getExtensions.groovy new file mode 100644 index 00000000..12a79c82 --- /dev/null +++ b/vars/getExtensions.groovy @@ -0,0 +1,10 @@ +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.GetExtensions + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def getExtensions = new GetExtensions(config) + getExtensions.run() +} \ No newline at end of file diff --git a/vars/loadExtensions.groovy b/vars/loadExtensions.groovy new file mode 100644 index 00000000..78e8b766 --- /dev/null +++ b/vars/loadExtensions.groovy @@ -0,0 +1,10 @@ +import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.LoadExtensions + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def loadExtensions = new LoadExtensions(config) + loadExtensions.run() +} \ No newline at end of file diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 89faa801..23785161 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -76,10 +76,22 @@ void call() { } stages { + stage('Сборка из исходников'){ + when { + expression { config.needLoadExtensions() } + } + steps { + timeout(time: config.timeoutOptions.getBinaries, unit: TimeUnit.MINUTES) { + createDir('build/out/cfe') + // Соберем или загрузим cfe из исходников и положим их в папку build/out/cfe + getExtensions config + } + } + } stage('Создание ИБ') { steps { timeout(time: config.timeoutOptions.createInfoBase, unit: TimeUnit.MINUTES) { - createDir('build/out') + createDir('build/out/') script { if (config.infoBaseFromFiles()) { @@ -107,6 +119,18 @@ void call() { } } + stage('Загрузка расширений в конфигурацию'){ + when { + beforeAgent true + expression { config.needLoadExtensions() } + } + steps { + timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) { + loadExtensions config + } + } + } + stage('Архивация ИБ') { steps { timeout(time: config.timeoutOptions.zipInfoBase, unit: TimeUnit.MINUTES) { From 0bed55401ddb5a426732d4c6e5c4ce8cec7d6ead Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:03:41 +0300 Subject: [PATCH 42/73] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=B8=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.md b/README.md index 0dd12c5c..3d177b34 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,21 @@ pipeline1C() * Если информационная база нужна для запуска в режиме "Предприятие" (например, для шагов `bdd` или `smoke`), то будет запущен шаг "Миграция ИБ". * После загрузки конфигурации в ИБ будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП (`initInfobase` -> `runMigration`). * Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексикографической сортировки имен файлов. +* Загрузка расширений в информационную базу + * Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. + * При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. + * Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) + * Для каждого из расширений необходимо указать: + * Имя (`extensions` -> `name`) + * Способ получения (`extensions` -> `initMethod`) + + Сейчас поддерживаются 2 варианта: + * Из исходников(`fromSource`); + * Скачать cfe-файл из интернета (`fromInternet`) + * Путь до расширения (`extensions` -> `path`) + + * В случае загрузки из исходников - необходимо указать путь к исходникам расширения + * В случае загрузки из интернета - Укажите url по которому будет скачан cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) * BDD: * Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`. * Дымовые тесты: From dc1c14de0fce1ce1da33ef5e60c283a1de7c18be Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:21:41 +0300 Subject: [PATCH 43/73] =?UTF-8?q?=D0=94=D0=BB=D1=8F=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2=20=D0=BD=D0=BE=20=D0=BD=D0=B0=D1=83=D0=B3?= =?UTF-8?q?=D0=B0=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- jenkinsResources/core-version.txt | 2 +- test/integration/groovy/jobConfigurationTest.groovy | 1 + test/integration/resources/jobConfiguration.json | 7 ++++++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0d3667d7..2de8c201 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,7 +52,7 @@ dependencies { testImplementation("org.slf4j", "slf4j-api", slf4jVersion) testImplementation("org.slf4j", "slf4j-simple", slf4jVersion) - + // integration-tests integrationTestImplementation("org.spockframework", "spock-core", spockVersion) integrationTestImplementation("org.codehaus.groovy", "groovy-all", groovyVersion) diff --git a/jenkinsResources/core-version.txt b/jenkinsResources/core-version.txt index b8b8d1ea..efd56a90 100644 --- a/jenkinsResources/core-version.txt +++ b/jenkinsResources/core-version.txt @@ -1 +1 @@ -2.246 \ No newline at end of file +2.441 \ No newline at end of file diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index e3ded0b8..7418bccb 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,5 +74,6 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) + rule.assertLogContains("path='/src/cfe/тест'", run) } } \ No newline at end of file diff --git a/test/integration/resources/jobConfiguration.json b/test/integration/resources/jobConfiguration.json index e027b9f9..38b207a9 100644 --- a/test/integration/resources/jobConfiguration.json +++ b/test/integration/resources/jobConfiguration.json @@ -1,6 +1,11 @@ { "v8version": "8.3.12.1500", "initInfobase": { - "initMethod": "fromSource" + "initMethod": "fromSource", + "extensions": [{ + "name": "Тест", + "initMethod": "fromSource", + "path": "/src/cfe/тест" + }] } } \ No newline at end of file From 819b19b53e7668941484a563f9315e2b3f6fb031 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 19 Jan 2024 15:38:47 +0300 Subject: [PATCH 44/73] add filter --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index b891f4cb..ac8d5330 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -41,6 +41,9 @@ class GetExtensions implements Serializable { if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" } + else { + sourceDirName = "$env.WORKSPACE" + } extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { From 7d16c50295fba708289f45582353c6021b20cc24 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:05:48 +0300 Subject: [PATCH 45/73] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3d177b34..cea2670c 100644 --- a/README.md +++ b/README.md @@ -157,6 +157,7 @@ pipeline1C() * Выгрузка результатов в формат `jUnit` осуществляется в файл `./build/out/jUnit/syntax.xml` (`syntaxCheck` -> `pathToJUnitReport`). * Если в репозитории существует файл `./tools/syntax-check-exception-file.txt`, то команде запуска синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр `--exception-file`) (`syntaxCheck` -> `exceptionFile`). * Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (`syntaxCheck` -> `checkModes`). + * Если вы хотите провести синтаксический контроль для расширения воспользуйтесь режимом проверки `-Extension <Имя расширения>`, или же `-AllExtensions` для проверки всех расширений. * Трансформация результатов валидации EDT: * По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`). * Анализ SonarQube: From 276c54a4ee66c902ee733f85376ee07c877ea69f Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:30:18 +0300 Subject: [PATCH 46/73] =?UTF-8?q?=D0=9F=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D1=85=D0=B0=D0=BA=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index ac8d5330..422985f7 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -30,14 +30,11 @@ class GetExtensions implements Serializable { steps.installLocalDependencies(); - String vrunnerPath = initVRunnerPath(); - Logger.println("Сборка расширений") String sourceDirName = "" - if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" } @@ -46,6 +43,8 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) + steps.createDir(EXTENSIONS_OUT_DIR) + config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -59,9 +58,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 0049cd6f81f61974bacb229ef88d0b72cbf86db2 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:39:17 +0300 Subject: [PATCH 47/73] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=B9=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82,=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D1=83=D1=82=D1=8C,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 422985f7..772a8258 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -43,7 +43,7 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) - steps.createDir(EXTENSIONS_OUT_DIR) + steps.createDir("${env.WORKSPACE}/${EXTENSIONS_OUT_DIR}") config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { @@ -58,6 +58,9 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 3fcd5ceb0f29b86731f9c1db2e41f95fd3d12f10 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:53:50 +0300 Subject: [PATCH 48/73] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=B9=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82,=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BF=D1=83=D1=82=D1=8C,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8C=D0=BD=D1=8B=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 772a8258..91bbe28a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -58,9 +58,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 3b3593b4d82f82a480a34723e993cf2e6ee8f2b6 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 22 Jan 2024 07:56:55 +0300 Subject: [PATCH 49/73] =?UTF-8?q?=D0=9D=D0=B5=D1=82,=20=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=20=D1=82=D0=BE=D0=B6=D0=B5=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 91bbe28a..42f37ec5 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -43,8 +43,6 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) - steps.createDir("${env.WORKSPACE}/${EXTENSIONS_OUT_DIR}") - config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -58,6 +56,9 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { + // ТУТ ГРЯЗНЫЙ ХАК + VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") + // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 4f353a3a5852b4d41f567b4994f3213edec316a5 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 18:50:55 +0300 Subject: [PATCH 50/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jenkinsResources/core-version.txt | 2 +- .../jenkins/library/configuration/ConfigurationReader.groovy | 4 ++-- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jenkinsResources/core-version.txt b/jenkinsResources/core-version.txt index efd56a90..b8b8d1ea 100644 --- a/jenkinsResources/core-version.txt +++ b/jenkinsResources/core-version.txt @@ -1 +1 @@ -2.441 \ No newline at end of file +2.246 \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy index ab835753..395da027 100644 --- a/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/ConfigurationReader.groovy @@ -118,7 +118,7 @@ class ConfigurationReader implements Serializable { return } mergeInitInfoBaseAdditionalInitializationSteps(baseObject, objectToMerge) - mergeInitInfoBaseExtintions(baseObject, objectToMerge) + mergeInitInfoBaseExtensions(baseObject, objectToMerge) } @NonCPS @@ -131,7 +131,7 @@ class ConfigurationReader implements Serializable { @NonCPS - private static void mergeInitInfoBaseExtintions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { + private static void mergeInitInfoBaseExtensions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) { if (objectToMerge.extensions == null) { return } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 3031e548..aa1a40ca 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -30,7 +30,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { - @JsonPropertyDescription("Имя расширения с которым оно грузится в конфигурацию") + @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") String name; @JsonPropertyDescription(""" From c0f4ab872f9f0ab03ec28bfb7beceffaf5342b91 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 18:53:14 +0300 Subject: [PATCH 51/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../steps/EdtToDesignerFormatTransformation.groovy | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 5b560887..cc974aeb 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -39,14 +39,14 @@ class EdtToDesignerFormatTransformation implements Serializable { def env = steps.env(); String srcDir = config.srcDir - String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") + String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote() - String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf") - String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") - String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote() + String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir").getRemote() + String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR").getRemote() - String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR") + String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR").getRemote() def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir) From 7714b4bb51f192a899148fe76cd753160715ef2a Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:11:15 +0300 Subject: [PATCH 52/73] =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B5=D0=B9=D0=BC=20in?= =?UTF-8?q?itMethod=20->=20InitExtentionMethod=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8=20=D0=B8=D0=BD=D1=84?= =?UTF-8?q?=D1=83=20=D0=BF=D0=BE=20=D1=81=D0=B8=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=81=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D1=8E=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - .../{InitMethod.groovy => InitExtentionMethod.groovy} | 2 +- .../library/configuration/InitInfoBaseOptions.groovy | 6 +++--- .../jenkins/library/configuration/JobConfiguration.groovy | 7 +------ 4 files changed, 5 insertions(+), 11 deletions(-) rename src/ru/pulsar/jenkins/library/configuration/{InitMethod.groovy => InitExtentionMethod.groovy} (87%) diff --git a/README.md b/README.md index cea2670c..3d177b34 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,6 @@ pipeline1C() * Выгрузка результатов в формат `jUnit` осуществляется в файл `./build/out/jUnit/syntax.xml` (`syntaxCheck` -> `pathToJUnitReport`). * Если в репозитории существует файл `./tools/syntax-check-exception-file.txt`, то команде запуска синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр `--exception-file`) (`syntaxCheck` -> `exceptionFile`). * Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (`syntaxCheck` -> `checkModes`). - * Если вы хотите провести синтаксический контроль для расширения воспользуйтесь режимом проверки `-Extension <Имя расширения>`, или же `-AllExtensions` для проверки всех расширений. * Трансформация результатов валидации EDT: * По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры `resultsTransform` -> `removeSupport` и `resultsTransform` -> `supportLevel`). * Анализ SonarQube: diff --git a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy similarity index 87% rename from src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy rename to src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy index 4473c598..4b31eb5b 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy @@ -2,7 +2,7 @@ package ru.pulsar.jenkins.library.configuration import com.fasterxml.jackson.annotation.JsonProperty -enum InitMethod { +enum InitExtentionMethod { @JsonProperty("fromSource") SOURCE, diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index aa1a40ca..88f51b4c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -31,7 +31,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") - String name; + String name = "extention"; @JsonPropertyDescription(""" Способ инициализации расширения. @@ -39,14 +39,14 @@ class InitInfoBaseOptions implements Serializable { * fromSource - инициализация расширения из исходников; * fromInternet - скачивание скомпилированного cfe по ссылке. """) - InitMethod initMethod; + InitExtentionMethod initMethod = InitExtentionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. * В случае если выбран initMethod - указывается путь к исходникам расширения. * В случае если выбран initMethod - указывается ссылка на cfe-файл """) - String path; + String path = "src/cfe/extention"; } @Override diff --git a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy index 101f3dac..8c1d331c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/JobConfiguration.groovy @@ -101,12 +101,7 @@ class JobConfiguration implements Serializable { } boolean needLoadExtensions() { - IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() - def env = steps.env(); - String branchName = env.BRANCH_NAME; - def extensions = initInfoBaseOptions.extensions - - return extensions.length != 0 + return initInfoBaseOptions.extensions.length != 0 } String v8AgentLabel() { From d9c273ab8178fccbed62c1d2fab0cb4f45febb29 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:16:34 +0300 Subject: [PATCH 53/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 4 ++-- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index cc974aeb..f42797a6 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,7 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitExtentionMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils @@ -73,7 +73,7 @@ class EdtToDesignerFormatTransformation implements Serializable { config.initInfoBaseOptions.extensions.each { - if (it.initMethod != InitMethod.SOURCE) { + if (it.initMethod != InitExtentionMethod.SOURCE) { return } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 42f37ec5..8e19a8c9 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -3,7 +3,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitMethod +import ru.pulsar.jenkins.library.configuration.InitExtentionMethod import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Logger @@ -44,7 +44,7 @@ class GetExtensions implements Serializable { extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { - if (it.initMethod == InitMethod.SOURCE) { + if (it.initMethod == InitExtentionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) From c36861e7be4f795fba1b366ec480c799a0083bf5 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Tue, 20 Feb 2024 19:29:50 +0300 Subject: [PATCH 54/73] =?UTF-8?q?=D0=A1=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BA=D0=B0=D0=B2=D1=8B=D1=87=D0=BA=D0=B8=20=D0=B2=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/integration/groovy/jobConfigurationTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index 7418bccb..f88ce732 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,6 +74,6 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) - rule.assertLogContains("path='/src/cfe/тест'", run) + rule.assertLogContains("path=\"/src/cfe/тест\"", run) } } \ No newline at end of file From 870d537c97d9f88cfaa8350409d33e356ead2210 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Mon, 26 Feb 2024 14:17:23 +0300 Subject: [PATCH 55/73] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B5=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{InitExtentionMethod.groovy => InitExtensionMethod.groovy} | 2 +- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- .../library/steps/EdtToDesignerFormatTransformation.groovy | 4 ++-- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- test/integration/groovy/jobConfigurationTest.groovy | 1 - 5 files changed, 6 insertions(+), 7 deletions(-) rename src/ru/pulsar/jenkins/library/configuration/{InitExtentionMethod.groovy => InitExtensionMethod.groovy} (87%) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy similarity index 87% rename from src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy rename to src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy index 4b31eb5b..cafc8c61 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitExtentionMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy @@ -2,7 +2,7 @@ package ru.pulsar.jenkins.library.configuration import com.fasterxml.jackson.annotation.JsonProperty -enum InitExtentionMethod { +enum InitExtensionMethod { @JsonProperty("fromSource") SOURCE, diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 88f51b4c..860923ae 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -39,7 +39,7 @@ class InitInfoBaseOptions implements Serializable { * fromSource - инициализация расширения из исходников; * fromInternet - скачивание скомпилированного cfe по ссылке. """) - InitExtentionMethod initMethod = InitExtentionMethod.SOURCE; + InitExtensionMethod initMethod = InitExtensionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index f42797a6..3043cf0c 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -4,7 +4,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitExtentionMethod +import ru.pulsar.jenkins.library.configuration.InitExtensionMethod import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.EDT import ru.pulsar.jenkins.library.utils.FileUtils @@ -73,7 +73,7 @@ class EdtToDesignerFormatTransformation implements Serializable { config.initInfoBaseOptions.extensions.each { - if (it.initMethod != InitExtentionMethod.SOURCE) { + if (it.initMethod != InitExtensionMethod.SOURCE) { return } diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 8e19a8c9..772b2a41 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -3,7 +3,7 @@ package ru.pulsar.jenkins.library.steps import ru.pulsar.jenkins.library.IStepExecutor import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.SourceFormat -import ru.pulsar.jenkins.library.configuration.InitExtentionMethod +import ru.pulsar.jenkins.library.configuration.InitExtensionMethod import ru.pulsar.jenkins.library.configuration.InitInfoBaseOptions.Extension import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Logger @@ -44,7 +44,7 @@ class GetExtensions implements Serializable { extractConvertedExtensions(sourceDirName, steps) config.initInfoBaseOptions.extensions.each { - if (it.initMethod == InitExtentionMethod.SOURCE) { + if (it.initMethod == InitExtensionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) diff --git a/test/integration/groovy/jobConfigurationTest.groovy b/test/integration/groovy/jobConfigurationTest.groovy index f88ce732..e3ded0b8 100644 --- a/test/integration/groovy/jobConfigurationTest.groovy +++ b/test/integration/groovy/jobConfigurationTest.groovy @@ -74,6 +74,5 @@ class jobConfigurationTest { rule.assertLogContains("v8version='8.3.12.1500'", run) rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run) rule.assertLogContains("initMethod=FROM_SOURCE", run) - rule.assertLogContains("path=\"/src/cfe/тест\"", run) } } \ No newline at end of file From 544e6dafc687b62375d04a39512469c6b06bf9dd Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:55:56 +0300 Subject: [PATCH 56/73] Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy Co-authored-by: Nikita Fedkin --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 860923ae..1aa2e677 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -31,7 +31,7 @@ class InitInfoBaseOptions implements Serializable { @JsonIgnoreProperties(ignoreUnknown = true) static class Extension implements Serializable { @JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.") - String name = "extention"; + String name = "extension"; @JsonPropertyDescription(""" Способ инициализации расширения. From 080594e41f74d77abe21e7be01834be4ab09f307 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:56:09 +0300 Subject: [PATCH 57/73] Update vars/pipeline1C.groovy Co-authored-by: Nikita Fedkin --- vars/pipeline1C.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 23785161..f5d8ee8a 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -76,7 +76,7 @@ void call() { } stages { - stage('Сборка из исходников'){ + stage('Сборка расширений из исходников') { when { expression { config.needLoadExtensions() } } From 9f81e09faa108100ad94a0151f62271ad6703080 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 12:57:28 +0300 Subject: [PATCH 58/73] Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy Co-authored-by: Nikita Fedkin --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 1aa2e677..83cdecef 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -46,7 +46,7 @@ class InitInfoBaseOptions implements Serializable { * В случае если выбран initMethod - указывается путь к исходникам расширения. * В случае если выбран initMethod - указывается ссылка на cfe-файл """) - String path = "src/cfe/extention"; + String path = "src/cfe/extension"; } @Override From 3d51a22f3cf414bc247e747fd94baa5e49c483e2 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 18:51:06 +0300 Subject: [PATCH 59/73] =?UTF-8?q?=D0=A4=D0=BE=D1=80=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5.=20=D0=A3?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B8.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BA=D0=B0=D1=87?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BF?= =?UTF-8?q?=D1=83=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 49 +++++++++++++------ resources/schema.json | 6 +-- .../configuration/InitExtensionMethod.groovy | 4 +- .../library/steps/GetExtensions.groovy | 17 +++++-- 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 3d177b34..6c154c44 100644 --- a/README.md +++ b/README.md @@ -128,21 +128,6 @@ pipeline1C() * Если информационная база нужна для запуска в режиме "Предприятие" (например, для шагов `bdd` или `smoke`), то будет запущен шаг "Миграция ИБ". * После загрузки конфигурации в ИБ будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП (`initInfobase` -> `runMigration`). * Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексикографической сортировки имен файлов. -* Загрузка расширений в информационную базу - * Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. - * При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. - * Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) - * Для каждого из расширений необходимо указать: - * Имя (`extensions` -> `name`) - * Способ получения (`extensions` -> `initMethod`) - - Сейчас поддерживаются 2 варианта: - * Из исходников(`fromSource`); - * Скачать cfe-файл из интернета (`fromInternet`) - * Путь до расширения (`extensions` -> `path`) - - * В случае загрузки из исходников - необходимо указать путь к исходникам расширения - * В случае загрузки из интернета - Укажите url по которому будет скачан cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) * BDD: * Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`. * Дымовые тесты: @@ -180,3 +165,37 @@ pipeline1C() * Прямые получатели уведомлений не заполнены (`notifications` -> `email` -> `*options` -> `directRecipients`). * Telegram: * Уведомления о результатах сборки по умолчанию рассылаются всегда (`notifications` -> `telegram` -> `onAlways`, `onFailure`, `onUnstable`, `onSuccess`). + +## Конфигурирование загрузки расширений + +Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы. +* При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация. +* Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`) + +Для загрузки расширений в информационную базу необходимо выполнить следующие шаги: + +1. Укажите имя расширения(`extensions` -> `name`). +1. Определите метод загрузки для каждого расширения(`extensions` -> `initMethod`). Поддерживаются два метода загрузки: + - `fromSource` - загрузка из исходников; + - `fromFile` - загрузка cfe-файла. +1. Укажите путь до расширения или URL для скачивания cfe-файла(`extensions` -> `path`). + - В случае загрузки из исходников - необходимо указать путь к исходникам расширения + - В случае загрузки cfe - Укажите путь по которому будет скачан cfe. На данный момент можно указывать как локальный путь, так и url для скачивания cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe) + +Пример конфигурации для загрузки расширений: +```json +"initInfobase": { + "extensions": [ + { + "name": "ИмяРасширения1", + "initMethod": "fromSource", + "path": "путь/до/исходников/расширения" + }, + { + "name": "ИмяРасширения2", + "initMethod": "fromFile", + "path": "https://example.com/path/to/extension.cfe" + } + ] +} +``` \ No newline at end of file diff --git a/resources/schema.json b/resources/schema.json index 5b89ff26..f3c942c0 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -179,12 +179,12 @@ }, "initMethod": { "type": "string", - "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromInternet - скачивание скомпилированного cfe по ссылке.", - "enum": ["fromSource", "fromInternet"] + "description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - использование скомпилированного cfe.", + "enum": ["fromSource", "fromFile"] }, "path": { "type": "string", - "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается ссылка на cfe-файл" + "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается путь к cfe-файлу" } } } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy index cafc8c61..fc98ad2c 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitExtensionMethod.groovy @@ -6,7 +6,7 @@ enum InitExtensionMethod { @JsonProperty("fromSource") SOURCE, - @JsonProperty("fromInternet") - INTERNET + @JsonProperty("fromFile") + FILE } \ No newline at end of file diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 772b2a41..fa770ad5 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -37,8 +37,7 @@ class GetExtensions implements Serializable { String sourceDirName = "" if (config.sourceFormat == SourceFormat.EDT) { sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" - } - else { + } else { sourceDirName = "$env.WORKSPACE" } extractConvertedExtensions(sourceDirName, steps) @@ -48,9 +47,11 @@ class GetExtensions implements Serializable { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) - } else { + } elseif (it.initMethod == InitExtensionMethod.FILE){ Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") loadExtension(it, env) + } else { + Logger.println("Неизвестный метод инициализации расширения ${it.name}") } } } @@ -70,7 +71,15 @@ class GetExtensions implements Serializable { private void loadExtension(Extension extension, def env) { String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) - localPathToExtension.copyFrom(new URL(extension.path)) + + if (extension.path.startsWith("http")) { + // If the path is a URL, download the file + localPathToExtension.copyFrom(new URL(extension.path)) + } else { + // If the path is a local file, copy the file + FilePath localFilePath = FileUtils.getFilePath(extension.path) + localPathToExtension.copyFrom(localFilePath.toURI().toURL()) + } } From 5d58803c4d6f1bd0b4f364a34c542acb6115f007 Mon Sep 17 00:00:00 2001 From: Ivanov Egor <80944823+Segate-ekb@users.noreply.github.com> Date: Thu, 14 Mar 2024 13:00:02 +0300 Subject: [PATCH 60/73] Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ребейз из девелопа --- .../library/steps/EdtToDesignerFormatTransformation.groovy | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index 3043cf0c..672168ff 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -85,10 +85,7 @@ class EdtToDesignerFormatTransformation implements Serializable { def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\"" - def ringOpts = [Constants.DEFAULT_RING_OPTS] - steps.withEnv(ringOpts) { - steps.cmd(ringCommand) - } + steps.ringCommand(ringCommand) } steps.zip(EXTENSION_DIR, EXTENSION_ZIP) steps.stash(EXTENSION_ZIP_STASH, EXTENSION_ZIP) From 405ab767717a5569900f5b29b6f6538a5f1e229d Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 18:55:25 +0300 Subject: [PATCH 61/73] small fix --- .../jenkins/library/configuration/InitInfoBaseOptions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 83cdecef..b6614983 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -37,14 +37,14 @@ class InitInfoBaseOptions implements Serializable { Способ инициализации расширения. Поддерживается два варианта: * fromSource - инициализация расширения из исходников; - * fromInternet - скачивание скомпилированного cfe по ссылке. + * fromFile - скачивание скомпилированного cfe по ссылке. """) InitExtensionMethod initMethod = InitExtensionMethod.SOURCE; @JsonPropertyDescription(""" Хранит в себе путь к расширению. * В случае если выбран initMethod - указывается путь к исходникам расширения. - * В случае если выбран initMethod - указывается ссылка на cfe-файл + * В случае если выбран initMethod - указывается путь к cfe-файлу """) String path = "src/cfe/extension"; } From 0f758ce9503762afbb346ee5a8b0b340cdc73e1a Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:17:17 +0300 Subject: [PATCH 62/73] typo --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index fa770ad5..2c2f29c0 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -47,7 +47,7 @@ class GetExtensions implements Serializable { Logger.println("Сборка расширения ${it.name} из исходников") String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) - } elseif (it.initMethod == InitExtensionMethod.FILE){ + } else if (it.initMethod == InitExtensionMethod.FILE){ Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") loadExtension(it, env) } else { From 9316311dffffa25f859c4f238a06abc1d8f8cead Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:41:30 +0300 Subject: [PATCH 63/73] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20.?= =?UTF-8?q?=20=D0=BD=D0=B0=20WORKSPACE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 2c2f29c0..5de3843c 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -48,7 +48,7 @@ class GetExtensions implements Serializable { String srcDir = getSrcDir(it, sourceDirName) buildExtension(it, srcDir, vrunnerPath, steps) } else if (it.initMethod == InitExtensionMethod.FILE){ - Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") + Logger.println("Загрузка расширения ${it.name} из ${it.path}") loadExtension(it, env) } else { Logger.println("Неизвестный метод инициализации расширения ${it.name}") @@ -77,7 +77,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - FilePath localFilePath = FileUtils.getFilePath(extension.path) + String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath.toURI().toURL()) } } From 2bfb7c8e4a0a36bb48e97040861de8f3e3f88e00 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 19:59:20 +0300 Subject: [PATCH 64/73] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 5de3843c..d2771d91 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -79,7 +79,7 @@ class GetExtensions implements Serializable { // If the path is a local file, copy the file String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path FilePath localFilePath = FileUtils.getFilePath(localPath) - localPathToExtension.copyFrom(localFilePath.toURI().toURL()) + localPathToExtension.copyFrom(localFilePath) } } From 8b9f047e368e8817ba2fe807a30cca697d5aba11 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:18:39 +0300 Subject: [PATCH 65/73] =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20http=20=D0=BD=D0=B0=20isvalidurl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pulsar/jenkins/library/steps/GetExtensions.groovy | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index d2771d91..47bcdd82 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -72,7 +72,7 @@ class GetExtensions implements Serializable { String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) - if (extension.path.startsWith("http")) { + if (isValidUrl(extension.path)) { // If the path is a URL, download the file localPathToExtension.copyFrom(new URL(extension.path)) } else { @@ -103,4 +103,13 @@ class GetExtensions implements Serializable { steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) } } + + private static boolean isValidUrl(String url) { + try { + new URL(url) + return true + } catch (MalformedURLException e) { + return false + } + } } From ccfbc7cb70f56ec5b7ba9ec0edc49afe3ca1e67b Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:28:30 +0300 Subject: [PATCH 66/73] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B3=D1=80?= =?UTF-8?q?=D1=8F=D0=B7=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=85=D0=B0=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 47bcdd82..1fd343da 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -42,6 +42,10 @@ class GetExtensions implements Serializable { } extractConvertedExtensions(sourceDirName, steps) + String pathToExtensionDir = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/" + FilePath localPathToExtensionDir = FileUtils.getFilePath(pathToExtensionDir) + localPathToExtensionDir.mkdirs() + config.initInfoBaseOptions.extensions.each { if (it.initMethod == InitExtensionMethod.SOURCE) { Logger.println("Сборка расширения ${it.name} из исходников") @@ -57,9 +61,6 @@ class GetExtensions implements Serializable { } private void buildExtension(Extension extension, String srcDir, String vrunnerPath, IStepExecutor steps) { - // ТУТ ГРЯЗНЫЙ ХАК - VRunner.exec("mkdir -p $EXTENSIONS_OUT_DIR") - // ТУТ КОНЕЦ ГРЯЗНОГО ХАКА def compileExtCommand = "$vrunnerPath compileexttocfe --src ${srcDir} --out $EXTENSIONS_OUT_DIR/${extension.name}.cfe" List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] From 33b3066f9f7e7dc651e1647d918d9f0ed3175ded Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 20:31:27 +0300 Subject: [PATCH 67/73] =?UTF-8?q?=D0=97=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20.=20=D0=BD?= =?UTF-8?q?=D0=B0=20./?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 1fd343da..84edd897 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,7 +78,7 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = extension.path.startsWith(".") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } From f45622d533e22d874c91bcc8f1719faf8c7f1f65 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 22:12:30 +0300 Subject: [PATCH 68/73] =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 84edd897..4f497f04 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,8 +78,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path - FilePath localFilePath = FileUtils.getFilePath(localPath) + // String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path + FilePath localFilePath = FileUtils.getFilePath(extension.path) localPathToExtension.copyFrom(localFilePath) } } From f846295a74c1ebdde2fc7c36795ff9374b1719d1 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:20:40 +0300 Subject: [PATCH 69/73] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E=D1=82?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=D1=83=20=D0=BF=D1=83=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jenkins/library/steps/GetExtensions.groovy | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 4f497f04..bc4a7cd3 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,8 +78,8 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - // String localPath = extension.path.startsWith("./") ? "$env.WORKSPACE/${extension.path.substring(1)}" : extension.path - FilePath localFilePath = FileUtils.getFilePath(extension.path) + String localPath = getAbsolutePath(extension.path) + FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } } @@ -113,4 +113,13 @@ class GetExtensions implements Serializable { return false } } + + private static String getAbsolutePath(String path) { + // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь + if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { + return path + } else { + return "${env.WORKSPACE}/${path}" + } + } } From ebb7afe45c993883099ad724fb4c5e67448e433f Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:24:33 +0300 Subject: [PATCH 70/73] fix --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index bc4a7cd3..2a1c2b6a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -78,7 +78,7 @@ class GetExtensions implements Serializable { localPathToExtension.copyFrom(new URL(extension.path)) } else { // If the path is a local file, copy the file - String localPath = getAbsolutePath(extension.path) + String localPath = getAbsolutePath(extension.path, env) FilePath localFilePath = FileUtils.getFilePath(localPath) localPathToExtension.copyFrom(localFilePath) } @@ -114,7 +114,7 @@ class GetExtensions implements Serializable { } } - private static String getAbsolutePath(String path) { + private static String getAbsolutePath(String path, def env) { // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { return path From b91b61097ba0267a99ba53fc3407a1a15fb28c91 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:29:45 +0300 Subject: [PATCH 71/73] small fixes --- src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy index 2a1c2b6a..cf52e90a 100644 --- a/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/GetExtensions.groovy @@ -99,7 +99,7 @@ class GetExtensions implements Serializable { private void extractConvertedExtensions(String sourceDirName, IStepExecutor steps) { if (config.sourceFormat == SourceFormat.EDT) { - // распакуем расширения + // usntash and unzip the edt to designer format transformation steps.unstash(EdtToDesignerFormatTransformation.EXTENSION_ZIP_STASH) steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) } @@ -115,8 +115,7 @@ class GetExtensions implements Serializable { } private static String getAbsolutePath(String path, def env) { - // Если путь начинается с / или начинается с \\, или начинается с "Буквы диска" и ":"(Прим C:) то это абсолютный путь - if (path.startsWith("/") || path.startsWith("\\\\") || path.matches("^[A-Za-z]:.*")) { + if (path.startsWith("/") || path.startsWith("\\") || path.matches("^[A-Za-z]:.*")) { return path } else { return "${env.WORKSPACE}/${path}" From 7c9f94c20bad916b73fbad8d08db592ba9f1af2f Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Thu, 14 Mar 2024 23:45:05 +0300 Subject: [PATCH 72/73] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=B0=D1=80=D1=82=D0=B8=D0=BD=D0=BA=D1=83=20?= =?UTF-8?q?=D0=B2=20=D1=80=D0=B8=D0=B4=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c154c44..51bd76c3 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ pipeline1C() ## Внешний вид пайплайна в интерфейсе Blue Ocean -![image](https://user-images.githubusercontent.com/1132840/140793320-d0856afe-0864-4f0e-8964-6a9d6d5822b4.png) +![image](https://github.com/firstBitMarksistskaya/jenkins-lib/assets/80944823/e34a0112-2fe5-4116-92ac-8fcca08bba43) ## Конфигурирование From 80ef2dc479cbfae454013aa4e83b66f53da7d7c1 Mon Sep 17 00:00:00 2001 From: ivanovEV Date: Fri, 15 Mar 2024 13:58:50 +0300 Subject: [PATCH 73/73] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 51bd76c3..3faa810c 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ 1. Все шаги можно запустить на базе docker-образов из https://github.com/firstBitMarksistskaya/onec-docker. См. [памятку по слоям и последовательности сборки](https://github.com/firstBitMarksistskaya/onec-docker/blob/feature/first-bit/Layers.md). 1. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT. 1. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников). +1. Подготовка и загрузка расширений конфигурации из исходных файлов расширения, из cfe-файлов. 1. Запуск ИБ в режиме выполнения обработчиков обновления БСП. 1. Дополнительные шаги инициализации данных в ИБ. 1. Трансформация кода из формата конфигуратора в формат EDT.