You've already forked jenkins-lib
forked from jenkins/jenkins-lib
подключение расширений на разных шагах
исправление замечаний
This commit is contained in:
12
README.md
12
README.md
@@ -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 или конфигуратора) что и основная конфигурация.
|
||||
@@ -204,3 +203,8 @@ pipeline1C()
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Настройка шага YAXUnit
|
||||
|
||||
* Добавить расширение `YAXUnit` и дополнительные расширения с тестами можно в `jobConfiguration.json` -> `initInfobase` -> `extensions`. Они будут загружены при инициализации ИБ.
|
||||
* Если ваши тесты размещены в отдельных расширениях, скопируйте файл `./resources/yaxunit.json` из текущей библиотеки в свой репозиторий (`./tools/yaxunit.json`) и перечислите в нем имена ваших расширений.
|
||||
|
@@ -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")
|
||||
|
||||
}
|
||||
|
||||
|
@@ -42,8 +42,7 @@
|
||||
"initMethod": "fromStorage",
|
||||
"runMigration": true,
|
||||
"additionalInitializationSteps": [],
|
||||
"extensions": [],
|
||||
"vrunnerSettings": "./tools/vrunner.json"
|
||||
"extensions": []
|
||||
},
|
||||
"bdd": {
|
||||
"vrunnerSteps": [
|
||||
|
@@ -65,8 +65,6 @@ class ConfigurationReader implements Serializable {
|
||||
"bddOptions",
|
||||
"sonarQubeOptions",
|
||||
"smokeTestOptions",
|
||||
"yaxunitOptions",
|
||||
"extensions",
|
||||
"syntaxCheckOptions",
|
||||
"resultsTransformOptions",
|
||||
"notificationsOptions",
|
||||
|
@@ -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
|
||||
|
@@ -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() {
|
||||
|
@@ -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 ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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()
|
||||
}
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user