firstBitMarksistskaya / jenkins-lib

Jenkins shared library для 1С:Предприятие 8
MIT License
158 stars 67 forks source link
hacktoberfest jenkins

Jenkins shared library for 1C:Enterprise 8

Цель

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

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

Ограничения

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

Возможности

  1. Все шаги можно запустить на базе docker-образов из https://github.com/firstBitMarksistskaya/onec-docker. См. памятку по слоям и последовательности сборки.
  2. Поддержка как формата выгрузки из Конфигуратора, так и формата EDT.
  3. Подготовка информационной базы по версии из хранилища конфигурации, из исходных файлов конфигурации, комбинированный режим (основная ветка - из хранилища, остальные - из исходников).
  4. Подготовка и загрузка расширений конфигурации из исходных файлов расширения, из cfe-файлов.
  5. Запуск ИБ в режиме выполнения обработчиков обновления БСП.
  6. Дополнительные шаги инициализации данных в ИБ.
  7. Трансформация кода из формата конфигуратора в формат EDT.
  8. Трансформация кода из формата EDT в формат конфигуратора.
  9. Запуск BDD сценариев с сохранением результатов в формате Allure.
  10. Запуск юнит-тестов с помощью фреймворка YAXUnit с сохранением результатов в формате jUnit и Allure.
  11. Запуск синтаксического контроля средствами конфигуратора и сохранение результатов в виде отчета jUnit.
  12. Запуск валидации проекта средствами EDT и конвертация отчета в формате generic issues.
  13. Запуск статического анализа для SonarQube.
  14. Публикация результатов junit и Allure в интерфейс Jenkins.
  15. Рассылка результатов сборки на почту и в Telegram.
  16. Конфигурирование логгера запускаемых 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 в корне проекта, если он присутствует.

Пример переопределения:

{
    "$schema": "https://raw.githubusercontent.com/firstBitMarksistskaya/jenkins-lib/master/resources/schema.json",
    "v8version": "8.3.14.1976",
    "edtVersion": "2021.3.4:x86_64",
    "secrets": {
        "storagePath": "f7b21c02-711a-4883-81c5-d429454e3f8b",
        "storage" : "c1fc5f33-67d4-493f-a2a4-97d3040e4b8c"
    },
    "stages": {
        "sonarqube": true,
        "edtValidate": true,
        "syntaxCheck": true
    }
}

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

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

Настройка загрузки расширений

Если у вас есть расширения которые необходимо загрузить в базу для проведения тестов и проверок, это можно сделать на этапе подготовки базы.

Для загрузки расширений в информационную базу необходимо выполнить следующие шаги:

  1. Укажите имя расширения(extensions -> name).
  2. Определите метод загрузки для каждого расширения(extensions -> initMethod). Поддерживаются два метода загрузки:
    • fromSource - загрузка из исходников;
    • fromFile - загрузка cfe-файла.
  3. Укажите путь до расширения или URL для скачивания cfe-файла(extensions -> path).
    • В случае загрузки из исходников - необходимо указать путь к исходникам расширения
    • В случае загрузки cfe - Укажите путь по которому будет скачан cfe. На данный момент можно указывать как локальный путь, так и url для скачивания cfe(Прим.: https://github.com/bia-technologies/yaxunit/releases/download/23.05/YAXUNIT-23.05.cfe)
  4. Укажите этапы сборки, на которых должно быть загружено расширение (initInfobase -> extensions -> stages). Если оставить это поле пустым, то расширение будет загружено на этапе initInfobase и будет активно на всех последующих этапах. В противном случае расширение будет использоваться только на перечисленных этапах.

Пример конфигурации для загрузки расширений:

"initInfobase": {
    "extensions": [
        {
            "name": "ИмяРасширения1",
            "initMethod": "fromSource",
            "path": "путь/до/исходников/расширения",
            "stages": ["bdd", "yaxunit"]
        },
        {
            "name": "ИмяРасширения2",
            "initMethod": "fromFile",
            "path": "https://example.com/path/to/extension.cfe"
        }
    ]
}

Загрузка эталонной базы

Реализована возможность загрузки эталонной базы на этапе инициализации информационной базы. Для этого необходимо указать в конфигурационном файле параметр initInfobase -> templateDBPath:

"initInfobase": {
    "templateDBPath": "путь/до/файла/базы.dt"
}
"initInfobase": {
    "templateDBPath": "путь/до/файла/базы.dt",
    "vrunnerSettings": "tools/vrunner.json"
}

Настройка шага YAXUnit