1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2025-08-25 20:09:25 +02:00

BDD шаг

This commit is contained in:
Nikita Gryzlov
2020-10-21 12:27:51 +03:00
committed by kuzja086
parent 83e2ac876b
commit d6e3b02085
12 changed files with 153 additions and 3 deletions

View File

@@ -8,6 +8,7 @@
"stages": {
"initSteps": false,
"sonarqube": false,
"bdd": false,
"syntaxCheck": false,
"edtValidate": false,
"smoke": false
@@ -16,6 +17,11 @@
"runMigration": true,
"additionalMigrationSteps": []
},
"bddOptions": {
"vrunnerSteps": [
"vanessa --settings ./tools/vrunner.json"
]
},
"sonarqube": {
"sonarQubeInstallation": "",
"useSonarScannerFromPath": true,

View File

@@ -49,6 +49,10 @@
"initSteps" : {
"type" : "boolean",
"description" : "Предварительные шаги инициализации включены"
},
"bdd" : {
"type" : "boolean",
"description" : "Запуск BDD сценариев включен"
}
}
},
@@ -63,7 +67,21 @@
},
"additionalMigrationSteps" : {
"type" : "array",
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"items" : {
"type" : "string"
}
}
}
},
"bddOptions" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions",
"description" : "Настройки шага запуска BDD сценариев",
"properties" : {
"vrunnerSteps" : {
"type" : "array",
"description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ",
"items" : {
"type" : "string"
}

View File

@@ -53,4 +53,6 @@ interface IStepExecutor {
def error(String errorMessage)
def allure(List<String> results)
def installLocalDependencies()
}

View File

@@ -128,4 +128,9 @@ class StepExecutor implements IStepExecutor {
results: ResultsConfig.convertPaths(results)
])
}
@Override
def installLocalDependencies() {
steps.installLocalDependencies()
}
}

View File

@@ -0,0 +1,26 @@
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 BddOptions implements Serializable {
@JsonPropertyDescription("""Шаги, запускаемые через vrunner.
В каждой строке передается отдельная команда
vrunner и ее аргументы (например, "vanessa --settings ./tools/vrunner.json").
По умолчанию содержит одну команду "vanessa --settings ./tools/vrunner.json".
""")
String[] vrunnerSteps = [
'vanessa --settings ./tools/vrunner.json'
]
@Override
@NonCPS
String toString() {
return "BddOptions{" +
"vrunnerSteps=" + vrunnerSteps +
'}';
}
}

View File

