Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Загрузка расширений в конфигурацию для прогона тестов. #104

Merged
merged 79 commits into from
Mar 17, 2024
Merged
Show file tree
Hide file tree
Changes from 37 commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
f864660
Добавил загрузку расширений в конфу.
Jan 19, 2024
c70b461
Допиал ридми
Jan 19, 2024
b2a7aee
Для тестов но наугад.
Jan 19, 2024
20c4bcc
add filter
Jan 19, 2024
e512a03
Поправил ридми
Jan 22, 2024
4d7efed
Поменял хак на нормальный метод.
Jan 22, 2024
ea96d97
В предыдущей итерации не работает, возможно создается абсолютный путь…
Jan 22, 2024
ea98885
В предыдущей итерации не работает, возможно создается абсолютный путь…
Jan 22, 2024
9f279c0
Нет, так тоже не работает )
Jan 22, 2024
c2d9a20
Добавлен deleteDir() для типа FilePath
Feb 20, 2024
5088976
Squashed commit of the following:
Feb 20, 2024
ca6a31e
Merge branch 'develop' into develop
Segate-ekb Feb 20, 2024
4aa5070
Фиксы части замечаний
Feb 20, 2024
476bab0
Merge remote-tracking branch 'origin/develop' into develop
Feb 20, 2024
5eb94cb
Фиксы части замечаний
Feb 20, 2024
1140af1
ренейм initMethod -> InitExtentionMethod
Feb 20, 2024
cfa9d47
Фикс зависимостей
Feb 20, 2024
4fe9a0c
Сменил кавычки в тесте
Feb 20, 2024
262cd7a
Merge pull request #111 from ivanmolodec/develop
nixel2007 Feb 20, 2024
9f03c79
Исправление опечатки
Feb 26, 2024
6ac28af
Edt transformation fix (#2)
ivanmolodec Mar 1, 2024
d73b9a9
Добавление шага ringCommand
Mar 6, 2024
0fd8cae
Смена шага cmd на ringCommand
Mar 6, 2024
bef4a4e
Рефакторинг для перехода на ringCommand
Mar 7, 2024
ad528ca
Merge pull request #113 from ivanmolodec/develop
nixel2007 Mar 9, 2024
9a40360
Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOption…
Segate-ekb Mar 14, 2024
1549b21
Update vars/pipeline1C.groovy
Segate-ekb Mar 14, 2024
5074264
Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOption…
Segate-ekb Mar 14, 2024
46cd1ee
Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransfo…
Segate-ekb Mar 14, 2024
9347ab5
Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransfo…
Segate-ekb Mar 14, 2024
25bc817
Форматирование.
Mar 14, 2024
237f27b
Merge remote-tracking branch 'origin/develop' into develop
Mar 14, 2024
ce77557
small fix
Mar 14, 2024
93af3ff
typo
Mar 14, 2024
626333a
замена . на WORKSPACE
Mar 14, 2024
c30558c
тест
Mar 14, 2024
2200c8d
заменил http на isvalidurl
Mar 14, 2024
569eba5
Фикс грязного хака
Mar 14, 2024
09b885b
Зменил проверку . на ./
Mar 14, 2024
1995174
тест
Mar 14, 2024
923725a
Добавил приведение к абсолютному пути.
Mar 14, 2024
3168937
fix
Mar 14, 2024
21538ea
small fixes
Mar 14, 2024
94887b4
Обновил картинку в ридми
Mar 14, 2024
aafa4a4
добавил в описание возможностей
Mar 15, 2024
1aae48b
Добавил загрузку расширений в конфу.
Jan 19, 2024
0bed554
Допиал ридми
Jan 19, 2024
dc1c14d
Для тестов но наугад.
Jan 19, 2024
819b19b
add filter
Jan 19, 2024
7d16c50
Поправил ридми
Jan 22, 2024
276c54a
Поменял хак на нормальный метод.
Jan 22, 2024
0049cd6
В предыдущей итерации не работает, возможно создается абсолютный путь…
Jan 22, 2024
3fcd5ce
В предыдущей итерации не работает, возможно создается абсолютный путь…
Jan 22, 2024
3b3593b
Нет, так тоже не работает )
Jan 22, 2024
4f353a3
Фиксы части замечаний
Feb 20, 2024
c0f4ab8
Фиксы части замечаний
Feb 20, 2024
7714b4b
ренейм initMethod -> InitExtentionMethod
Feb 20, 2024
d9c273a
Фикс зависимостей
Feb 20, 2024
c36861e
Сменил кавычки в тесте
Feb 20, 2024
870d537
Исправление опечатки
Feb 26, 2024
544e6da
Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOption…
Segate-ekb Mar 14, 2024
080594e
Update vars/pipeline1C.groovy
Segate-ekb Mar 14, 2024
9f81e09
Update src/ru/pulsar/jenkins/library/configuration/InitInfoBaseOption…
Segate-ekb Mar 14, 2024
3d51a22
Форматирование.
Mar 14, 2024
5d58803
Update src/ru/pulsar/jenkins/library/steps/EdtToDesignerFormatTransfo…
Segate-ekb Mar 14, 2024
405ab76
small fix
Mar 14, 2024
0f758ce
typo
Mar 14, 2024
9316311
замена . на WORKSPACE
Mar 14, 2024
2bfb7c8
тест
Mar 14, 2024
8b9f047
заменил http на isvalidurl
Mar 14, 2024
ccfbc7c
Фикс грязного хака
Mar 14, 2024
33b3066
Зменил проверку . на ./
Mar 14, 2024
f45622d
тест
Mar 14, 2024
f846295
Добавил приведение к абсолютному пути.
Mar 14, 2024
ebb7afe
fix
Mar 14, 2024
b91b610
small fixes
Mar 14, 2024
7c9f94c
Обновил картинку в ридми
Mar 14, 2024
80ef2dc
добавил в описание возможностей
Mar 15, 2024
d13caf5
Merge remote-tracking branch 'origin/develop' into develop
Mar 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 35 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ pipeline1C()

