From b92c12eae494fa2a05ca1f1720893ae0f983e07f Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 18 Jan 2025 16:03:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BFgeneralize=20archive=20infobase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/globalConfiguration.json | 15 ++++- resources/schema.json | 55 +++++++++++++++---- src/JobConfigurationSchemaGenerator.java | 3 +- .../ArchiveInfobaseOptions.groovy | 31 +++++++++++ .../library/configuration/BddOptions.groovy | 5 ++ .../configuration/InitInfoBaseOptions.groovy | 5 +- .../jenkins/library/steps/ZipInfobase.groovy | 41 ++++++++++++++ vars/pipeline1C.groovy | 2 +- vars/zipInfobase.groovy | 12 ++-- 9 files changed, 144 insertions(+), 25 deletions(-) create mode 100644 src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy create mode 100644 src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index 83cfe2db..b4708d51 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -45,13 +45,24 @@ "additionalInitializationSteps": [], "templateDBPath": "", "vrunnerSettings": "./tools/vrunner.json", - "archiveInfobase": false, + "archiveInfobase": { + "onAlways": false, + "onFailure": true, + "onUnstable": false, + "onSuccess": false + }, "extensions": [] }, "bdd": { "vrunnerSteps": [ "vanessa --settings ./tools/vrunner.json" ], + "archiveInfobase": { + "onAlways": false, + "onFailure": true, + "onUnstable": false, + "onSuccess": false + }, "coverage": false, "dbgsPort": 1550 }, @@ -59,7 +70,7 @@ "sonarQubeInstallation": "", "useSonarScannerFromPath": true, "sonarScannerToolName": "sonar-scanner", - "infoBaseUpdateModuleName" : "", + "infoBaseUpdateModuleName": "", "branchAnalysisConfiguration": "fromEnv", "waitForQualityGate": false }, diff --git a/resources/schema.json b/resources/schema.json index 99a9fc03..b4bbec04 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -1,6 +1,27 @@ { "$schema" : "http://json-schema.org/draft-07/schema#", "definitions" : { + "ArchiveInfobaseOptions" : { + "type" : "object", + "properties" : { + "onAlways" : { + "type" : "boolean", + "description" : "Сохранять всегда" + }, + "onFailure" : { + "type" : "boolean", + "description" : "Сохранять при падении сборки" + }, + "onSuccess" : { + "type" : "boolean", + "description" : "Сохранять при успешной сборке" + }, + "onUnstable" : { + "type" : "boolean", + "description" : "Сохранять при нестабильной сборке" + } + } + }, "EmailExtConfiguration" : { "type" : "object", "properties" : { @@ -28,15 +49,22 @@ "bdd" : { "type" : "object", "properties" : { + "archiveInfobase" : { + "allOf" : [ { + "$ref" : "#/definitions/ArchiveInfobaseOptions" + }, { + "description" : "Настройки сохранения базы после выполнения всех шагов\n " + } ] + }, "coverage" : { "type" : "boolean", "description" : "Выполнять замер покрытия", - "default" : false + "default" : "false" }, "dbgsPort" : { "type" : "integer", "description" : "Порт, на котором будет запущен сервер отладки для замера покрытия", - "default" : 1550 + "default" : "1550" }, "vrunnerSteps" : { "description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ", @@ -80,6 +108,13 @@ "type" : "string" } }, + "archiveInfobase" : { + "allOf" : [ { + "$ref" : "#/definitions/ArchiveInfobaseOptions" + }, { + "description" : "Настройки сохранения базы после выполнения всех шагов\n " + } ] + }, "extensions" : { "description" : "Массив расширений для загрузки в конфигурацию.", "type" : "array", @@ -119,10 +154,6 @@ "type" : "boolean", "description" : "Запустить миграцию ИБ" }, - "archiveInfobase" : { - "type" : "boolean", - "description" : "\n Сохранить базу после выполнения всех шагов инициализации\n " - }, "templateDBPath" : { "type" : "string", "description" : "\n Путь к файлу эталонной базы данных.\n * По умолчанию не заполнен;\n * Указывается путь к файлу *.dt или *.1CD.\n " @@ -254,12 +285,12 @@ "coverage" : { "type" : "boolean", "description" : "Выполнять замер покрытия", - "default" : false + "default" : "false" }, "dbgsPort" : { "type" : "integer", "description" : "Порт, на котором будет запущен сервер отладки для замера покрытия", - "default" : 1550 + "default" : "1550" }, "publishToAllureReport" : { "type" : "boolean", @@ -385,12 +416,12 @@ "publishToAllureReport" : { "type" : "boolean", "description" : "Выполнять публикацию результатов в отчет Allure.\n По умолчанию выключено.\n ", - "default": false + "default" : "false" }, "publishToJUnitReport" : { "type" : "boolean", "description" : "Выполнять публикацию результатов в отчет JUnit.\n По умолчанию включено.\n ", - "default": true + "default" : "true" }, "vrunnerSettings" : { "type" : "string", @@ -479,12 +510,12 @@ "coverage" : { "type" : "boolean", "description" : "Выполнять замер покрытия", - "default" : false + "default" : "false" }, "dbgsPort" : { "type" : "integer", "description" : "Порт, на котором будет запущен сервер отладки для замера покрытия", - "default" : 1550 + "default" : "1550" }, "publishToAllureReport" : { "type" : "boolean", diff --git a/src/JobConfigurationSchemaGenerator.java b/src/JobConfigurationSchemaGenerator.java index 8a7246e8..4fa0be19 100644 --- a/src/JobConfigurationSchemaGenerator.java +++ b/src/JobConfigurationSchemaGenerator.java @@ -33,7 +33,8 @@ public static void main(String[] args) { writer.write(jsonSchema.toPrettyString()); System.out.println(jsonSchema.toPrettyString()); } catch (IOException e) { - e.printStackTrace(); + //noinspection CallToPrintStackTrace + e.printStackTrace(); } } diff --git a/src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy new file mode 100644 index 00000000..00b8da1f --- /dev/null +++ b/src/ru/pulsar/jenkins/library/configuration/ArchiveInfobaseOptions.groovy @@ -0,0 +1,31 @@ +package ru.pulsar.jenkins.library.configuration + +import com.cloudbees.groovy.cps.NonCPS +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonPropertyDescription + +@JsonIgnoreProperties(ignoreUnknown = true) +class ArchiveInfobaseOptions implements Serializable { + + @JsonPropertyDescription("Сохранять всегда") + Boolean onAlways = false + @JsonPropertyDescription("Сохранять при успешной сборке") + Boolean onSuccess = false + @JsonPropertyDescription("Сохранять при падении сборки") + Boolean onFailure = false + @JsonPropertyDescription("Сохранять при нестабильной сборке") + Boolean onUnstable = false + + @Override + @NonCPS + String toString() { + return "ArchiveInfobaseOptions{" + + "onAlways=" + onAlways + + ", onSuccess=" + onSuccess + + ", onFailure=" + onFailure + + ", onUnstable=" + onUnstable + + '}'; + } +} + + diff --git a/src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy index d82a1788..0f3687f2 100644 --- a/src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy @@ -16,11 +16,16 @@ class BddOptions extends StepCoverageOptions implements Serializable { 'vanessa --settings ./tools/vrunner.json' ] + @JsonPropertyDescription("""Настройки сохранения базы после выполнения всех шагов + """) + ArchiveInfobaseOptions archiveInfobase + @Override @NonCPS String toString() { return "BddOptions{" + "vrunnerSteps=" + vrunnerSteps + + "archiveInfobase=" + archiveInfobase + "coverage=" + coverage + "dbgsPort=" + dbgsPort + '}' diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index aaaa8ed4..3d8c0e50 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -40,10 +40,9 @@ class InitInfoBaseOptions implements Serializable { """) String templateDBPath - @JsonPropertyDescription(""" - Сохранить базу после выполнения всех шагов инициализации + @JsonPropertyDescription("""Настройки сохранения базы после выполнения всех шагов """) - Boolean archiveInfobase + ArchiveInfobaseOptions archiveInfobase @JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.") Extension[] extensions diff --git a/src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy b/src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy new file mode 100644 index 00000000..692c4f2b --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/ZipInfobase.groovy @@ -0,0 +1,41 @@ +package ru.pulsar.jenkins.library.steps + +import hudson.model.Result +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.Logger + +class ZipInfobase implements Serializable { + + private final JobConfiguration config + private final String stage + + ZipInfobase(JobConfiguration config, String stage) { + this.config = config + this.stage = stage + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + def currentBuild = steps.currentBuild() + def currentResult = Result.fromString(currentBuild.getCurrentResult()) + + def archiveInfobaseOptions = options.archiveInfobase + + def archiveInfobase = false + if (archiveInfobaseOptions.onAlways + || (archiveInfobaseOptions.onFailure && (currentResult == Result.FAILURE || currentResult == Result.ABORTED)) + || (archiveInfobaseOptions.onUnstable && currentResult == Result.UNSTABLE) + || (archiveInfobaseOptions.onSuccess && currentResult == Result.SUCCESS)) { + archiveInfobase = true + } + + def archiveName = "1Cv8.1CD.${stage}.zip" + steps.zip('build/ib', '1Cv8.1CD', archiveName, archiveInfobase) + steps.stash(archiveName, archiveName, false) + } +} diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index da958890..09a09648 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -144,7 +144,7 @@ void call() { timeout(time: config.timeoutOptions.zipInfoBase, unit: TimeUnit.MINUTES) { printLocation() - zipInfobase(config) + zipInfobase config, 'initInfobase' } } } diff --git a/vars/zipInfobase.groovy b/vars/zipInfobase.groovy index 0f918713..7c6faa1a 100644 --- a/vars/zipInfobase.groovy +++ b/vars/zipInfobase.groovy @@ -1,10 +1,10 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration +import ru.pulsar.jenkins.library.ioc.ContextRegistry +import ru.pulsar.jenkins.library.steps.ZipInfobase -def call(JobConfiguration config) { - - def archiveName = '1Cv8.1CD.zip' - - zip dir: 'build/ib', glob: '1Cv8.1CD', zipFile: archiveName, archive: config.initInfoBaseOptions.archiveInfobase - stash name: archiveName, includes: archiveName, allowEmpty: false +def call(JobConfiguration config, String stageName) { + ContextRegistry.registerDefaultContext(this) + def zipInfobase = new ZipInfobase(config, stageName) + zipInfobase.run() }