diff --git a/resources/globalConfiguration.json b/resources/globalConfiguration.json index 3210c3e7..cdae6866 100644 --- a/resources/globalConfiguration.json +++ b/resources/globalConfiguration.json @@ -24,12 +24,13 @@ "timeout": { "smoke": 240, "bdd": 120, + "getBinaries": 60, "createInfoBase": 60, "designerToEdtFormatTransformation": 60, "edtToDesignerFormatTransformation": 60, "edtValidate": 240, "initInfoBase": 60, - "loadExtintions": 60, + "loadExtensions": 60, "resultTransformation": 10, "sonarqube": 90, "syntaxCheck": 240, @@ -39,7 +40,7 @@ "initMethod": "fromStorage", "runMigration": true, "additionalInitializationSteps": [], - "loadExtintionsByDefault": true, + "installExtensionsByDefault": true, "extensions": [] }, "bdd": { diff --git a/resources/schema.json b/resources/schema.json index 7c4212b5..53a71ae4 100644 --- a/resources/schema.json +++ b/resources/schema.json @@ -94,6 +94,10 @@ "type": "integer", "description": "Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.\n По умолчанию содержит значение 60.\n " }, + "getBinaries": { + "type": "integer", + "description": "Таймаут шага получения бинарников, в минутах.\n По умолчанию содержит значение 60.\n " + }, "createInfoBase": { "type": "integer", "description": "Таймаут шага создания информационной базы, в минутах.\n По умолчанию содержит значение 60.\n " @@ -161,6 +165,10 @@ "type": "string" } }, + "installExtensionsByDefault": { + "type": "boolean", + "description": "Устанавливать расширения из папки исходников по умолчанию.\n По умолчанию содержит значение \"true\"." + }, "extensions": { "type": "array", "description": "Массив расширений для загрузки в конфигурацию.", @@ -181,11 +189,6 @@ "path": { "type": "string", "description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod - указывается путь к исходникам расширения.\n * В случае если выбран initMethod - указывается ссылка на cfe-файл" - }, - "sourceFormat": { - "type": "string", - "description": "Формат исходников конфигурации", - "enum": ["edt", "designer"] } } } diff --git a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy index 51283251..d4666119 100644 --- a/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy +++ b/src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOptions.groovy @@ -25,6 +25,8 @@ class InitInfoBaseOptions implements Serializable { """) String[] additionalInitializationSteps + @JsonPropertyDescription("Устанавливать расширения из папки исходников по умолчанию") + Boolean installExtensionsByDefault = true @JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.") Extension[] extensions; @@ -48,9 +50,6 @@ class InitInfoBaseOptions implements Serializable { * В случае если выбран initMethod - указывается ссылка на cfe-файл """) String path; - - @JsonPropertyDescription("Формат исходников конфигурации") - String sourceFormat; } @Override @@ -60,6 +59,7 @@ class InitInfoBaseOptions implements Serializable { "initMethod=" + initMethod + ", runMigration=" + runMigration + ", additionalInitializationSteps=" + additionalInitializationSteps + + ", installExtensionsByDefault=" + installExtensionsByDefault + ", 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..0f2bb7dc --- /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/steps/EdtToDesignerFormatTransformation.groovy b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy index f80acf22..19a3777f 100644 --- a/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy +++ b/src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransformation.groovy @@ -16,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; @@ -39,9 +42,17 @@ class EdtToDesignerFormatTransformation implements Serializable { def projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir") def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE") def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR") + def extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR") def edtVersionForRing = EDT.ringModule(config) steps.deleteDir(workspaceDir) + + transformConfiguration(steps, projectDir, workspaceDir, configurationRoot, edtVersionForRing) + // TODO: Переделать когда пойму как выглядит расширение в EDT + // transformExtensions(steps, projectDir, workspaceDir, extensionRoot, edtVersionForRing) + } + + private void transformConfiguration(IStepExecutor steps, String projectDir, String workspaceDir, String configurationRoot, String edtVersionForRing) { steps.deleteDir(configurationRoot) Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора") @@ -57,4 +68,21 @@ class EdtToDesignerFormatTransformation implements Serializable { steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP) } + // TODO: Переделать когда пойму как выглядит расширение в EDT + private void transformExtensions(IStepExecutor steps, String projectDir, String workspaceDir, String extensionRoot, String edtVersionForRing) { + steps.deleteDir(extensionRoot) + + Logger.println("Конвертация исходников расширений из формата EDT в формат Конфигуратора") + + def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot\"" + + 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/GetExtesnions.groovy b/src/ru/pulsar/jenkins/library/steps/GetExtesnions.groovy new file mode 100644 index 00000000..fd3b3c3d --- /dev/null +++ b/src/ru/pulsar/jenkins/library/steps/GetExtesnions.groovy @@ -0,0 +1,74 @@ +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.Logger +import ru.pulsar.jenkins.library.utils.VRunner + +class GetExtensions implements Serializable { + + public static final String EXTENSIONS_OUT_DIR = 'build/out/cfe' + + private final JobConfiguration config; + private final String vrunnerPath = VRunner.getVRunnerPath(); + private final String srcDir = getSrcDir(); + + GetExtensions(JobConfiguration config) { + this.config = config + } + + def run() { + IStepExecutor steps = ContextRegistry.getContext().getStepExecutor() + + Logger.printLocation() + + steps.installLocalDependencies(); + + Logger.println("Сборка расширений") + + config.initInfoBaseOptions.extensions.each { + if (it.initMethod == InitMethod.SOURCE) { + Logger.println("Сборка расширения ${it.name} из исходников") + buildExtension(it) + } else { + Logger.println("Загрузка расширения ${it.name} из интернета по ссылке ${it.path}") + loadExtension(it) + } + } + } + + private void buildExtension(Extension extension) { + + String name = extension.name; + + def compileExtCommand = "$vrunnerPath compileexttocfe --src $srcDir/${name} --out $EXTENSIONS_OUT_DIR/${name}.cfe" + List logosConfig = ["LOGOS_CONFIG=$config.logosConfig"] + steps.withEnv(logosConfig) { + VRunner.exec(compileExtCommand) + } + } + + private void loadExtension(Extension extension) { + String pathToExtension = "$env.WORKSPACE/${EXTENSIONS_OUT_DIR}/${extension.name}.cfe" + FilePath localPathToExtension = FileUtils.getFilePath(pathToExtension) + localPathToExtension.copyFrom(new URL(extension.path)) + } + + private String getSrcDir() { + if (config.sourceFormat == SourceFormat.EDT) { + def env = steps.env(); + + sourceDirName = "$env.WORKSPACE/$EdtToDesignerFormatTransformation.EXTENSION_DIR" + // распакуем расширения + steps.unstash(EdtToDesignerFormatTransformation.EXTENSION_ZIP_STASH) + steps.unzip(sourceDirName, EdtToDesignerFormatTransformation.EXTENSION_ZIP) + + return sourceDirName; + } else { + return config.srcDir; + } + } +} diff --git a/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy index c00674ac..6b7e18a7 100644 --- a/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy +++ b/src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy @@ -24,11 +24,9 @@ class LoadExtensions implements Serializable { steps.withEnv(logosConfig) { String vrunnerPath = VRunner.getVRunnerPath(); - - steps.catchError { - config.initInfoBaseOptions.extensions.each { - Logger.println("Установим расширение ${it.name}") + config.initInfoBaseOptions.extensions.each { + Logger.println("Установим расширение ${it.name}") // if (config.sourceFormat == SourceFormat.EDT) { // def env = steps.env(); @@ -41,7 +39,6 @@ class LoadExtensions implements Serializable { // } // VRunner.exec("$vrunnerPath ${it} --ibconnection \"/F./build/ib\"") - } } } }