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

подключение расширений на разных шагах

исправление замечаний
This commit is contained in:
Dima
2024-03-19 14:54:33 +03:00
parent 13ce9cfcf8
commit 9f0a9221dd
11 changed files with 185 additions and 58 deletions

View File

@@ -108,7 +108,7 @@ pipeline1C()
* Общее:
* В качестве маски версии платформы используется строка "8.3" (`v8version`).
* По-умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
* По умолчанию версия модуля EDT не заполнена, т.к. в случае единственной версии для утилиты ring дополнительного указания не требуется (`edtVersion`).
* Исходники конфигурации ожидаются в каталоге `src/cf` (`srcDir`).
* Формат исходников - выгрузка из Конфигуратора (`sourceFormat`).
* Ветка по умолчанию (для комбинированного режима загрузки конфигурации) - "main" (`defaultBranch`).
@@ -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` из локальных зависимостей.
@@ -171,7 +170,7 @@ pipeline1C()
* Telegram:
* Уведомления о результатах сборки по умолчанию рассылаются всегда (`notifications` -> `telegram` -> `onAlways`, `onFailure`, `onUnstable`, `onSuccess`).
## Конфигурирование загрузки расширений
## Настройка загрузки расширений
Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы.
* При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация.
@@ -203,4 +202,9 @@ pipeline1C()
}
]
}
```
```
## Настройка шага YAXUnit
* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ.
* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений.

View File

@@ -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")
}

View File

@@ -42,8 +42,7 @@
"initMethod": "fromStorage",
"runMigration": true,
"additionalInitializationSteps": [],
"extensions": [],
"vrunnerSettings": "./tools/vrunner.json"
"extensions": []
},
"bdd": {
"vrunnerSteps": [

View File

@@ -65,8 +65,6 @@ class ConfigurationReader implements Serializable {
"bddOptions",
"sonarQubeOptions",
"smokeTestOptions",
"yaxunitOptions",
"extensions",
"syntaxCheckOptions",
"resultsTransformOptions",
"notificationsOptions",

View File

@@ -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("Имя расширения, используемое при его загрузке в конфигурацию.")
@@ -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

View File

@@ -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() {

View File

@@ -12,9 +12,11 @@ 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() {
@@ -22,12 +24,25 @@ class LoadExtensions implements Serializable {
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)
}
@@ -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"
}
@@ -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 ""
}
}
}

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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()
}

View File

@@ -196,18 +196,33 @@ void call() {
}
stage('BDD сценарии') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.bdd }
}
steps {
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()
bdd config
stage('Загрузка расширений в конфигурацию'){
when {
beforeAgent true
expression { config.needLoadExtensions('bdd') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'bdd'
}
}
}
stage('Выполнение BDD сценариев') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.bdd }
}
steps {
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()
bdd config
}
}
}
}
@@ -228,35 +243,66 @@ void call() {
}
stage('Дымовые тесты') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.smoke }
}
steps {
timeout(time: config.timeoutOptions.smoke, unit: TimeUnit.MINUTES) {
unzipInfobase()
smoke config
stage('Загрузка расширений в конфигурацию') {
when {
beforeAgent true
expression { config.needLoadExtensions('smoke') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'smoke'
}
}
}
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 }
}
steps {
timeout(time: config.timeoutOptions.yaxunit, unit: TimeUnit.MINUTES) {
unzipInfobase()
yaxunit config
stage('Загрузка расширений в конфигурацию') {
when {
beforeAgent true
expression { config.needLoadExtensions('yaxunit') }
}
steps {
timeout(time: config.timeoutOptions.loadExtensions, unit: TimeUnit.MINUTES) {
loadExtensions config 'yaxunit'
}
}
}
stage('Выполнение YAXUnit тестов') {
agent {
label agent1C
}
when {
beforeAgent true
expression { config.stageFlags.yaxunit }
}
steps {
timeout(time: config.timeoutOptions.yaxunit, unit: TimeUnit.MINUTES) {
unzipInfobase()
yaxunit config
}
}
}
}