gradle/wrapper | ||
jenkinsResources | ||
resources | ||
src | ||
test | ||
vars | ||
.gitattributes | ||
.gitignore | ||
build.gradle.kts | ||
gradlew | ||
gradlew.bat | ||
LICENSE.md | ||
README.md | ||
settings.gradle.kts |
Jenkins shared library for 1C:Enterprise 8
Цель
Создание библиотеки (или плагина) для Jenkins, позволяющей:
- максимально упростить написание Jenkinsfile для процесса CI в условиях платформы 1С:Предприятие 8
- иметь схожий и контролируемый пайплайн для всех проектов
- дать пользователю в руки простой декларативный конфигурационный файл, вместо требования описывать всю сложную логику по работе с 1С
Общие положения
- в активной разработке и поиске "своего пути" по разработке библиотеки;
- формат конфигурационного файла не стабилизирован;
- обратная совместимость пока не гарантируется, внимательно читайте changelog;
- количество stage будет со временем увеличиваться;
- использовать на свой страх и риск;
- любая помощь приветствуется.
Ограничения
- Для шага подготовки требуется любой агент с меткой
agent
. - Для запуска шага анализа SonarQube требуется агент с меткой
sonar
. - Для запуска шага валидации EDT требуется агент с меткой
edt
(для собственно валидации) и агент с меткойoscript
(для трансформации результатов с помощью библиотеки stebi). - Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле
v8version
файла конфигурации. - В качестве ИБ используется файловая база, создаваемая в
./build/ib
на основании конфигурации из хранилища без пользователей. При необходимости вы можете создать пользователей на фазе инициализации ИБ. - Stage "Дымовые тесты" пока пустой.
- Запуск
vrunner
на текущий момент происходит из локального каталогаoscript_modules
. Предполагается наличие в корне репозитория файлаpackagedef
, в котором бы была указана зависимость отvanessa-runner
Возможности
- Все шаги можно запустить на базе docker-образов из форка репозитория onec-docker. См. памятку по слоям и последовательности сборки
- Подготовка информационной базы по версии из хранилища конфигурации.
- Запуск ИБ в режиме выполнения обработчиков обновления БСП.
- Дополнительные шаги инициализации данных в ИБ.
- Трансформация кода из формата конфигуратора в формат EDT (только если включен шаг
edtValidate
). - Запуск BDD сценариев с сохранением результатов в формате Allure.
- Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
- Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
- Запуск статического анализа для SonarQube.
- Публикация результатов junit и Allure в интерфейс Jenkins.
- Конфигурирование логгера запускаемых oscript-приложений.
Подключение
Инструкция по подключению библиотеки: https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries
Примеры Jenkinsfile
Если в настройках подключения shared-library включен флаг "Load implicitly":
pipeline1C()
В обратном случае:
@Library('jenkins-lib') _
pipeline1C()
Да, вот и весь пайплайн. Конфигурирование через json.
Внешний вид пайплайна в интерфейсе Blue Ocean
Конфигурирование
По умолчанию применяется файл конфигурации из ресурсов библиотеки
Поверх него накладывается конфигурация из файла jobConfiguration.json
в корне проекта, если он присутствует.
Пример переопределения:
- указывается точная версия платформы (и соответственно метка агента, см. ограничения)
- идентификаторы credentials для пути к хранилищу и к паре логин/пароль для авторизации в хранилище (необходимы, если применяются шаги, работающие с информационной базой)
- включаются шаги запуска статического анализа SonarQube, валидации средствами EDT и синтаксического контроля
{
"$schema": "https://raw.githubusercontent.com/firstBitSemenovskaya/jenkins-lib/master/resources/schema.json",
"v8version": "8.3.14.1976",
"secrets": {
"storagePath": "f7b21c02-711a-4883-81c5-d429454e3f8b",
"storage" : "c1fc5f33-67d4-493f-a2a4-97d3040e4b8c"
},
"stages": {
"sonarqube": true,
"edtValidation": true,
"syntaxCheck": true
}
}
Параметры по умолчанию
В библиотеке применяется принцип "соглашения по конфигурации" (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:
- По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком)