1
0

Merge pull request #66 from firstBitMarksistskaya/feature-overridable-options

This commit is contained in:
Nikita Fedkin
2021-12-08 16:15:00 +03:00
committed by GitHub
9 changed files with 192 additions and 29 deletions

View File

@@ -114,6 +114,7 @@ pipeline1C()
* Если в корне репозитория существует файл `packagedef`, то в шагах, работающих с информационной базой, будет выполнена попытка установки локальных зависимостей средствами `opm`.
* Если после установки локальных зависимостей в каталоге `oscript_modules/bin` существует файл `vrunner`, то для выполнения команд работы с информационной базой будет использоваться он, а не глобально установленный `vrunner` из `PATH`.
* Результаты в формате `allure` ожидаются в каталоге `build/out/allure` или его подкаталогах.
* Каждый шаг имеет свой таймаут в минутах (от 10 до 240 в зависимости от "тяжёлости" шага сборки), но может быть переопределен в секции настроек `timeout`.
* Инициализация:
* Информационная база инициализируется только в том случае, если в сборочной линии включены шаги, работающие с базой (например, `bdd` или `syntaxCheck`).
* Информационная база инициализируется конфигурацией из хранилища конфигурации (`initInfobase` -> `initMethod`).

View File

@@ -16,6 +16,19 @@
"edtValidate": false,
"smoke": false
},
"timeout": {
"smoke": 240,
"bdd": 120,
"createInfoBase": 60,
"designerToEdtFormatTransformation": 60,
"edtToDesignerFormatTransformation": 60,
"edtValidate": 240,
"initInfoBase": 60,
"resultTransformation": 10,
"sonarqube": 90,
"syntaxCheck": 240,
"zipInfoBase": 60
},
"initInfobase": {
"initMethod": "fromStorage",
"runMigration": true,

View File

@@ -65,6 +65,57 @@
}
}
},
"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 "
}
}
},
"initInfobase" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfobaseOptions",

View File

