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

WIP. Использование имеющейся ИБ #86

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,24 @@
1. Для запуска шага анализа SonarQube требуется агент с меткой `sonar`.
1. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой `edt` (если используется несколько версий EDT необходимо к метке добавить версию, например `[email protected]:x86_64`) и агент с меткой `oscript`, на котором глобально установлена библиотека [stebi](https://github.com/Stepa86/stebi) версии 1.9.1 или новее.
1. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле `v8version` файла конфигурации.
1. В качестве ИБ используется файловая база, создаваемая в каталоге `./build/ib`. При необходимости вы можете создать пользователей на фазе инициализации ИБ.

## Возможности

1. Все шаги можно запустить на базе docker-образов из https://github.com/firstBitSemenovskaya/onec-docker. См. [памятку по слоям и последовательности сборки](https://github.com/firstBitSemenovskaya/onec-docker/blob/feature/first-bit/Layers.md).
1. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT.
1. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников).
1. Запуск ИБ в режиме выполнения обработчиков обновления БСП.
1. Дополнительные шаги инициализации данных в ИБ.
1. Трансформация кода из формата конфигуратора в формат EDT.
1. Трансформация кода из формата EDT в формат конфигуратора.
1. Запуск BDD сценариев с сохранением результатов в формате Allure.
1. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
1. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
1. Запуск статического анализа для SonarQube.
1. Публикация результатов junit и Allure в интерфейс Jenkins.
1. Рассылка результатов сборки на почту и в Telegram.
1. Конфигурирование логгера запускаемых oscript-приложений.
2. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT.
3. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников).
Загрузка из файла *.dt с последующим обновлением из исходных файлов конфигурации или хранилища. Использование готовой базы.
4. Запуск ИБ в режиме выполнения обработчиков обновления БСП.
5. Дополнительные шаги инициализации данных в ИБ.
6. Трансформация кода из формата конфигуратора в формат EDT.
7. Трансформация кода из формата EDT в формат конфигуратора.
8. Запуск BDD сценариев с сохранением результатов в формате Allure.
9. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
10. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
11. Запуск статического анализа для SonarQube.
12. Публикация результатов junit и Allure в интерфейс Jenkins.
13. Рассылка результатов сборки на почту и в Telegram.
14. Конфигурирование логгера запускаемых oscript-приложений.

## Подключение

