You've already forked jenkins-lib
forked from jenkins/jenkins-lib
BDD шаг
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
"stages": {
|
"stages": {
|
||||||
"initSteps": false,
|
"initSteps": false,
|
||||||
"sonarqube": false,
|
"sonarqube": false,
|
||||||
|
"bdd": false,
|
||||||
"syntaxCheck": false,
|
"syntaxCheck": false,
|
||||||
"edtValidate": false,
|
"edtValidate": false,
|
||||||
"smoke": false
|
"smoke": false
|
||||||
@@ -16,6 +17,11 @@
|
|||||||
"runMigration": true,
|
"runMigration": true,
|
||||||
"additionalMigrationSteps": []
|
"additionalMigrationSteps": []
|
||||||
},
|
},
|
||||||
|
"bddOptions": {
|
||||||
|
"vrunnerSteps": [
|
||||||
|
"vanessa --settings ./tools/vrunner.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
"sonarqube": {
|
"sonarqube": {
|
||||||
"sonarQubeInstallation": "",
|
"sonarQubeInstallation": "",
|
||||||
"useSonarScannerFromPath": true,
|
"useSonarScannerFromPath": true,
|
||||||
|
@@ -49,6 +49,10 @@
|
|||||||
"initSteps" : {
|
"initSteps" : {
|
||||||
"type" : "boolean",
|
"type" : "boolean",
|
||||||
"description" : "Предварительные шаги инициализации включены"
|
"description" : "Предварительные шаги инициализации включены"
|
||||||
|
},
|
||||||
|
"bdd" : {
|
||||||
|
"type" : "boolean",
|
||||||
|
"description" : "Запуск BDD сценариев включен"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -63,7 +67,21 @@
|
|||||||
},
|
},
|
||||||
"additionalMigrationSteps" : {
|
"additionalMigrationSteps" : {
|
||||||
"type" : "array",
|
"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" : {
|
"items" : {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
}
|
}
|
||||||
|
@@ -53,4 +53,6 @@ interface IStepExecutor {
|
|||||||
def error(String errorMessage)
|
def error(String errorMessage)
|
||||||
|
|
||||||
def allure(List<String> results)
|
def allure(List<String> results)
|
||||||
|
|
||||||
|
def installLocalDependencies()
|
||||||
}
|
}
|
@@ -128,4 +128,9 @@ class StepExecutor implements IStepExecutor {
|
|||||||
results: ResultsConfig.convertPaths(results)
|
results: ResultsConfig.convertPaths(results)
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
def installLocalDependencies() {
|
||||||
|
steps.installLocalDependencies()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@@ -7,6 +7,8 @@ import org.apache.commons.beanutils.BeanUtils
|
|||||||
import ru.pulsar.jenkins.library.IStepExecutor
|
import ru.pulsar.jenkins.library.IStepExecutor
|
||||||
import ru.pulsar.jenkins.library.ioc.ContextRegistry
|
import ru.pulsar.jenkins.library.ioc.ContextRegistry
|
||||||
|
|
||||||
|
import javax.annotation.CheckForNull
|
||||||
|
|
||||||
class ConfigurationReader implements Serializable {
|
class ConfigurationReader implements Serializable {
|
||||||
|
|
||||||
private static ObjectMapper mapper
|
private static ObjectMapper mapper
|
||||||
@@ -42,6 +44,7 @@ class ConfigurationReader implements Serializable {
|
|||||||
"secrets",
|
"secrets",
|
||||||
"stageFlags",
|
"stageFlags",
|
||||||
"initInfobaseOptions",
|
"initInfobaseOptions",
|
||||||
|
"bddOptions",
|
||||||
"sonarQubeOptions",
|
"sonarQubeOptions",
|
||||||
"syntaxCheckOptions",
|
"syntaxCheckOptions",
|
||||||
"resultsTransformOptions"
|
"resultsTransformOptions"
|
||||||
@@ -49,6 +52,7 @@ class ConfigurationReader implements Serializable {
|
|||||||
|
|
||||||
mergeObjects(baseConfiguration, configurationToMerge, nonMergeableSettings)
|
mergeObjects(baseConfiguration, configurationToMerge, nonMergeableSettings)
|
||||||
mergeInitInfobaseOptions(baseConfiguration.initInfobaseOptions, configurationToMerge.initInfobaseOptions);
|
mergeInitInfobaseOptions(baseConfiguration.initInfobaseOptions, configurationToMerge.initInfobaseOptions);
|
||||||
|
mergeBddOptions(baseConfiguration.bddOptions, configurationToMerge.bddOptions);
|
||||||
|
|
||||||
return baseConfiguration;
|
return baseConfiguration;
|
||||||
}
|
}
|
||||||
@@ -74,7 +78,18 @@ class ConfigurationReader implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonCPS
|
@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()
|
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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,10 @@ class JobConfiguration implements Serializable {
|
|||||||
@JsonPropertyDescription("Настройки шага инициализации ИБ")
|
@JsonPropertyDescription("Настройки шага инициализации ИБ")
|
||||||
InitInfobaseOptions initInfobaseOptions;
|
InitInfobaseOptions initInfobaseOptions;
|
||||||
|
|
||||||
|
@JsonProperty("bddOptions")
|
||||||
|
@JsonPropertyDescription("Настройки шага запуска BDD сценариев")
|
||||||
|
BddOptions bddOptions;
|
||||||
|
|
||||||
@JsonProperty("sonarqube")
|
@JsonProperty("sonarqube")
|
||||||
@JsonPropertyDescription("Настройки анализа SonarQube")
|
@JsonPropertyDescription("Настройки анализа SonarQube")
|
||||||
SonarQubeOptions sonarQubeOptions;
|
SonarQubeOptions sonarQubeOptions;
|
||||||
@@ -45,6 +49,7 @@ class JobConfiguration implements Serializable {
|
|||||||
", stageFlags=" + stageFlags +
|
", stageFlags=" + stageFlags +
|
||||||
", secrets=" + secrets +
|
", secrets=" + secrets +
|
||||||
", initInfobaseOptions=" + initInfobaseOptions +
|
", initInfobaseOptions=" + initInfobaseOptions +
|
||||||
|
", bddOptions=" + bddOptions +
|
||||||
", sonarQubeOptions=" + sonarQubeOptions +
|
", sonarQubeOptions=" + sonarQubeOptions +
|
||||||
", syntaxCheckOptions=" + syntaxCheckOptions +
|
", syntaxCheckOptions=" + syntaxCheckOptions +
|
||||||
", resultsTransformOptions=" + resultsTransformOptions +
|
", resultsTransformOptions=" + resultsTransformOptions +
|
||||||
|
@@ -21,6 +21,9 @@ class StageFlags implements Serializable {
|
|||||||
@JsonPropertyDescription("Предварительные шаги инициализации включены")
|
@JsonPropertyDescription("Предварительные шаги инициализации включены")
|
||||||
boolean initSteps
|
boolean initSteps
|
||||||
|
|
||||||
|
@JsonPropertyDescription("Запуск BDD сценариев включен")
|
||||||
|
boolean bdd
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NonCPS
|
@NonCPS
|
||||||
String toString() {
|
String toString() {
|
||||||
@@ -30,10 +33,11 @@ class StageFlags implements Serializable {
|
|||||||
", edtValidate=" + edtValidate +
|
", edtValidate=" + edtValidate +
|
||||||
", smoke=" + smoke +
|
", smoke=" + smoke +
|
||||||
", initSteps=" + initSteps +
|
", initSteps=" + initSteps +
|
||||||
|
", bdd=" + bdd +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean needInfobase() {
|
boolean needInfobase() {
|
||||||
return smoke || syntaxCheck || initSteps
|
return smoke || syntaxCheck || initSteps || bdd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
46
src/ru/pulsar/jenkins/library/steps/Bdd.groovy
Normal file
46
src/ru/pulsar/jenkins/library/steps/Bdd.groovy
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
@@ -46,6 +46,8 @@ class ConfigurationReaderTest {
|
|||||||
|
|
||||||
assertThat(jobConfiguration.getInitInfobaseOptions().getRunMigration()).isFalse();
|
assertThat(jobConfiguration.getInitInfobaseOptions().getRunMigration()).isFalse();
|
||||||
assertThat(jobConfiguration.getInitInfobaseOptions().getAdditionalMigrationSteps()).contains("vanessa --settings ./tools/vrunner.first.json");
|
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
10
vars/bdd.groovy
Normal 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()
|
||||||
|
}
|
@@ -113,6 +113,17 @@ void call() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stage('BDD сценарии') {
|
||||||
|
when {
|
||||||
|
beforeAgent true
|
||||||
|
expression { config.stageFlags.bdd }
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
// Инициализация и первичная миграция
|
||||||
|
bdd config
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stage('Синтаксический контроль') {
|
stage('Синтаксический контроль') {
|
||||||
agent {
|
agent {
|
||||||
label agent1C
|
label agent1C
|
||||||
|
Reference in New Issue
Block a user