@@ -56,6 +56,7 @@ class ConfigurationReader implements Serializable {
def nonMergeableSettings = Arrays.asList(
"secrets",
"stageFlags",
"timeoutOptions",
"initInfobaseOptions",
"bddOptions",
"sonarQubeOptions",

View File

@@ -22,6 +22,10 @@ class JobConfiguration implements Serializable {
@JsonPropertyDescription("Включение этапов сборок")
StageFlags stageFlags;
@JsonProperty("timeout")
@JsonPropertyDescription("Настройка таймаутов для шагов")
TimeoutOptions timeoutOptions;
@JsonPropertyDescription("Имя ветки по умолчанию. Значение по умолчанию - main.")
String defaultBranch
@@ -63,8 +67,9 @@ class JobConfiguration implements Serializable {
"v8version='" + v8version + '\'' +
", srcDir='" + srcDir + '\'' +
", sourceFormat=" + sourceFormat +
", defaultBranch=" + defaultBranch +
", stageFlags=" + stageFlags +
", timeoutOptions=" + timeoutOptions +
", defaultBranch='" + defaultBranch + '\'' +
", secrets=" + secrets +
", initInfobaseOptions=" + initInfobaseOptions +
", bddOptions=" + bddOptions +
@@ -72,11 +77,11 @@ class JobConfiguration implements Serializable {
", syntaxCheckOptions=" + syntaxCheckOptions +
", smokeTestOptions=" + smokeTestOptions +
", resultsTransformOptions=" + resultsTransformOptions +
", logosConfig=" + logosConfig +
", logosConfig='" + logosConfig + '\'' +
'}';
}
boolean infobaseFromFiles(){
boolean infobaseFromFiles() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
def env = steps.env();
String branchName = env.BRANCH_NAME;

View File

@@ -0,0 +1,63 @@
package ru.pulsar.jenkins.library.configuration
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonPropertyDescription
@JsonIgnoreProperties(ignoreUnknown = true)
class TimeoutOptions implements Serializable {
@JsonPropertyDescription('''Таймаут шага трансформации исходников из формата EDT в формат Конфигуратора, в минутах.
По умолчанию содержит значение 60.
''')
Integer edtToDesignerFormatTransformation
@JsonPropertyDescription('''Таймаут шага создания информационной базы, в минутах.
По умолчанию содержит значение 60.
''')
Integer createInfoBase
@JsonPropertyDescription('''Таймаут шага инициализации информационной базы, в минутах.
По умолчанию содержит значение 60.
''')
Integer initInfoBase
@JsonPropertyDescription('''Таймаут шага архивирования информационной базы, в минутах.
По умолчанию содержит значение 60.
''')
Integer zipInfoBase
@JsonPropertyDescription('''Таймаут шага трансформации исходников из формата Конфигуратора в формат EDT, в минутах.
По умолчанию содержит значение 60.
''')
Integer designerToEdtFormatTransformation
@JsonPropertyDescription('''Таймаут шага валидации EDT, в минутах.
По умолчанию содержит значение 240.
''')
Integer edtValidate
@JsonPropertyDescription('''Таймаут шага трансформации результатов EDT, в минутах.
По умолчанию содержит значение 10.
''')
Integer resultTransformation
@JsonPropertyDescription('''Таймаут шага проверки сценариев поведения, в минутах.
По умолчанию содержит значение 120.
''')
Integer bdd
@JsonPropertyDescription('''Таймаут шага синтаксического контроля, в минутах.
По умолчанию содержит значение 240.
''')
Integer syntaxCheck
@JsonPropertyDescription('''Таймаут шага дымовых тестов, в минутах.
По умолчанию содержит значение 240.
''')
Integer smoke
@JsonPropertyDescription('''Таймаут шага статического анализа SonarQube, в минутах.
По умолчанию содержит значение 90.
''')
Integer sonarqube
}

View File

@@ -54,6 +54,9 @@ class ConfigurationReaderTest {
assertThat(jobConfiguration.getBddOptions().getVrunnerSteps()).contains("vanessa --settings ./tools/vrunner.json");
assertThat(jobConfiguration.getLogosConfig()).isEqualTo("logger.rootLogger=DEBUG");
assertThat(jobConfiguration.getTimeoutOptions().getBdd()).isEqualTo(120);
assertThat(jobConfiguration.getTimeoutOptions().getZipInfoBase()).isEqualTo(123);
}
}

View File

@@ -6,6 +6,9 @@
"stages": {
"syntaxCheck": true
},
"timeout": {
"zipInfoBase": 123
},
"initInfobase": {
"runMigration": false,
"additionalInitializationSteps": [

View File

@@ -19,7 +19,6 @@ void call() {
options {
buildDiscarder(logRotator(numToKeepStr: '30'))
timeout(time: 2, unit: TimeUnit.HOURS)
timestamps()
}
@@ -29,6 +28,9 @@ void call() {
agent {
label 'agent'
}
options {
timeout(time: 1, unit: TimeUnit.HOURS)
}
steps {
script {
@@ -59,22 +61,25 @@ void call() {
expression { config.stageFlags.needInfobase() && config.infobaseFromFiles() && config.sourceFormat == SourceFormat.EDT }
}
steps {
edtToDesignerFormatTransformation config
timeout(time: config.timeoutOptions.edtToDesignerFormatTransformation, unit: TimeUnit.MINUTES) {
edtToDesignerFormatTransformation config
}
}
}
stage('Создание ИБ') {
steps {
createDir('build/out')
timeout(time: config.timeoutOptions.createInfoBase, unit: TimeUnit.MINUTES) {
createDir('build/out')
script {
if (config.infobaseFromFiles()){
// Создание базы загрузкой из файлов
initFromFiles config
}
else{
// Создание базы загрузкой конфигурации из хранилища
initFromStorage config
script {
if (config.infobaseFromFiles()) {
// Создание базы загрузкой из файлов
initFromFiles config
} else {
// Создание базы загрузкой конфигурации из хранилища
initFromStorage config
}
}
}
}
@@ -86,16 +91,20 @@ void call() {
expression { config.stageFlags.initSteps }
}
steps {
// Инициализация и первичная миграция
initInfobase config
timeout(time: config.timeoutOptions.initInfoBase, unit: TimeUnit.MINUTES) {
// Инициализация и первичная миграция
initInfobase config
}
}
}
stage('Архивация ИБ') {
steps {
printLocation()
timeout(time: config.timeoutOptions.zipInfoBase, unit: TimeUnit.MINUTES) {
printLocation()
zipInfobase()
zipInfobase()
}
}
}
@@ -109,10 +118,12 @@ void call() {
}
when {
beforeAgent true
expression { config.sourceFormat == SourceFormat.DESIGNER && config.stageFlags.edtValidate}
expression { config.sourceFormat == SourceFormat.DESIGNER && config.stageFlags.edtValidate }
}
steps {
designerToEdtFormatTransformation config
timeout(time: config.timeoutOptions.designerToEdtFormatTransformation, unit: TimeUnit.MINUTES) {
designerToEdtFormatTransformation config
}
}
}
}
@@ -131,7 +142,9 @@ void call() {
label 'edt'
}
steps {
edtValidate config
timeout(time: config.timeoutOptions.edtValidate, unit: TimeUnit.MINUTES) {
edtValidate config
}
}
}
@@ -140,7 +153,9 @@ void call() {
label 'oscript'
}
steps {
transform config
timeout(time: config.timeoutOptions.resultTransformation, unit: TimeUnit.MINUTES) {
transform config
}
}
}
}
@@ -155,9 +170,11 @@ void call() {
expression { config.stageFlags.bdd }
}
steps {
unzipInfobase()
bdd config
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()
bdd config
}
}
}
@@ -170,7 +187,9 @@ void call() {
expression { config.stageFlags.syntaxCheck }
}
steps {
syntaxCheck config
timeout(time: config.timeoutOptions.syntaxCheck, unit: TimeUnit.MINUTES) {
syntaxCheck config
}
}
}
@@ -183,9 +202,11 @@ void call() {
expression { config.stageFlags.smoke }
}
steps {
unzipInfobase()
timeout(time: config.timeoutOptions.smoke, unit: TimeUnit.MINUTES) {
unzipInfobase()
smoke config
smoke config
}
}
}
}
@@ -200,7 +221,9 @@ void call() {
expression { config.stageFlags.sonarqube }
}
steps {
sonarScanner config
timeout(time: config.timeoutOptions.sonarqube, unit: TimeUnit.MINUTES) {
sonarScanner config
}
}
}
}