1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2025-01-20 11:54:30 +02:00

Шаг инициализации информационной базы

This commit is contained in:
Nikita Gryzlov 2020-10-15 14:51:58 +03:00
parent 1f41708d04
commit 1a116ee66e
No known key found for this signature in database
GPG Key ID: C1EAE411FEF0BF2F
11 changed files with 167 additions and 9 deletions

View File

@ -6,11 +6,16 @@
"storage": "UNKNOWN_ID"
},
"stages": {
"initSteps": false,
"sonarqube": false,
"syntaxCheck": false,
"edtValidate": false,
"smoke": false
},
"initInfobase": {
"runMigration": true,
"additionalMigrationSteps": []
},
"sonarqube": {
"sonarQubeInstallation": "",
"useSonarScannerFromPath": true,

View File

@ -45,6 +45,28 @@
"smoke" : {
"type" : "boolean",
"description" : "Дымовые тесты включены"
},
"initSteps" : {
"type" : "boolean",
"description" : "Предварительные шаги инициализации включены"
}
}
},
"initInfobase" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfobaseOptions",
"description" : "Настройки шага инициализации ИБ",
"properties" : {
"runMigration" : {
"type" : "boolean",
"description" : "Запустить миграцию ИБ"
},
"additionalMigrationSteps" : {
"type" : "array",
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"items" : {
"type" : "string"
}
}
}
},

View File

@ -41,12 +41,14 @@ class ConfigurationReader implements Serializable {
def nonMergeableSettings = Arrays.asList(
"secrets",
"stageFlags",
"initInfobaseOptions",
"sonarQubeOptions",
"syntaxCheckOptions",
"resultsTransformOptions"
).toSet()
mergeObjects(baseConfiguration, configurationToMerge, nonMergeableSettings)
mergeInitInfobaseOptions(baseConfiguration.initInfobaseOptions, configurationToMerge.initInfobaseOptions);
return baseConfiguration;
}
@ -70,4 +72,9 @@ class ConfigurationReader implements Serializable {
)
})
}
@NonCPS
private static void mergeInitInfobaseOptions(InitInfobaseOptions baseObject, InitInfobaseOptions objectToMerge) {
baseObject.additionalMigrationSteps = objectToMerge.additionalMigrationSteps.clone()
}
}

View File

@ -0,0 +1,27 @@
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 InitInfobaseOptions implements Serializable {
@JsonPropertyDescription("Запустить миграцию ИБ")
boolean runMigration = true
@JsonPropertyDescription("""Дополнительные шаги, запускаемые через vrunner.
В каждой строке передается отдельная команда
vrunner и ее аргументы (например, "vanessa --settings ./tools/vrunner.first.json")
""")
String[] additionalMigrationSteps
@Override
@NonCPS
String toString() {
return "InitInfobaseOptions{" +
"runMigration=" + runMigration +
", additionalMigrationSteps=" + additionalMigrationSteps +
'}';
}
}

View File

