Skip to content

Commit

Permalink
Merge branch 'release/v0.3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Jun 11, 2021
2 parents 4df3eae + 0a91cc3 commit d39e9d1
Show file tree
Hide file tree
Showing 26 changed files with 628 additions and 40 deletions.
37 changes: 33 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,23 @@
1. Для запуска шага анализа SonarQube требуется агент с меткой `sonar`.
1. Для запуска шага валидации EDT требуется агент с меткой `edt` (для собственно валидации) и агент с меткой `oscript` (для трансформации результатов с помощью библиотеки [stebi](https://github.com/Stepa86/stebi)).
1. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле `v8version` файла конфигурации.
1. В качестве ИБ используется файловая база, создаваемая в `./build/ib`, без данных авторизации. Переопределение "в следующих сериях".
1. В качестве ИБ используется файловая база, создаваемая в `./build/ib` на основании конфигурации из хранилища без пользователей. При необходимости вы можете создать пользователей на фазе инициализации ИБ.
1. Stage "Дымовые тесты" пока пустой.
1. Запуск `vrunner` на текущий момент происходит из локального каталога `oscript_modules`. Предполагается наличие в корне репозитория файла `packagedef`, в котором бы была указана зависимость от `vanessa-runner`

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

1. Все шаги можно запустить на базе docker-образов из форка репозитория onec-docker. См. [памятку по слоям и последовательности сборки](https://github.com/firstBitSemenovskaya/onec-docker/blob/feature/first-bit/Layers.md)
1. Трансформация кода из формата конфигуратора в формат EDT (только если включен шаг `edtValidate`).
1. Подготовка информационной базы по версии из хранилища конфигурации.
1. Запуск ИБ в режиме выполнения обработчиков обновления БСП.
1. Дополнительные шаги инициализации данных в ИБ.
1. Трансформация кода из формата конфигуратора в формат EDT (только если включен шаг `edtValidate`).
1. Запуск BDD сценариев с сохранением результатов в формате Allure.
1. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
1. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
1. Запуск статического анализа для SonarQube
1. Запуск статического анализа для SonarQube.
1. Публикация результатов junit и Allure в интерфейс Jenkins.
1. Конфигурирование логгера запускаемых oscript-приложений.

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

Expand All @@ -60,7 +65,7 @@ pipeline1C()
## Внешний вид пайплайна в интерфейсе Blue Ocean

![image](https://user-images.githubusercontent.com/1132840/80956084-27b14400-8e09-11ea-9e92-683818a14503.png)
![image](https://user-images.githubusercontent.com/1132840/121659170-b67f9e00-caaa-11eb-91be-107a689e893d.png)

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

Expand Down Expand Up @@ -89,3 +94,27 @@ pipeline1C()
}
}
```

## Параметры по умолчанию

В библиотеке применяется принцип "соглашения по конфигурации" (convention over configuration): конфигурационный файл
содержит ряд настроек "по умолчанию". При соблюдении определенных правил структуры репозитория можно сократить
количество переопределений конфигурационного файла до минимума.

* Общее:
* Исходники конфигурации ожидаются в каталоге `src/cf`.
* TODO: Имена "секретов" (jenkins credentials) по умолчанию высчитываются как `GROUP_REPO_KEY`, где `GROUP` и `REPO` - это группа проектов и имя проектов (например, `firstBitSemenovskaya` и `jenkins-lib`), а `KEY` - ключ секрета:
* `STORAGE_PATH` - путь к хранилищу конфигурации;
* `STORAGE_USER` - параметры авторизации в хранилище вида "username with password".
* Все "шаги" по умолчанию выключены.
* Результаты в формате `allure` ожидаются в каталоге `build/out/allure` или его подкаталогах.
* Инициализация:
* Если включен шаг `initSteps`, то будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП. (`initInfobase` -> `runMigration`)
* Если в настройках шага инициализации не заполнен массив дополнительных шагов миграции (`initInfobase` -> `additionalInitializationSteps`), но в каталоге `tools` присутствуют файлы с именами, удовлетворяющими шаблону `vrunner.init*.json`, то автоматически выполняется запуск `vrunner vanessa` с передачей найденных файлов в качестве значения настроек (параметр `--settings`) в порядке лексиграфической сортировки имен файлов.
* BDD:
* Если в конфигурационном файле проекта не заполнена настройка `bdd` -> `vrunnerSteps`, то автоматически выполняется запуск `vrunner vanessa --settings tools/vrunner.json`.
* Синтаксический контроль:
* Если в репозитории существует файл `tools/vrunner.json`, то синтаксический контроль конфигурации с помощью конфигуратора будет выполняться с передачей файла в параметры запуска `vrunner syntax-check --settings tools/vrunner.json`.
* TODO: Значение параметра `--mode` из конфигурационного файла vrunner имеют приоритет над `syntaxCheck` -> `checkModes`. Значение из `jobConfiguration.json` передается только в том случае, если параметр отсутствует в конфигурационном файле `vrunner`.
* Трансформация результатов валидации EDT:
* По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком)
3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ sharedLibrary {
// TODO: retrieve downloaded plugin resource
pluginDependencies {
dependency("org.jenkins-ci.plugins", "pipeline-build-step", "2.12")
dependency("org.jenkins-ci.plugins", "pipeline-utility-steps", "2.8.0")
dependency("org.jenkins-ci.plugins", "git", "4.4.4")
dependency("org.6wind.jenkins", "lockable-resources", "2.7")
dependency("ru.yandex.qatools.allure", "allure-jenkins-plugin", "2.28.1")
val declarativePluginsVersion = "1.6.0"
dependency("org.jenkinsci.plugins", "pipeline-model-api", declarativePluginsVersion)
dependency("org.jenkinsci.plugins", "pipeline-model-declarative-agent", "1.1.1")
Expand Down
21 changes: 17 additions & 4 deletions resources/globalConfiguration.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,30 @@
"storage": "UNKNOWN_ID"
},
"stages": {
"initSteps": false,
"sonarqube": false,
"bdd": false,
"syntaxCheck": false,
"edtValidate": false,
"smoke": false
},
"initInfobase": {
"runMigration": true,
"additionalInitializationSteps": []
},
"bdd": {
"vrunnerSteps": [
"vanessa --settings ./tools/vrunner.json"
]
},
"sonarqube": {
"sonarQubeInstallation": "",
"useSonarScannerFromPath": true,
"sonarScannerToolName": "sonar-scanner"
},
"syntaxCheck": {
"groupErrorsByMetadata": true,
"pathToJUnitReport": "build/out/jUnit/syntax.xml",
"pathToJUnitReport": "./build/out/jUnit/syntax.xml",
"checkModes": [
"-ThinClient",
"-WebClient",
Expand All @@ -31,10 +42,12 @@
"-CheckUseModality",
"-CheckUseSynchronousCalls",
"-DistributiveModules"
]
],
"vrunnerSettings": "./tools/vrunner.json"
},
"resultsTransform": {
"removeSupport": false,
"removeSupport": true,
"supportLevel": 0
}
},
"logosConfig": ""
}
54 changes: 51 additions & 3 deletions resources/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,46 @@
"smoke" : {
"type" : "boolean",
"description" : "Дымовые тесты включены"
},
"initSteps" : {
"type" : "boolean",
"description" : "Предварительные шаги инициализации включены"
},
"bdd" : {
"type" : "boolean",
"description" : "Запуск BDD сценариев включен"
}
}
},
"initInfobase" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfobaseOptions",
"description" : "Настройки шага инициализации ИБ",
"properties" : {
"runMigration" : {
"type" : "boolean",
"description" : "Запустить миграцию ИБ"
},
"additionalInitializationSteps" : {
"type" : "array",
"description" : "Дополнительные шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.first.json\")\n ",
"items" : {
"type" : "string"
}
}
}
},
"bdd" : {
"type" : "object",
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:BddOptions",
"description" : "Настройки шага запуска BDD сценариев",
"properties" : {
"vrunnerSteps" : {
"type" : "array",
"description" : "Шаги, запускаемые через vrunner.\n В каждой строке передается отдельная команда \n vrunner и ее аргументы (например, \"vanessa --settings ./tools/vrunner.json\").\n По умолчанию содержит одну команду \"vanessa --settings ./tools/vrunner.json\".\n ",
"items" : {
"type" : "string"
}
}
}
},
Expand Down Expand Up @@ -74,18 +114,22 @@
"properties" : {
"pathToJUnitReport" : {
"type" : "string",
"description" : "Путь к файлу отчета jUnit"
"description" : "Путь к файлу отчета jUnit\n По умолчанию содержит значение \"./build/out/jUnit/syntax.xml\"\n "
},
"groupErrorsByMetadata" : {
"type" : "boolean",
"description" : "Группировать выявленные ошибки по объектам метаданных"
"description" : "Группировать выявленные ошибки по объектам метаданных.\n По умолчанию включено.\n "
},
"checkModes" : {
"type" : "array",
"description" : "Режимы проверки конфигурации",
"items" : {
"type" : "string"
}
},
"vrunnerSettings" : {
"type" : "string",
"description" : "Путь к конфигурационному файлу vanessa-runner.\n По умолчанию содержит значение \"./tools/vrunner.json\".\n "
}
}
},
Expand All @@ -96,13 +140,17 @@
"properties" : {
"removeSupport" : {
"type" : "boolean",
"description" : "Фильтровать замечания по уровню поддержки модуля"
"description" : "Фильтровать замечания по уровню поддержки модуля. По умолчанию включено."
},
"supportLevel" : {
"type" : "integer",
"description" : "Настройка фильтрации замечаний по уровню поддержки.\n 0 - удалить файлы на замке;\n 1 - удалить файлы на замке и на поддержке;\n 2 - удалить файлы на замке, на поддержке и снятые с поддержки.\n "
}
}
},
"logosConfig" : {
"type" : "string",
"description" : "Конфигурация библиотеки logos. Применяется перед запуском каждой стадии сборки"
}
}
}
2 changes: 1 addition & 1 deletion src/JobConfigurationSchemaGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static void main(String[] args) throws Exception {
File jsonSchemaFile = new File("./resources/schema.json");
mapper.writeValue(jsonSchemaFile, jsonSchema);

System.out.println(json.toString());
System.out.println(json);
}

}
15 changes: 15 additions & 0 deletions src/ru/pulsar/jenkins/library/IStepExecutor.groovy
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ru.pulsar.jenkins.library

import org.jenkinsci.plugins.pipeline.utility.steps.fs.FileWrapper
import org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction

interface IStepExecutor {
Expand All @@ -12,6 +13,10 @@ interface IStepExecutor {

String libraryResource(String path)

FileWrapper[] findFiles(String glob)

FileWrapper[] findFiles(String glob, String excludes)

String readFile(String file, String encoding)

void echo(message)
Expand All @@ -34,6 +39,8 @@ interface IStepExecutor {

def stash(String name, String includes)

def stash(String name, String includes, boolean allowEmpty)

def unstash(String name)

def zip(String dir, String zipFile)
Expand All @@ -45,4 +52,12 @@ interface IStepExecutor {
def unzip(String dir, String zipFile, quiet)

def catchError(Closure body)

def httpRequest(String url, String outputFile, String responseHandle, boolean wrapAsMultipart)

def error(String errorMessage)

def allure(List<String> results)

def installLocalDependencies()
}
38 changes: 36 additions & 2 deletions src/ru/pulsar/jenkins/library/StepExecutor.groovy
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ru.pulsar.jenkins.library

import org.jenkinsci.plugins.pipeline.utility.steps.fs.FileWrapper
import org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction
import ru.yandex.qatools.allure.jenkins.config.ResultsConfig

class StepExecutor implements IStepExecutor {

Expand Down Expand Up @@ -35,6 +37,11 @@ class StepExecutor implements IStepExecutor {
steps.readFile encoding: encoding, file: file
}

@Override
FileWrapper[] findFiles(String glob, String excludes = '') {
steps.findFiles glob: glob, excludes: excludes
}

@Override
void echo(Object message) {
steps.echo message
Expand Down Expand Up @@ -80,8 +87,8 @@ class StepExecutor implements IStepExecutor {
}

@Override
def stash(String name, String includes) {
steps.stash name: name, includes: includes
def stash(String name, String includes, boolean allowEmpty = false) {
steps.stash name: name, includes: includes, allowEmpty: allowEmpty
}

@Override
Expand All @@ -103,4 +110,31 @@ class StepExecutor implements IStepExecutor {
def catchError(Closure body) {
steps.catchError body
}

@Override
def httpRequest(String url, String outputFile, String responseHandle = 'NONE', boolean wrapAsMultipart = false) {
steps.httpRequest responseHandle: responseHandle, outputFile: outputFile, url: url, wrapAsMultipart: wrapAsMultipart
}

@Override
def error(String errorMessage) {
steps.error errorMessage
}

@Override
def allure(List<String> results) {
steps.allure([
commandline: 'allure',
includeProperties: false,
jdk: '',
properties: [],
reportBuildPolicy: 'ALWAYS',
results: ResultsConfig.convertPaths(results)
])
}

@Override
def installLocalDependencies() {
steps.installLocalDependencies()
}
}
26 changes: 26 additions & 0 deletions src/ru/pulsar/jenkins/library/configuration/BddOptions.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ru.pulsar.jenkins.library.configuration

import com.cloudbees.groovy.cps.NonCPS
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonPropertyDescription

@JsonIgnoreProperties(ignoreUnknown = true)
class BddOptions implements Serializable {

@JsonPropertyDescription("""Шаги, запускаемые через vrunner.
В каждой строке передается отдельная команда
vrunner и ее аргументы (например, "vanessa --settings ./tools/vrunner.json").
По умолчанию содержит одну команду "vanessa --settings ./tools/vrunner.json".
""")
String[] vrunnerSteps = [
'vanessa --settings ./tools/vrunner.json'
]

@Override
@NonCPS
String toString() {
return "BddOptions{" +
"vrunnerSteps=" + vrunnerSteps +
'}';
}
}
Loading

0 comments on commit d39e9d1

Please sign in to comment.