## Внешний вид пайплайна в интерфейсе Blue Ocean
Segate-ekb marked this conversation as resolved.
Show resolved Hide resolved

![image](https://user-images.githubusercontent.com/1132840/140793320-d0856afe-0864-4f0e-8964-6a9d6d5822b4.png)
![image](https://github.com/firstBitMarksistskaya/jenkins-lib/assets/80944823/e34a0112-2fe5-4116-92ac-8fcca08bba43)

## Конфигурирование

Expand Down Expand Up @@ -165,3 +165,37 @@ pipeline1C()
* Прямые получатели уведомлений не заполнены (`notifications` -> `email` -> `*options` -> `directRecipients`).
* Telegram:
* Уведомления о результатах сборки по умолчанию рассылаются всегда (`notifications` -> `telegram` -> `onAlways`, `onFailure`, `onUnstable`, `onSuccess`).

## Конфигурирование загрузки расширений
Segate-ekb marked this conversation as resolved.
Show resolved Hide resolved

Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы.
* При загрузке из исходников расширения должны быть в том же формате(edt или конфигуратора) что и основная конфигурация.
* Для загрузки расширений необходимо описать каждое из них в массиве (`initInfobase` -> `extensions`)

Для загрузки расширений в информационную базу необходимо выполнить следующие шаги:

1. Укажите имя расширения(`extensions` -> `name`).
1. Определите метод загрузки для каждого расширения(`extensions` -> `initMethod`). Поддерживаются два метода загрузки:
- `fromSource` - загрузка из исходников;
- `fromFile` - загрузка cfe-файла.
1. Укажите путь до расширения или URL для скачивания cfe-файла(`extensions` -> `path`).
- В случае загрузки из исходников - необходимо указать путь к исходникам расширения
- В случае загрузки cfe - Укажите путь по которому будет скачан cfe. На данный момент можно указывать как локальный путь, так и url для скачивания cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe)

Пример конфигурации для загрузки расширений:
```json
"initInfobase": {
"extensions": [
{
"name": "ИмяРасширения1",
"initMethod": "fromSource",
"path": "путь/до/исходников/расширения"
},
{
"name": "ИмяРасширения2",
"initMethod": "fromFile",
"path": "https://example.com/path/to/extension.cfe"
}
]
}
```
Segate-ekb marked this conversation as resolved.
Show resolved Hide resolved
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ dependencies {

testImplementation("org.slf4j", "slf4j-api", slf4jVersion)
testImplementation("org.slf4j", "slf4j-simple", slf4jVersion)

// integration-tests
integrationTestImplementation("org.spockframework", "spock-core", spockVersion)
integrationTestImplementation("org.codehaus.groovy", "groovy-all", groovyVersion)
Expand Down
5 changes: 4 additions & 1 deletion resources/globalConfiguration.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@
"timeout": {
"smoke": 240,
"bdd": 120,
"getBinaries": 60,
"createInfoBase": 60,
"designerToEdtFormatTransformation": 60,
"edtToDesignerFormatTransformation": 60,
"edtValidate": 240,
"initInfoBase": 60,
"loadExtensions": 60,
"resultTransformation": 10,
"sonarqube": 90,
"syntaxCheck": 240,
Expand All @@ -37,7 +39,8 @@
"initInfobase": {
"initMethod": "fromStorage",
"runMigration": true,
"additionalInitializationSteps": []
"additionalInitializationSteps": [],
"extensions": []
},
"bdd": {
"vrunnerSteps": [
Expand Down
645 changes: 341 additions & 304 deletions resources/schema.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class ConfigurationReader implements Serializable {
"stageFlags",
"timeoutOptions",
"initInfoBaseOptions",
"extensions",
"bddOptions",
"sonarQubeOptions",
"smokeTestOptions",
Expand Down Expand Up @@ -113,12 +114,30 @@ class ConfigurationReader implements Serializable {

@NonCPS
private static void mergeInitInfoBaseOptions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) {
if (objectToMerge == null || objectToMerge.additionalInitializationSteps == null) {
Segate-ekb marked this conversation as resolved.
Show resolved Hide resolved
if (objectToMerge == null) {
return
}
mergeInitInfoBaseAdditionalInitializationSteps(baseObject, objectToMerge)
mergeInitInfoBaseExtensions(baseObject, objectToMerge)
}

@NonCPS
private static void mergeInitInfoBaseAdditionalInitializationSteps(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) {
if (objectToMerge.additionalInitializationSteps == null) {
return
}
baseObject.additionalInitializationSteps = objectToMerge.additionalInitializationSteps.clone()
}


@NonCPS
private static void mergeInitInfoBaseExtensions(InitInfoBaseOptions baseObject, InitInfoBaseOptions objectToMerge) {
if (objectToMerge.extensions == null) {
return
}
baseObject.extensions = objectToMerge.extensions.clone()
}

@NonCPS
private static void mergeBddOptions(BddOptions baseObject, BddOptions objectToMerge) {
if (objectToMerge == null || objectToMerge.vrunnerSteps == null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.pulsar.jenkins.library.configuration

import com.fasterxml.jackson.annotation.JsonProperty

enum InitExtensionMethod {
@JsonProperty("fromSource")
SOURCE,

@JsonProperty("fromFile")
FILE

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,38 @@ class InitInfoBaseOptions implements Serializable {
""")
String[] additionalInitializationSteps

@JsonPropertyDescription("Массив расширений для загрузки в конфигурацию.")
Extension[] extensions;

@JsonIgnoreProperties(ignoreUnknown = true)
static class Extension implements Serializable {
@JsonPropertyDescription("Имя расширения, используемое при его загрузке в конфигурацию.")
String name = "extension";

@JsonPropertyDescription("""
Способ инициализации расширения.
Поддерживается два варианта:
* fromSource - инициализация расширения из исходников;
* fromFile - скачивание скомпилированного cfe по ссылке.
""")
InitExtensionMethod initMethod = InitExtensionMethod.SOURCE;

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

@Override
@NonCPS
String toString() {
return "InitInfoBaseOptions{" +
"initMethod=" + initMethod +
", runMigration=" + runMigration +
", additionalInitializationSteps=" + additionalInitializationSteps +
", extensions=" + extensions +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ class JobConfiguration implements Serializable {
(initMethod == InitInfoBaseMethod.DEFAULT_BRANCH_FROM_STORAGE && branchName != defaultBranch)
}

boolean needLoadExtensions() {
return initInfoBaseOptions.extensions.length != 0
}

String v8AgentLabel() {
return v8version
}
Expand Down
10 changes: 10 additions & 0 deletions src/ru/pulsar/jenkins/library/configuration/TimeoutOptions.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ class TimeoutOptions implements Serializable {
''')
Integer edtToDesignerFormatTransformation

@JsonPropertyDescription('''Таймаут шага получения бинарников, в минутах.
По умолчанию содержит значение 60.
''')
Integer getBinaries

@JsonPropertyDescription('''Таймаут шага создания информационной базы, в минутах.
По умолчанию содержит значение 60.
''')
Expand All @@ -21,6 +26,11 @@ class TimeoutOptions implements Serializable {
''')
Integer initInfoBase

@JsonPropertyDescription('''Таймаут шага загрузки расширений в базу, в минутах.
По умолчанию содержит значение 60.
''')
Integer loadExtensions

@JsonPropertyDescription('''Таймаут шага архивирования информационной базы, в минутах.
По умолчанию содержит значение 60.
''')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package ru.pulsar.jenkins.library.steps
import ru.pulsar.jenkins.library.IStepExecutor
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.configuration.InitExtensionMethod
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.Constants
import ru.pulsar.jenkins.library.utils.EDT
Expand All @@ -16,6 +17,9 @@ class EdtToDesignerFormatTransformation implements Serializable {
public static final String CONFIGURATION_DIR = 'build/cfg'
public static final String CONFIGURATION_ZIP = 'build/cfg.zip'
public static final String CONFIGURATION_ZIP_STASH = 'cfg-zip'
public static final String EXTENSION_DIR = 'build/cfe_src'
public static final String EXTENSION_ZIP = 'build/cfe_src.zip'
public static final String EXTENSION_ZIP_STASH = 'cfe_src-zip'

private final JobConfiguration config;

Expand All @@ -35,18 +39,30 @@ class EdtToDesignerFormatTransformation implements Serializable {

def env = steps.env();

def srcDir = config.srcDir
def projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir")
def workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE")
def configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR")
String srcDir = config.srcDir
String workspaceDir = FileUtils.getFilePath("$env.WORKSPACE/$WORKSPACE").getRemote()

String projectWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cf").getRemote()
String projectDir = FileUtils.getFilePath("$env.WORKSPACE/$srcDir").getRemote()
String configurationRoot = FileUtils.getFilePath("$env.WORKSPACE/$CONFIGURATION_DIR").getRemote()


String extensionRoot = FileUtils.getFilePath("$env.WORKSPACE/$EXTENSION_DIR").getRemote()
def edtVersionForRing = EDT.ringModule(config)

steps.deleteDir(workspaceDir.getRemote())
steps.deleteDir(configurationRoot.getRemote())
steps.deleteDir(workspaceDir)
steps.deleteDir(configurationRoot)

transformConfiguration(steps, projectDir, projectWorkspaceDir, configurationRoot, edtVersionForRing)
transformExtensions(steps, workspaceDir, extensionRoot, edtVersionForRing)
}
Segate-ekb marked this conversation as resolved.
Show resolved Hide resolved

private void transformConfiguration(IStepExecutor steps, String projectDir, String projectWorkspaceDir, String configurationRoot, String edtVersionForRing) {

Logger.println("Конвертация исходников из формата EDT в формат Конфигуратора")
Logger.println("Конвертация исходников конфигурации из формата EDT в формат Конфигуратора")
steps.deleteDir(configurationRoot)

def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$workspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""
def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$projectWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$configurationRoot\""

def ringOpts = [Constants.DEFAULT_RING_OPTS]
steps.withEnv(ringOpts) {
Expand All @@ -57,4 +73,30 @@ class EdtToDesignerFormatTransformation implements Serializable {
steps.stash(CONFIGURATION_ZIP_STASH, CONFIGURATION_ZIP)
}

private void transformExtensions(IStepExecutor steps, String workspaceDir, String extensionRoot, String edtVersionForRing) {
steps.deleteDir(extensionRoot)

config.initInfoBaseOptions.extensions.each {

if (it.initMethod != InitExtensionMethod.SOURCE) {
return
}

Logger.println("Конвертация исходников расширения ${it.name} из формата EDT в формат Конфигуратора")

def env = steps.env();
def projectDir = FileUtils.getFilePath("$env.WORKSPACE/${it.path}")
def currentExtensionWorkspaceDir = FileUtils.getFilePath("$workspaceDir/cfe/${it.name}")
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved

def ringCommand = "ring $edtVersionForRing workspace export --workspace-location \"$currentExtensionWorkspaceDir\" --project \"$projectDir\" --configuration-files \"$extensionRoot/${it.name}\""

def ringOpts = [Constants.DEFAULT_RING_OPTS]
steps.withEnv(ringOpts) {
steps.cmd(ringCommand)
}
}
steps.zip(EXTENSION_DIR, EXTENSION_ZIP)
steps.stash(EXTENSION_ZIP_STASH, EXTENSION_ZIP)
}

}
Loading