1
0
mirror of https://github.com/firstBitMarksistskaya/jenkins-lib.git synced 2024-11-28 09:33:03 +02:00
Jenkins shared library для 1С:Предприятие 8
Go to file
2021-11-06 14:26:28 +03:00
gradle/wrapper Сборка градлем 2020-03-25 17:27:29 +03:00
jenkinsResources Переезд на градль-рельсы с тестами и объектами 2020-03-26 17:04:42 +03:00
resources Merge pull request #30 from otymko/feat/28-syntax-check-exception-file 2021-11-04 10:47:54 +03:00
src Merge branch 'FromEDTTransform' into develop 2021-11-04 21:27:41 +03:00
test Поддержка загрузки конфигурации из исходников конфигуратора 2021-11-01 17:52:06 +03:00
vars Merge branch 'FromEDTTransform' into develop 2021-11-04 21:27:41 +03:00
.gitattributes Наметки по jenkins-lib 2020-03-17 15:38:26 +03:00
.gitignore Исправления обращения к SourceFormat 2021-11-02 18:05:04 +03:00
build.gradle.kts Fix #11. Поиск файлов vrunner.init.json для запуска первичной инициализации 2021-06-11 17:22:45 +03:00
gradlew +x 2020-03-25 17:28:09 +03:00
gradlew.bat Сборка градлем 2020-03-25 17:27:29 +03:00
LICENSE.md Первый релиз 2020-04-20 11:28:58 +03:00
README.md Update README.md 2021-11-06 14:26:28 +03:00
settings.gradle.kts Сборка градлем 2020-03-25 17:27:29 +03:00

Jenkins shared library for 1C:Enterprise 8

Цель

Создание библиотеки (или плагина) для Jenkins, позволяющей:

  • максимально упростить написание Jenkinsfile для процесса CI в условиях платформы 1С:Предприятие 8
  • иметь схожий и контролируемый пайплайн для всех проектов
  • дать пользователю в руки простой декларативный конфигурационный файл, вместо требования описывать всю сложную логику по работе с 1С

Общие положения

  • в активной разработке и поиске "своего пути" по разработке библиотеки;
  • формат конфигурационного файла не стабилизирован;
  • обратная совместимость пока не гарантируется, внимательно читайте changelog;
  • количество stage будет со временем увеличиваться;
  • использовать на свой страх и риск;
  • любая помощь приветствуется.

Ограничения

  1. Для шага подготовки требуется любой агент с меткой agent.
  2. Для запуска шага анализа SonarQube требуется агент с меткой sonar.
  3. Для запуска шагов, работающих с EDT (валидация, трансформация формата исходников) требуется агент с меткой edt и агент с меткой oscript (для трансформации результатов с помощью библиотеки stebi).
  4. Для запуска шагов, работающих с 1С (подготовка, синтаксический контроль и т.д.) требуется агент с меткой, совпадающей со значением в поле v8version файла конфигурации.
  5. В качестве ИБ используется файловая база, создаваемая в каталоге ./build/ib. При необходимости вы можете создать пользователей на фазе инициализации ИБ.
  6. Шаг "Дымовые тесты" пока пустой.

Возможности

  1. Все шаги можно запустить на базе docker-образов из форка репозитория onec-docker. См. памятку по слоям и последовательности сборки.
  2. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT.
  3. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников).
  4. Запуск ИБ в режиме выполнения обработчиков обновления БСП.
  5. Дополнительные шаги инициализации данных в ИБ.
  6. Трансформация кода из формата конфигуратора в формат EDT.
  7. Трансформация кода из формата EDT в формат конфигуратора.
  8. Запуск BDD сценариев с сохранением результатов в формате Allure.
  9. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
  10. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
  11. Запуск статического анализа для SonarQube.
  12. Публикация результатов junit и Allure в интерфейс Jenkins.
  13. Конфигурирование логгера запускаемых oscript-приложений.

Подключение

Инструкция по подключению библиотеки: https://jenkins.io/doc/book/pipeline/shared-libraries/#using-libraries

Примеры Jenkinsfile

Если в настройках подключения shared-library включен флаг "Load implicitly":

pipeline1C()

В обратном случае:

@Library('jenkins-lib') _

pipeline1C()

Да, вот и весь пайплайн. Конфигурирование через json.

Внешний вид пайплайна в интерфейсе Blue Ocean

image

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

По умолчанию применяется файл конфигурации из ресурсов библиотеки

Поверх него накладывается конфигурация из файла 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).
    • TODO: Имена "секретов" (jenkins credentials, secrets) по умолчанию высчитываются как GROUP_REPO_KEY, где GROUP и REPO - это группа проектов и имя проектов (например, firstBitSemenovskaya и jenkins-lib), а KEY - ключ секрета:
      • STORAGE_PATH - путь к хранилищу конфигурации (secrets -> storagePath);
      • STORAGE_USER - параметры авторизации в хранилище вида "username with password" (secrets -> storage).
    • Все "шаги" по умолчанию выключены (stages).
    • Если в корне репозитория существует файл packagedef, то в шагах, работающих с информационной базой, будет выполнена попытка установки локальных зависимостей средствами opm.
    • Если после установки локальных зависимостей в каталоге oscript_modules/bin сушествует файл vrunner, то для выполнения команд работы с информационной базой будет использоваться он, а не глобально установленный vrunner из PATH.
    • Результаты в формате allure ожидаются в каталоге build/out/allure или его подкаталогах.
  • Инициализация:
    • Информационная база инициализируется только в том случае, если в сборочной линии включены шаги, работающие с базой (например, 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.