diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index 7ed9f033..e6233b07 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -32,6 +32,7 @@ "initInfobase": { "initMethod": "fromStorage", "runMigration": true, + "vrunnerSettings": "./tools/vrunner.json", "additionalInitializationSteps": [] }, "bdd": { diff --git a/resources/schema.json b/resources/schema.json index 5d2c0761..3eb709f0 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -26,11 +26,11 @@ "properties" : { "storagePath" : { "type" : "string", - "description" : "Путь к хранилищу конфигурации" + "description" : "Ид секрета Jenkins, хранящего путь к хранилищу конфигурации" }, "storage" : { "type" : "string", - "description" : "Данные авторизации в хранилище конфигурации" + "description" : "Ид секрета Jenkins, хранящего логин и пароль для хранилища конфигурации" } } }, @@ -118,7 +118,7 @@ }, "initInfobase" : { "type" : "object", - "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfobaseOptions", + "id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions", "description" : "Настройки шага инициализации ИБ", "properties" : { "initMethod" : { @@ -130,6 +130,10 @@ "type" : "boolean", "description" : "Запустить миграцию ИБ" }, + "vrunnerSettings" : { + "type" : "string", + "description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n " + }, "additionalInitializationSteps" : { "type" : "array", "description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ", diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index f0874a60..42a9f247 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -8,7 +8,12 @@ import com.fasterxml.jackson.annotation.JsonPropertyDescription class InitInfoBaseOptions implements Serializable { @JsonPropertyDescription(""" - Способ инициализации информационной базы. + Путь к выгрузке информационной базы в формате DT, которая должна быть загружена в самом начале инициализации. + По умолчанию не заполнено""") + String preloadDTURL = ""; + + @JsonPropertyDescription(""" + Способ инициализации конфигурации информационной базы. Поддерживается три варианта: * fromStorage - инициализация информационной базы из хранилища конфигурации; * fromSource - инициализация информационной базы из исходников конфигурации; @@ -19,6 +24,11 @@ class InitInfoBaseOptions implements Serializable { @JsonPropertyDescription("Запустить миграцию ИБ") Boolean runMigration = true + @JsonPropertyDescription("""Путь к конфигурационному файлу vanessa-runner. + По умолчанию содержит значение "./tools/vrunner.json". + """) + String vrunnerSettings + @JsonPropertyDescription("""Дополнительные шаги, запускаемые через vrunner. В каждой строке передается отдельная команда vrunner и ее аргументы (например, "vanessa --settings ./tools/vrunner.first.json") @@ -29,8 +39,10 @@ class InitInfoBaseOptions implements Serializable { @NonCPS String toString() { return "InitInfoBaseOptions{" + - "initMethod=" + initMethod + + ", preloadDTURL=" + preloadDTURL + + ", initMethod=" + initMethod + ", runMigration=" + runMigration + + ", vrunnerSettings=" + vrunnerSettings + ", additionalInitializationSteps=" + additionalInitializationSteps + '}'; } diff --git a/src/ru/pulsar/jenkins/library/steps/CreateInfoBase.groovy b/src/ru/pulsar/jenkins/library/steps/CreateInfoBase.groovy new file mode 100644 index 00000000..a3e4c93f --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/CreateInfoBase.groovy @@ -0,0 +1,54 @@ +package ru.pulsar.jenkins.library.steps + +import hudson.FilePath +import org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction +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.FileUtils +import ru.pulsar.jenkins.library.utils.Logger +import ru.pulsar.jenkins.library.utils.VRunner + +class CreateInfoBase implements Serializable { + + private final static PRELOAD_DT_LOCAL_PATH = "build/out/preload.dt" + + private final JobConfiguration config + + CreateInfoBase(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + steps.installLocalDependencies() + + steps.createDir('build/out') + + EnvironmentAction env = steps.env() + + String vrunnerPath = VRunner.getVRunnerPath() + + String preloadDTURL = config.initInfoBaseOptions.getPreloadDTURL() + if (!preloadDTURL.isEmpty()) { + + String vrunnerSettings = config.initInfoBaseOptions.getVrunnerSettings() + + FilePath localPathToPreloadDT = FileUtils.getFilePath("$env.WORKSPACE/$PRELOAD_DT_LOCAL_PATH") + Logger.println("Скачивание DT в $localPathToPreloadDT") + localPathToPreloadDT.copyFrom(new URL(preloadDTURL)) + + String command = vrunnerPath + " init-dev --dt $localPathToPreloadDT" + if (steps.fileExists(vrunnerSettings)) { + command += " --settings $vrunnerSettings" + } + VRunner.exec(command) + + } + + } + +} diff --git a/src/ru/pulsar/jenkins/library/steps/InitFromFiles.groovy b/src/ru/pulsar/jenkins/library/steps/InitFromFiles.groovy index e08fa32a..f5ce0714 100644 --- a/src/ru/pulsar/jenkins/library/steps/InitFromFiles.groovy +++ b/src/ru/pulsar/jenkins/library/steps/InitFromFiles.groovy @@ -9,7 +9,7 @@ import ru.pulsar.jenkins.library.utils.VRunner class InitFromFiles implements Serializable { - private final JobConfiguration config; + private final JobConfiguration config InitFromFiles(JobConfiguration config) { this.config = config @@ -25,25 +25,33 @@ class InitFromFiles implements Serializable { return } - steps.installLocalDependencies(); + steps.installLocalDependencies() + + steps.createDir('build/out') Logger.println("Распаковка файлов") - String srcDir; + String srcDir if (config.sourceFormat == SourceFormat.EDT) { - def env = steps.env(); + def env = steps.env() srcDir = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.CONFIGURATION_DIR" steps.unstash(EdtToDesignerFormatTransformation.CONFIGURATION_ZIP_STASH) steps.unzip(srcDir, EdtToDesignerFormatTransformation.CONFIGURATION_ZIP) } else { - srcDir = config.srcDir; + srcDir = config.srcDir } - Logger.println("Выполнение загрузки конфигурации из файлов") - String vrunnerPath = VRunner.getVRunnerPath(); - def initCommand = "$vrunnerPath init-dev --src $srcDir --ibconnection \"/F./build/ib\"" - VRunner.exec(initCommand) + String vrunnerPath = VRunner.getVRunnerPath() + String vrunnerSettings = config.initInfoBaseOptions.getVrunnerSettings() + + String command = vrunnerPath + " update-dev --src $srcDir --ibconnection \"/F./build/ib\"" + if (steps.fileExists(vrunnerSettings)) { + command += " --settings $vrunnerSettings" + } + + VRunner.exec(command) + } } diff --git a/src/ru/pulsar/jenkins/library/steps/InitFromStorage.groovy b/src/ru/pulsar/jenkins/library/steps/InitFromStorage.groovy index 18b310d4..6400ba96 100644 --- a/src/ru/pulsar/jenkins/library/steps/InitFromStorage.groovy +++ b/src/ru/pulsar/jenkins/library/steps/InitFromStorage.groovy @@ -7,6 +7,7 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration import ru.pulsar.jenkins.library.configuration.Secrets import ru.pulsar.jenkins.library.ioc.ContextRegistry import ru.pulsar.jenkins.library.utils.Logger + import ru.pulsar.jenkins.library.utils.VRunner import ru.pulsar.jenkins.library.utils.VersionParser @@ -34,10 +35,12 @@ class InitFromStorage implements Serializable { steps.installLocalDependencies() - String storageVersion = VersionParser.storage() + steps.createDir('build/out') + + String storageVersion = VersionParser.storage(config.getSrcDir()) String storageVersionParameter = storageVersion == "" ? "" : "--storage-ver $storageVersion" - EnvironmentAction env = steps.env(); + EnvironmentAction env = steps.env() String repoSlug = computeRepoSlug(env.GIT_URL) Secrets secrets = config.secrets @@ -57,7 +60,13 @@ class InitFromStorage implements Serializable { ) ]) { String vrunnerPath = VRunner.getVRunnerPath() - VRunner.exec "$vrunnerPath init-dev --storage $storageVersionParameter --ibconnection \"/F./build/ib\"" + String vrunnerSettings = config.initInfoBaseOptions.getVrunnerSettings() + + String command = vrunnerPath + " update-dev --storage $storageVersionParameter --ibconnection \"/F./build/ib\"" + if (steps.fileExists(vrunnerSettings)) { + command += " --settings $vrunnerSettings" + } + VRunner.exec(command) } } diff --git a/src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy b/src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy index 981e52e4..7216fed6 100644 --- a/src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy +++ b/src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy @@ -43,6 +43,11 @@ class InitInfoBase implements Serializable { command += executeParameter; command += ' --ibconnection "/F./build/ib"' + String vrunnerSettings = config.initInfoBaseOptions.vrunnerSettings + if (steps.fileExists(vrunnerSettings)) { + command += " --settings $vrunnerSettings" + } + // Запуск миграции steps.catchError { VRunner.exec(command) diff --git a/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java b/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java index 64d2d3b9..03b26695 100644 --- a/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java +++ b/test/unit/groovy/ru/pulsar/jenkins/library/configuration/ConfigurationReaderTest.java @@ -50,8 +50,10 @@ void testCreateJobConfigurationObject() throws IOException { assertThat(jobConfiguration.getSmokeTestOptions().isPublishToAllureReport()).isFalse(); assertThat(jobConfiguration.getSmokeTestOptions().isPublishToJUnitReport()).isTrue(); - assertThat(jobConfiguration.getInitInfoBaseOptions().getRunMigration()).isFalse(); - assertThat(jobConfiguration.getInitInfoBaseOptions().getAdditionalInitializationSteps()).contains("vanessa --settings ./tools/vrunner.first.json"); + InitInfoBaseOptions initInfoBaseOptions = jobConfiguration.getInitInfoBaseOptions(); + assertThat(initInfoBaseOptions.getRunMigration()).isFalse(); + assertThat(initInfoBaseOptions.getPreloadDTURL()).isEqualTo("https://build-server:7421/dump.dt"); + assertThat(initInfoBaseOptions.getAdditionalInitializationSteps()).contains("vanessa --settings ./tools/vrunner.first.json"); assertThat(jobConfiguration.getBddOptions().getVrunnerSteps()).contains("vanessa --settings ./tools/vrunner.json"); diff --git a/test/unit/resources/jobConfiguration.json b/test/unit/resources/jobConfiguration.json index a4205c11..7d2769a1 100644 --- a/test/unit/resources/jobConfiguration.json +++ b/test/unit/resources/jobConfiguration.json @@ -10,6 +10,7 @@ "zipInfoBase": 123 }, "initInfobase": { + "preloadDTURL": "https://build-server:7421/dump.dt", "runMigration": false, "additionalInitializationSteps": [ "vanessa --settings ./tools/vrunner.first.json" diff --git a/vars/createInfoBase.groovy b/vars/createInfoBase.groovy new file mode 100644 index 00000000..ffc55df5 --- /dev/null +++ b/vars/createInfoBase.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.CreateInfoBase + +def call(JobConfiguration config) { + ContextRegistry.registerDefaultContext(this) + + def createInfobase = new CreateInfoBase(config) + createInfobase.run() +} \ No newline at end of file diff --git a/vars/pipeline1C.groovy b/vars/pipeline1C.groovy index 227924d9..da661072 100644 --- a/vars/pipeline1C.groovy +++ b/vars/pipeline1C.groovy @@ -73,6 +73,8 @@ void call() { createDir('build/out') script { + createInfoBase config + if (config.infoBaseFromFiles()) { // Создание базы загрузкой из файлов initFromFiles config