Skip to content

Commit

Permalink
подключение расширений на разных шагах
Browse files Browse the repository at this point in the history
исправление замечаний
  • Loading branch information
ovcharenko-di committed Mar 19, 2024
1 parent 13ce9cf commit 9f0a922
Show file tree
Hide file tree
Showing 11 changed files with 182 additions and 55 deletions.
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ pipeline1C()

* Общее:
* В качестве маски версии платформы используется строка "8.3" (`v8version`).
* По-умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
* По умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
* Исходники конфигурации ожидаются в каталоге `src/cf` (`srcDir`).
* Формат исходников - выгрузка из Конфигуратора (`sourceFormat`).
* Ветка по умолчанию (для комбинированного режима загрузки конфигурации) - "main" (`defaultBranch`).
Expand All @@ -133,8 +133,7 @@ pipeline1C()
* BDD:
* Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`.
* YAXUnit:
* Необходимо указать расширение YAXUnit и дополнительные расширения с тестами (опционально) в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ.
* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений.
* Если в репозитории существует файл `tools/yaxunit.json`, то он будет передан в качестве параметра для YAXUnit при запуске тестов. Если файла с таким именем нет, то в YAXUnit будет передан файл из текущей библиотеки `resources/yaxunit.json`. Он содержит минимально необходимые параметры и настроен на поиск сценариев в расширении с именем `YAXUnit`.
* Дымовые тесты:
* Если в репозитории существует файл `tools/vrunner.json`, то запуск дымовых тестов будет выполняться с передачей файла в параметры запуска `vrunner xunit --settings tools/vrunner.json` (`smoke` -> `vrunnerSettings`).
* Если установка локальных зависимостей `opm` установит пакет `add`, то будет использоваться обработка `xddTestRunner.epf` из локальных зависимостей.
Expand Down Expand Up @@ -171,7 +170,7 @@ pipeline1C()
* Telegram:
* Уведомления о результатах сборки по умолчанию рассылаются всегда (`notifications` -> `telegram` -> `onAlways`, `onFailure`, `onUnstable`, `onSuccess`).

## Конфигурирование загрузки расширений
## Настройка загрузки расширений

Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы.
* При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация.
Expand Down Expand Up @@ -203,4 +202,9 @@ pipeline1C()
}
]
}
```
```

## Настройка шага YAXUnit

* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ.
* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений.
1 change: 0 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ dependencies {

integrationTestImplementation("org.slf4j", "slf4j-api", slf4jVersion)
integrationTestImplementation("org.slf4j", "slf4j-simple", slf4jVersion)
integrationTestImplementation("org.springframework.security", "spring-security-core", "5.1.13.RELEASE")

}

Expand Down
3 changes: 1 addition & 2 deletions resources/globalConfiguration.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@
"initMethod": "fromStorage",
"runMigration": true,
"additionalInitializationSteps": [],
"extensions": [],
"vrunnerSettings": "./tools/vrunner.json"
"extensions": []
},
"bdd": {
"vrunnerSteps": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,6 @@ class ConfigurationReader implements Serializable {
"bddOptions",
"sonarQubeOptions",
"smokeTestOptions",
"yaxunitOptions",
"extensions",
"syntaxCheckOptions",
"resultsTransformOptions",
"notificationsOptions",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ class InitInfoBaseOptions implements Serializable {
@JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.")
Extension[] extensions

@JsonPropertyDescription("""Путь к конфигурационному файлу vanessa-runner.
По умолчанию содержит значение "./tools/vrunner.json".
""")
String vrunnerSettings

@JsonIgnoreProperties(ignoreUnknown = true)
static class Extension implements Serializable {
@JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.")
Expand All @@ -47,11 +42,18 @@ class InitInfoBaseOptions implements Serializable {
InitExtensionMethod initMethod = InitExtensionMethod.SOURCE

@JsonPropertyDescription("""
Хранит в себе путь к расширению.
Путь к расширению.
* В случае если выбран initMethod <fromSource> - указывается путь к исходникам расширения.
* В случае если выбран initMethod <fromFile> - указывается путь к cfe-файлу
""")
String path = "src/cfe/extension"

@JsonPropertyDescription("""
Шаги, на которых необходимо использовать расширение
* Если не заполнено, то расширение будет подключено при инициализации базы и останется в базе на всех последующих шагах.
* Если заполнено, то расширение будет подключено только на соответствующих шагах.
""")
String[] stages = ["initInfoBase"]
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,14 @@ class JobConfiguration implements Serializable {
(initMethod == InitInfoBaseMethod.DEFAULT_BRANCH_FROM_STORAGE && branchName != defaultBranch)
}

boolean needLoadExtensions() {
return initInfoBaseOptions.extensions.length != 0
boolean needLoadExtensions(String stageName = "") {
if (stageName.isEmpty()) {
return initInfoBaseOptions.extensions.length != 0
} else {
return initInfoBaseOptions.extensions.any { extension ->
extension.stages.contains(stageName)
}
}
}

String v8AgentLabel() {
Expand Down
36 changes: 32 additions & 4 deletions src/ru/pulsar/jenkins/library/steps/LoadExtensions.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,37 @@ import ru.pulsar.jenkins.library.utils.FileUtils
class LoadExtensions implements Serializable {

private final JobConfiguration config
private final String stageName

LoadExtensions(JobConfiguration config) {
LoadExtensions(JobConfiguration config, String stageName = "") {
this.config = config
this.stageName = stageName
}

def run() {
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()

Logger.printLocation()


Extension[] filteredExtensions
extensions = this.config.initInfoBaseOptions.extensions

if (this.stageName) {
filteredExtensions = extensions.findAll { extension ->
extension.stages.contains(this.stageName)
}
}
else {
filteredExtensions = extensions.findAll { extension -> extension.stages.empty || extension.stages.contains("initInfoBase") }
}

def env = steps.env()
String cfeDir = "$env.WORKSPACE/$GetExtensions.EXTENSIONS_OUT_DIR"

String vrunnerPath = VRunner.getVRunnerPath()
config.initInfoBaseOptions.extensions.each {

filteredExtensions.each {
Logger.println("Установим расширение ${it.name}")
loadExtension(it, vrunnerPath, steps, cfeDir)
}
Expand All @@ -47,7 +62,7 @@ class LoadExtensions implements Serializable {
loadCommand += executeParameter
loadCommand += ' --ibconnection "/F./build/ib"'

String vrunnerSettings = config.initInfoBaseOptions.vrunnerSettings
String vrunnerSettings = getVrunnerSettings(this.config, stageName)
if (steps.fileExists(vrunnerSettings)) {
loadCommand += " --settings $vrunnerSettings"
}
Expand All @@ -57,4 +72,17 @@ class LoadExtensions implements Serializable {
VRunner.exec(loadCommand)
}
}

private static String getVrunnerSettings(JobConfiguration jobConfiguration, String stageName) {

String optionsName = "${stageName.toLowerCase()}Options"

def optionsInstance = jobConfiguration."$optionsName"

if (optionsInstance) {
return optionsInstance."vrunnerSettings"
} else {
return ""
}
}
}
2 changes: 1 addition & 1 deletion src/ru/pulsar/jenkins/library/steps/PublishAllure.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class PublishAllure implements Serializable {
if (config.stageFlags.bdd) {
safeUnstash('bdd-allure')
}
if (config.stageFlags.yaxunit) {
if (config.stageFlags.yaxunit && config.yaxunitOptions.publishToAllureReport) {
safeUnstash(Yaxunit.YAXUNIT_ALLURE_STASH)
}
if (config.stageFlags.smoke && config.smokeTestOptions.publishToAllureReport) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package ru.pulsar.jenkins.library.steps;

import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import ru.pulsar.jenkins.library.IStepExecutor;
import ru.pulsar.jenkins.library.configuration.ConfigurationReader;
import ru.pulsar.jenkins.library.configuration.JobConfiguration;
import ru.pulsar.jenkins.library.utils.TestUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

import static org.assertj.core.api.Assertions.assertThat;


class LoadExtensionsTest {

@BeforeEach
void setUp() {
TestUtils.setupMockedContext();
}

@Test
void runYaxunit() throws IOException {

// given
String config = IOUtils.resourceToString(
"jobConfiguration.json",
StandardCharsets.UTF_8,
this.getClass().getClassLoader()
);

// when
JobConfiguration jobConfiguration = ConfigurationReader.create(config);

LoadExtensions loadExtensions = new LoadExtensions(jobConfiguration, "yaxunit");

// when
Object run = loadExtensions.run();

// assertThat(log.toString).(1);
}
}
4 changes: 2 additions & 2 deletions vars/loadExtensions.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.steps.LoadExtensions

def call(JobConfiguration config) {
def call(JobConfiguration config, String stageName = "") {
ContextRegistry.registerDefaultContext(this)

def loadExtensions = new LoadExtensions(config)
def loadExtensions = new LoadExtensions(config, stageName)
loadExtensions.run()
}
106 changes: 76 additions & 30 deletions vars/pipeline1C.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -196,18 +196,33 @@ void call() {
}

stage('BDD сценарии') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.bdd }

stage('Загрузка расширений в конфигурацию'){
when {
beforeAgent true
expression { config.needLoadExtensions('bdd') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'bdd'
}
}
}
steps {
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()

bdd config
stage('Выполнение BDD сценариев') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.bdd }
}
steps {
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()

bdd config
}
}
}
}
Expand All @@ -228,35 +243,66 @@ void call() {
}

stage('Дымовые тесты') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.smoke }

stage('Загрузка расширений в конфигурацию') {
when {
beforeAgent true
expression { config.needLoadExtensions('smoke') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'smoke'
}
}
}
steps {
timeout(time: config.timeoutOptions.smoke, unit: TimeUnit.MINUTES) {
unzipInfobase()

smoke config
stage('Выполнение дымовых тестов') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.smoke }
}
steps {
timeout(time: config.timeoutOptions.smoke, unit: TimeUnit.MINUTES) {
unzipInfobase()

smoke config
}
}
}
}

stage('YAXUnit тесты') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.yaxunit }

stage('Загрузка расширений в конфигурацию') {
when {
beforeAgent true
expression { config.needLoadExtensions('yaxunit') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'yaxunit'
}
}
}
steps {
timeout(time: config.timeoutOptions.yaxunit, unit: TimeUnit.MINUTES) {
unzipInfobase()

yaxunit config
stage('Выполнение YAXUnit тестов') {

agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.yaxunit }
}
steps {
timeout(time: config.timeoutOptions.yaxunit, unit: TimeUnit.MINUTES) {
unzipInfobase()

yaxunit config
}
}
}
}
Expand Down

0 comments on commit 9f0a922

Please sign in to comment.