@ -20,6 +20,10 @@ class JobConfiguration implements Serializable {
@JsonPropertyDescription("Идентификаторы сохраненных секретов")
Secrets secrets;
@JsonProperty("initInfobase")
@JsonPropertyDescription("Настройки шага инициализации ИБ")
InitInfobaseOptions initInfobaseOptions;
@JsonProperty("sonarqube")
@JsonPropertyDescription("Настройки анализа SonarQube")
SonarQubeOptions sonarQubeOptions;
@ -40,6 +44,7 @@ class JobConfiguration implements Serializable {
", srcDir='" + srcDir + '\'' +
", stageFlags=" + stageFlags +
", secrets=" + secrets +
", initInfobaseOptions=" + initInfobaseOptions +
", sonarQubeOptions=" + sonarQubeOptions +
", syntaxCheckOptions=" + syntaxCheckOptions +
", resultsTransformOptions=" + resultsTransformOptions +

View File

@ -18,6 +18,9 @@ class StageFlags implements Serializable {
@JsonPropertyDescription("Дымовые тесты включены")
boolean smoke
@JsonPropertyDescription("Предварительные шаги инициализации включены")
boolean initSteps
@Override
@NonCPS
String toString() {
@ -26,10 +29,11 @@ class StageFlags implements Serializable {
", syntaxCheck=" + syntaxCheck +
", edtValidate=" + edtValidate +
", smoke=" + smoke +
", initSteps=" + initSteps +
'}';
}
boolean needInfobase() {
return smoke || syntaxCheck
return smoke || syntaxCheck || initSteps
}
}

View File

@ -0,0 +1,40 @@
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.Logger
class InitInfobase implements Serializable {
private final JobConfiguration config;
InitInfobase(JobConfiguration config) {
this.config = config
}
def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
Logger.printLocation()
if (!config.stageFlags.initSteps) {
Logger.println("Init step is disabled")
return
}
if (config.initInfobaseOptions.runMigration) {
Logger.println("Запуск миграции ИБ")
// Запуск миграции
steps.cmd("oscript_modules/bin/vrunner run --command \"ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы;\" --execute \$runnerRoot/epf/ЗакрытьПредприятие.epf --ibconnection \"/F./build/ib\"")
} else {
Logger.println("Шаг миграции ИБ выключен")
}
config.initInfobaseOptions.additionalMigrationSteps.each {
Logger.println("Первичная инициализация командой ${it}")
steps.cmd("oscript_modules/bin/vrunner ${it}")
}
}
}

View File

@ -31,14 +31,21 @@ class ConfigurationReaderTest {
// then
assertThat(jobConfiguration.getV8version()).isEqualTo("8.3.14.1944");
assertThat(jobConfiguration.getSonarQubeOptions().getSonarScannerToolName()).isEqualTo("sonar-scanner");
assertThat(jobConfiguration.getSecrets())
.hasFieldOrPropertyWithValue("storage", "1234")
.hasFieldOrPropertyWithValue("storagePath", "UNKNOWN_ID")
;
assertThat(jobConfiguration.getSyntaxCheckOptions().getCheckModes()).hasSize(1);
assertThat(jobConfiguration.getResultsTransformOptions().isRemoveSupport()).isTrue();
assertThat(jobConfiguration.getResultsTransformOptions().getSupportLevel()).isEqualTo(0);
assertThat(jobConfiguration.getResultsTransformOptions().getSupportLevel()).isZero();
assertThat(jobConfiguration.getInitInfobaseOptions().getRunMigration()).isFalse();
assertThat(jobConfiguration.getInitInfobaseOptions().getAdditionalMigrationSteps()).contains("vanessa --settings ./tools/vrunner.first.json");
}
}

View File

@ -6,6 +6,12 @@
"stages": {
"syntaxCheck": true
},
"initInfobase": {
"runMigration": false,
"additionalMigrationSteps": [
"vanessa --settings ./tools/vrunner.first.json"
]
},
"syntaxCheck": {
"checkModes": ["-ThinClient"]
},

10
vars/initInfobase.groovy Normal file
View File

@ -0,0 +1,10 @@
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.steps.InitInfobase
def call(JobConfiguration config) {
ContextRegistry.registerDefaultContext(this)
def initInfobase = new InitInfobase(config)
initInfobase.run()
}

View File

@ -46,18 +46,43 @@ void call() {
expression { config.stageFlags.needInfobase() }
}
steps {
printLocation()
stages {
stage('Создание ИБ') {
steps {
printLocation()
installLocalDependencies()
installLocalDependencies()
dir("build/out") { echo '' }
dir("build/out") { echo '' }
// Создание базы загрузкой конфигурации из хранилища
initFromStorage config
// Создание базы загрузкой конфигурации из хранилища
initFromStorage config
}
}
zipInfobase()
stage('Инициализация ИБ') {
when {
beforeAgent true
expression { config.stageFlags.initSteps }
}
steps {
printLocation()
// Инициализация и первичная миграция
initInfobase config
}
}
stage('Архивация ИБ') {
steps {
printLocation()
zipInfobase()
}
}
}
}
stage('Трансформация в формат EDT') {