Создание библиотеки (или плагина) для Jenkins, позволяющей:
- максимально упростить написание Jenkinsfile для процесса CI в условиях платформы 1С:Предприятие 8
- иметь схожий и контролируемый пайплайн для всех проектов
- дать пользователю в руки простой декларативный конфигурационный файл, вместо требования описывать всю сложную логику по работе с 1С
- в активной разработке и поиске "своего пути" по разработке библиотеки;
- формат конфигурационного файла не стабилизирован;
- обратная совместимость пока не гарантируется, внимательно читайте changelog;
- количество stage будет со временем увеличиваться;
- использовать на свой страх и риск;
- любая помощь приветствуется.
- Для шага подготовки требуется любой агент с меткой
agent. - Для запуска шага анализа SonarQube требуется агент с меткой
sonar. - Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой
edtи агент с меткойoscript(для трансформации результатов с помощью библиотеки stebi). - Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле
v8versionфайла конфигурации. - В качестве ИБ используется файловая база, создаваемая в каталоге
./build/ib. При необходимости вы можете создать пользователей на фазе инициализации ИБ. - Шаг "Дымовые тесты" пока пустой.
- Все шаги можно запустить на базе docker-образов из https://github.com/firstBitSemenovskaya/onec-docker. См. памятку по слоям и последовательности сборки.
- Поддержка как формата выгрузки из Конфигуратора, так и формата EDT.
- Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников).
- Запуск ИБ в режиме выполнения обработчиков обновления БСП.
- Дополнительные шаги инициализации данных в ИБ.
- Трансформация кода из формата конфигуратора в формат EDT.
- Трансформация кода из формата EDT в формат конфигуратора.
- Запуск BDD сценариев с сохранением результатов в формате Allure.
- Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
- Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
- Запуск статического анализа для SonarQube.
- Публикация результатов junit и Allure в интерфейс Jenkins.
- Конфигурирование логгера запускаемых oscript-приложений.
Инструкция по подключению библиотеки: https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries
Если в настройках подключения shared-library включен флаг "Load implicitly":
pipeline1C()В обратном случае:
@Library('jenkins-lib') _
pipeline1C()Да, вот и весь пайплайн. Конфигурирование через json.
По умолчанию применяется файл конфигурации из ресурсов библиотеки
Поверх него накладывается конфигурация из файла 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): конфигурационный файл содержит ряд настроек "по умолчанию". При соблюдении определенных правил структуры репозитория можно сократить количество переопределений конфигурационного файла до минимума. Ниже представлены имеющиеся соглашения и способы их переопределения.
- Общее:
- В качестве маски версии платформы используется строка "8.3" (
v8version). - Исходники конфигурации ожидаются в каталоге
src/cf(srcDir). - Формат исходников - выгрузка из Конфигуратора (
sourceFormat). - Ветка по умолчанию (для комбинированного режима загрузки конфигурации) - "main" (
defaultBranch). - Имена "секретов" (jenkins credentials,
secrets) по умолчанию высчитываются из пути к git-репозиторию (без учета домена, с заменой/на_) с прибавлением ключа секрета. Например, для репозитория https://github.com/firstBitSemenovskaya/jenkins-lib секрет с адресом хранилища будет выглядеть какfirstBitSemenovskaya_jenkins-lib_STORAGE_PATH. Ключи секретов:STORAGE_PATH- путь к хранилищу конфигурации (дляsecrets->storagePath);STORAGE_USER- параметры авторизации в хранилище вида "username with password" (дляsecrets->storage).
- Все "шаги" по умолчанию выключены (
stages). - Если в корне репозитория существует файл
packagedef, то в шагах, работающих с информационной базой, будет выполнена попытка установки локальных зависимостей средствамиopm. - Если после установки локальных зависимостей в каталоге
oscript_modules/binсушествует файлvrunner, то для выполнения команд работы с информационной базой будет использоваться он, а не глобально установленныйvrunnerизPATH. - Результаты в формате
allureожидаются в каталогеbuild/out/allureили его подкаталогах.
- В качестве маски версии платформы используется строка "8.3" (
- Инициализация:
- Информационная база инициализируется только в том случае, если в сборочной линии включены шаги, работающие с базой (например,
bddилиsyntaxCheck). - Информационная база инициализируется конфигурацией из хранилища конфигурации (
initInfobase->initMethod). - Если выбран метод инициализации ИБ из хранилища конфигурации и в каталоге исходников есть файл
VERSION(артефакт от работы утилитыgitsync), то из хранилища будет загружена версия конфигурации с номером из файлаVERSION.
- Информационная база инициализируется только в том случае, если в сборочной линии включены шаги, работающие с базой (например,
- Первичный запуск информационной базы:
- Если информационная база нужна для запуска в режиме "Предприятие" (например, для шагов
bddилиsmoke), то будет запущен шаг "Миграция ИБ". - После загрузки конфигурации в ИБ будет выполняться запуск ИБ с целью запуска обработчиков обновления из БСП (
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(syntaxCheck->vrunnerSettings). - Применяется группировка ошибок по метаданным (
syntaxCheck->groupErrorsByMetadata). - Выгрузка результатов в формат
jUnitосуществляется в файл./build/out/jUnit/syntax.xml(syntaxCheck->pathToJUnitReport). - Если в репозитории существует файл
./tools/syntax-check-exception-file.txt, то команде запука синтаксического контроля конфигурации данный файл будет передаваться как файл с исключениями сообщений об ошибках (параметр--exception-file) (syntaxCheck->exceptionFile). - Конфигурационный файл по умолчанию уже содержит ряд "режимов проверки" для синтаксического контроля конфигурации (
syntaxCheck->checkModes).
- Если в репозитории существует файл
- Трансформация результатов валидации EDT:
- По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры
resultsTransform->removeSupportиresultsTransform->supportLevel).
- По умолчанию из результатов анализа исключаются замечания, сработавшие на модулях с включенным запретом редактирования (желтый куб с замком) (параметры
- Анализ SonarQube:
- Предполагается наличие единственной настройки
SonarQube installation(sonarqube->sonarQubeInstallation). - Используется
sonar-scannerиз переменной окруженияPATH(sonarqube->useSonarScannerFromPath). - Если использование
sonar-scannerиз переменной окруженияPATHвыключено, предполагается наличие настроенного глобального инструментаSonarQube Scannerс идентификатором инструментаsonar-scanner(sonarqube->sonarScannerToolName). - Версия из корня конфигурации передается утилите
sonar-scannerкак значение параметраsonar.projectVersion=$configurationVersion. - Если выполнялась валидация EDT, результаты валидации в формате
generic issuesпередаются утилитеsonar-scannerкак значение параметраsonar.externalIssuesReportPaths.
- Предполагается наличие единственной настройки