Expand Down
4 changes: 3 additions & 1 deletion resources/globalConfiguration.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"v8version": "8.3",
"edtVersion": "",
"srcDir": "src/cf",
"basePath": "",
"sourceFormat": "designer",
"defaultBranch": "main",
"secrets": {
Expand Down Expand Up @@ -37,7 +38,8 @@
"initInfobase": {
"initMethod": "fromStorage",
"runMigration": true,
"additionalInitializationSteps": []
"additionalInitializationSteps": [],
"vrunnerSettings": "./tools/vrunner.json"
},
"bdd": {
"vrunnerSteps": [
Expand Down
8 changes: 8 additions & 0 deletions resources/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
"type" : "string",
"description" : "Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту"
},
"basePath" : {
"type" : "string",
"description" : "Путь к базе для выполнения тестов"
},
"sourceFormat" : {
"type" : "string",
"description" : "Формат исходников конфигурации",
Expand Down Expand Up @@ -156,6 +160,10 @@
"items" : {
"type" : "string"
}
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ enum InitInfoBaseMethod {
@JsonProperty("fromSource")
FROM_SOURCE,

@JsonProperty("fromDT")
FROM_DT,

@JsonProperty("notInit")
NOT_INIT,

@JsonProperty("defaultBranchFromStorage")
DEFAULT_BRANCH_FROM_STORAGE

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

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

@Override
@NonCPS
String toString() {
return "InitInfoBaseOptions{" +
"initMethod=" + initMethod +
", runMigration=" + runMigration +
", additionalInitializationSteps=" + additionalInitializationSteps +
", vrunnerSettings=" + vrunnerSettings +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class JobConfiguration implements Serializable {
@JsonPropertyDescription("Путь к корневому каталогу с исходниками конфигурации, в случае хранения исходников в формате EDT, необходимо указать путь к проекту")
String srcDir

@JsonPropertyDescription("Путь к базе для выполнения тестов")
String basePath

@JsonPropertyDescription("Формат исходников конфигурации")
SourceFormat sourceFormat;

Expand Down Expand Up @@ -74,6 +77,7 @@ class JobConfiguration implements Serializable {
"v8version='" + v8version + '\'' +
", edtVersion='" + edtVersion + '\'' +
", srcDir='" + srcDir + '\'' +
", basePath='" + basePath + '\'' +
", sourceFormat=" + sourceFormat +
", stageFlags=" + stageFlags +
", timeoutOptions=" + timeoutOptions +
Expand Down Expand Up @@ -111,4 +115,13 @@ class JobConfiguration implements Serializable {
}
return edtVersionForRing
}

String baseName(){
String base = basePath
if (basePath == '') {
base = "/F./build.ib"
}

return base
}
}
3 changes: 2 additions & 1 deletion src/ru/pulsar/jenkins/library/steps/Bdd.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ class Bdd implements Serializable {
config.bddOptions.vrunnerSteps.each {
Logger.println("Шаг запуска сценариев командой ${it}")
String vrunnerPath = VRunner.getVRunnerPath();
VRunner.exec("$vrunnerPath ${it} --ibconnection \"/F./build/ib\"")
String base = config.baseName()
VRunner.exec("$vrunnerPath ${it} --ibconnection \"$base\"")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class DesignerToEdtFormatTransformation implements Serializable {
def env = steps.env();

def workspaceDir = "$env.WORKSPACE/$WORKSPACE"
def configurationRoot = new File(env.WORKSPACE, config.srcDir).getAbsolutePath()
def configurationRoot = "$env.WORKSPACE/$config.srcDir"
def edtVersionForRing = EDT.ringModule(config)

steps.deleteDir(workspaceDir)
Expand Down
4 changes: 4 additions & 0 deletions src/ru/pulsar/jenkins/library/steps/EdtValidate.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,9 @@ class EdtValidate implements Serializable {
steps.archiveArtifacts("$DesignerToEdtFormatTransformation.WORKSPACE/.metadata/.log")
steps.archiveArtifacts(RESULT_FILE)
steps.stash(RESULT_STASH, RESULT_FILE)
boolean succsessfullDeleted = new File(RESULT_FILE).delete()
if (succsessfullDeleted){
Logger.println("$RESULT_FILE успешно удален")
}
}
}
8 changes: 7 additions & 1 deletion src/ru/pulsar/jenkins/library/steps/InitFromFiles.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,13 @@ class InitFromFiles implements Serializable {

Logger.println("Выполнение загрузки конфигурации из файлов")
String vrunnerPath = VRunner.getVRunnerPath();
def initCommand = "$vrunnerPath init-dev --src $srcDir --ibconnection \"/F./build/ib\""
String base = config.baseName()
def initCommand = "$vrunnerPath init-dev --src $srcDir --ibconnection \"$base\""

String vrunnerSettings = config.initInfoBaseOptions.vrunnerSettings
if (steps.fileExists(vrunnerSettings) && config.basePath != '') {
initCommand += " --settings $vrunnerSettings"
}
VRunner.exec(initCommand)
}
}
3 changes: 2 additions & 1 deletion src/ru/pulsar/jenkins/library/steps/InitFromStorage.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ class InitFromStorage implements Serializable {
)
]) {
String vrunnerPath = VRunner.getVRunnerPath()
VRunner.exec "$vrunnerPath init-dev --storage $storageVersionParameter --ibconnection \"/F./build/ib\""
String base = config.baseName()
VRunner.exec "$vrunnerPath init-dev --storage $storageVersionParameter --ibconnection \"$base\""
}
}

Expand Down
9 changes: 5 additions & 4 deletions src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ class InitInfoBase implements Serializable {
executeParameter = '\\' + executeParameter
}
command += executeParameter;
command += ' --ibconnection "/F./build/ib"'
String base = config.baseName()
command += ' --ibconnection "$base"'

// Запуск миграции
steps.catchError {
VRunner.exec(command)
}
} else {
} else {F
Logger.println("Шаг миграции ИБ выключен")
}

Expand All @@ -57,12 +58,12 @@ class InitInfoBase implements Serializable {
files = files.sort new OrderBy( { it.name })
files.each {
Logger.println("Первичная инициализация файлом ${it.path}")
VRunner.exec("$vrunnerPath vanessa --settings ${it.path} --ibconnection \"/F./build/ib\"")
VRunner.exec("$vrunnerPath vanessa --settings ${it.path} --ibconnection \"${base}\"")
}
} else {
config.initInfoBaseOptions.additionalInitializationSteps.each {
Logger.println("Первичная инициализация командой ${it}")
VRunner.exec("$vrunnerPath ${it} --ibconnection \"/F./build/ib\"")
VRunner.exec("$vrunnerPath ${it} --ibconnection \"${base}\"")
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ class SmokeTest implements Serializable {
def env = steps.env()

String vrunnerPath = VRunner.getVRunnerPath()
String command = "$vrunnerPath xunit --ibconnection \"/F./build/ib\""
String base = config.baseName()
String command = "$vrunnerPath xunit --ibconnection \"$base\""

String vrunnerSettings = options.vrunnerSettings
if (steps.fileExists(vrunnerSettings)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ void testCreateJobConfigurationObject() throws IOException {
// then
assertThat(jobConfiguration.getV8version()).isEqualTo("8.3.14.1944");
assertThat(jobConfiguration.getEdtVersion()).isEqualTo("2021.3.4:x86_64");
assertThat(jobConfiguration.getBasePath()).isEqualTo("/sserver\\base");

assertThat(jobConfiguration.getSonarQubeOptions().getSonarScannerToolName()).isEqualTo("sonar-scanner");
assertThat(jobConfiguration.getSonarQubeOptions().getSonarQubeInstallation()).isEqualTo("qa");
Expand Down Expand Up @@ -109,6 +110,22 @@ void testEdtAgentLabel() throws IOException {
assertThat(jobConfiguration.edtAgentLabel()).isEqualTo("[email protected]:x86_64");
}

@Test
void testbaseName() throws IOException {
// given
String config = IOUtils.resourceToString(
"jobConfiguration.json",
StandardCharsets.UTF_8,
this.getClass().getClassLoader()
);

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

// then
assertThat(jobConfiguration.baseName()).isEqualTo("/sserver\\base");
}

@Disabled
void testInfoBaseFromFiles() throws IOException {
// given
Expand Down
1 change: 1 addition & 0 deletions test/unit/resources/jobConfiguration.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"v8version": "8.3.14.1944",
"edtVersion": "2021.3.4:x86_64",
"basePath" : "/sserver\\base",
"secrets": {
"storage": "1234"
},
Expand Down
23 changes: 18 additions & 5 deletions vars/pipeline1C.groovy
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/* groovylint-disable NestedBlockDepth */
import groovy.transform.Field
import ru.pulsar.jenkins.library.configuration.InitInfoBaseMethod
import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.configuration.SourceFormat
import ru.pulsar.jenkins.library.utils.RepoUtils
Expand Down Expand Up @@ -51,7 +52,7 @@ void call() {
stage('Подготовка 1C базы') {
when {
beforeAgent true
expression { config.stageFlags.needInfoBase() }
expression { config.stageFlags.needInfoBase() && config.initInfoBaseOptions.initMethod != InitInfoBaseMethod.NOT_INIT}
}

stages {
Expand Down Expand Up @@ -108,6 +109,10 @@ void call() {
}

stage('Архивация ИБ') {
when {
beforeAgent true
expression { config.basePath == '' }
}
steps {
timeout(time: config.timeoutOptions.zipInfoBase, unit: TimeUnit.MINUTES) {
printLocation()
Expand Down Expand Up @@ -181,9 +186,13 @@ void call() {
}
steps {
timeout(time: config.timeoutOptions.bdd, unit: TimeUnit.MINUTES) {
unzipInfobase()
script {
if (config.basePath == '') {
unzipInfobase()
}

bdd config
bdd config
}
}
}
}
Expand Down Expand Up @@ -213,9 +222,13 @@ void call() {
}
steps {
timeout(time: config.timeoutOptions.smoke, unit: TimeUnit.MINUTES) {
unzipInfobase()
script {
if (config.basePath == '') {
unzipInfobase()
}

smoke config
smoke config
}
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion vars/syntaxCheck.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ def call(JobConfiguration config) {
createDir(outPath)

String vrunnerPath = VRunner.getVRunnerPath();
String command = "$vrunnerPath syntax-check --ibconnection \"/F./build/ib\""
String base = config.baseName()
String command = "$vrunnerPath syntax-check --ibconnection \"$base\""

// Временно убрал передачу параметра.
// См. https://github.com/vanessa-opensource/vanessa-runner/issues/361
Expand Down