@@ -7,6 +7,8 @@ import org.apache.commons.beanutils.BeanUtils
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import javax.annotation.CheckForNull
class ConfigurationReader implements Serializable {
private static ObjectMapper mapper
@@ -42,6 +44,7 @@ class ConfigurationReader implements Serializable {
"secrets",
"stageFlags",
"initInfobaseOptions",
"bddOptions",
"sonarQubeOptions",
"syntaxCheckOptions",
"resultsTransformOptions"
@@ -49,6 +52,7 @@ class ConfigurationReader implements Serializable {
mergeObjects(baseConfiguration, configurationToMerge, nonMergeableSettings)
mergeInitInfobaseOptions(baseConfiguration.initInfobaseOptions, configurationToMerge.initInfobaseOptions);
mergeBddOptions(baseConfiguration.bddOptions, configurationToMerge.bddOptions);
return baseConfiguration;
}
@@ -74,7 +78,18 @@ class ConfigurationReader implements Serializable {
}
@NonCPS
private static void mergeInitInfobaseOptions(InitInfobaseOptions baseObject, InitInfobaseOptions objectToMerge) {
private static void mergeInitInfobaseOptions(InitInfobaseOptions baseObject, @CheckForNull InitInfobaseOptions objectToMerge) {
if (objectToMerge == null || objectToMerge.additionalMigrationSteps == null) {
return
}
baseObject.additionalMigrationSteps = objectToMerge.additionalMigrationSteps.clone()
}
@NonCPS
private static void mergeBddOptions(BddOptions baseObject, @CheckForNull BddOptions objectToMerge) {
if (objectToMerge == null || objectToMerge.vrunnerSteps == null) {
return
}
baseObject.vrunnerSteps = objectToMerge.vrunnerSteps.clone()
}
}

View File

@@ -24,6 +24,10 @@ class JobConfiguration implements Serializable {
@JsonPropertyDescription("Настройки шага инициализации ИБ")
InitInfobaseOptions initInfobaseOptions;
@JsonProperty("bddOptions")
@JsonPropertyDescription("Настройки шага запуска BDD сценариев")
BddOptions bddOptions;
@JsonProperty("sonarqube")
@JsonPropertyDescription("Настройки анализа SonarQube")
SonarQubeOptions sonarQubeOptions;
@@ -45,6 +49,7 @@ class JobConfiguration implements Serializable {
", stageFlags=" + stageFlags +
", secrets=" + secrets +
", initInfobaseOptions=" + initInfobaseOptions +
", bddOptions=" + bddOptions +
", sonarQubeOptions=" + sonarQubeOptions +
", syntaxCheckOptions=" + syntaxCheckOptions +
", resultsTransformOptions=" + resultsTransformOptions +

View File

@@ -21,6 +21,9 @@ class StageFlags implements Serializable {
@JsonPropertyDescription("Предварительные шаги инициализации включены")
boolean initSteps
@JsonPropertyDescription("Запуск BDD сценариев включен")
boolean bdd
@Override
@NonCPS
String toString() {
@@ -30,10 +33,11 @@ class StageFlags implements Serializable {
", edtValidate=" + edtValidate +
", smoke=" + smoke +
", initSteps=" + initSteps +
", bdd=" + bdd +
'}';
}
boolean needInfobase() {
return smoke || syntaxCheck || initSteps
return smoke || syntaxCheck || initSteps || bdd
}
}

View File

@@ -0,0 +1,46 @@
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 Bdd implements Serializable {
private final JobConfiguration config;
Bdd(JobConfiguration config) {
this.config = config
}
def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
Logger.printLocation()
if (!config.stageFlags.bdd) {
Logger.println("BDD step is disabled")
return
}
steps.installLocalDependencies()
steps.createDir('build/out')
// TODO: удалить после выхода VAS 1.0.35
steps.httpRequest(
'https://cloud.svc.pulsar.ru/index.php/s/WKwmqpFXSjfYjAH/download',
'oscript_modules/vanessa-automation-single/vanessa-automation-single.epf'
)
steps.catchError {
config.bddOptions.vrunnerSteps.each {
Logger.println("Шаг запуска сценариев командой ${it}")
steps.cmd("oscript_modules/bin/vrunner ${it} --ibconnection \"/F./build/ib\"")
}
}
steps.stash('bdd-allure', 'build/out/allure/**', true)
steps.stash('bdd-cucumber', 'build/out/cucumber/**', true)
}
}

View File

@@ -46,6 +46,8 @@ class ConfigurationReaderTest {
assertThat(jobConfiguration.getInitInfobaseOptions().getRunMigration()).isFalse();
assertThat(jobConfiguration.getInitInfobaseOptions().getAdditionalMigrationSteps()).contains("vanessa --settings ./tools/vrunner.first.json");
assertThat(jobConfiguration.getBddOptions().getVrunnerSteps()).contains("vanessa --settings ./tools/vrunner.json");
}
}

10
vars/bdd.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.Bdd
def call(JobConfiguration config) {
ContextRegistry.registerDefaultContext(this)
def bdd = new Bdd(config)
bdd.run()
}

View File

@@ -113,6 +113,17 @@ void call() {
}
}
stage('BDD сценарии') {
when {
beforeAgent true
expression { config.stageFlags.bdd }
}
steps {
// Инициализация и первичная миграция
bdd config
}
}
stage('Синтаксический контроль') {
agent {
label agent1C