Skip to content

AlexPCRus/gitlab-services

This branch is 47 commits behind astrizhachuk/epf-transmitter:master.

Folders and files

NameName
Last commit message
Last commit date
Feb 13, 2020
May 14, 2019
Jun 15, 2020
Jun 15, 2020
Mar 25, 2020
Mar 18, 2020
Mar 16, 2020
Jun 24, 2020
Jun 11, 2020
Jun 24, 2020
Mar 16, 2020
Feb 13, 2020
May 16, 2019
May 16, 2019
Jun 24, 2020
Mar 27, 2020
Mar 17, 2020
Jun 24, 2020
Feb 12, 2020
Mar 24, 2020

Repository files navigation

Описание

Quality Gate Status Maintainability Rating

Суть проблемы

  • Редактирование неактуальных версий внешних отчетов и обработок.
  • Ручной процесс применения изменений сразу в несколько информационных баз.
  • Отсутствие контроля за процессом изменения внешних отчетов и обработок.

Цели

  • Хранение внешних обработок в одном месте для различных информационных баз.
  • Использование системы контроля версий.
  • Автоматизированная доставка изменений до информационных баз.

Связь с целями и стратегией

Однотипность процесса разработки, уменьшение затрат на разработку, разработка в любой среде, контроль качества кода.

Инструменты разработки

  • Разработка ведется в EDT не ниже 2020.4.0+425. Проект создан на основе bootstrap-1c;

  • Платформа 1С не ниже 8.3.16.1502;

  • Модульные тесты через 1CUnits - в расширении конфигурации EDT, см. ./GitlabServices.Tests;

  • Среда для разработки разворачивается с помощью docker-compose, а сам продукт поставляется в виде образов docker

Процесс разработки

Предполагается следующий цикл при работе над проектом:

Начинаем...

  1. Pull проекта из удаленного репозитория;

  2. Разворачивание среды;

  3. Разработка в EDT в развернутой среде (база-данных, веб-сервис, утилиты);

  4. Тестирование в развернутой среде;

  5. Push изменений и PR (MR) в удаленный репозиторий;

  6. Прогон автоматических тестов, сборка релиза и документации на сервере;

...повторяем.

Сборка проекта

Установка требуемого ПО

Например, для windows, можно воспользоваться менеджером пакетов chocolatey:

> tools\install-env.cmd

Клонирование проекта из удаленного репозитория

> git clone https://github.com/astrizhachuk/gitlab-services.git

Конфигурация проекта

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

ONEC_USERNAME - учётная запись на http://releases.1c.ru

ONEC_PASSWORD - пароль для учётной записи на http://releases.1c.ru

ONEC_VERSION - версия платформы 1С:Преприятия 8.3, для которой собирается проект

DOCKER_USERNAME - учетная запись на Docker Hub или в корпоративном registry

Настроить в проекте подключение к серверу лицензий в файле nethasp.ini

Операции с окружением

Разворачивание окружения с предварительной сборкой образов:

> docker-compose up -d --build

Запуск всех сервисов:

> docker-compose start

Запуск выборочных сервисов:

> docker-compose start srv db ws

Остановка всех сервисов:

> docker-compose stop

BPMN: изменение внешней обработки

Изменение внешней обработки: 1 Изменение внешней обработки: 2

Архитектура решения

  • Описание API тут или тут.
  • GitLab Enterprise Edition не ниже 11.4.0-ee.
  • На конечных точках (базах получателях) должен быть реализован API обновления внешний отчетов и обработок: см. тут или тут. Пример реализации сервиса для базы-приемника - gitlab-services-receiver

Архитектура решения

@startuml
GitLab -> "1C:Transmitter" ++ : webhook
"1C:Transmitter" -> "1C:Transmitter:BackgroundJobs" ** : start job
return 200
"1C:Transmitter:BackgroundJobs" -> "1C:Transmitter:BackgroundJobs" ++ : prepare
GitLab <- "1C:Transmitter:BackgroundJobs" ++ : request files
return 200
"1C:Transmitter:BackgroundJobs" -> "1C:Transmitter:BackgroundJobs" ++ : send file
"1C:Transmitter:BackgroundJobs" -> "1C:Receiver" : file
"1C:Transmitter:BackgroundJobs" <- "1C:Receiver" : status
return
return
@enduml

UML

  1. В основной ветке удаленного репозитория на GitLab осуществляется commit изменений.
  2. На сервере GitLab срабатывает webhook в виде запроса по методу POST в HTTP-сервис (REST) веб-сервера 1С ИБ-распределителя.
  3. HTTP-сервис 1С проводит аутентификацию и корректность тела запроса, который передается в формате JSON (application/json). Если аутентификация пройдена и данные корректны, то сразу возвращается HTTP-ответ с кодом 200, либо код ошибки и соединение с GitLab закрывается.
  4. ИБ-распределителя в фоновом задании обрабатывает тело запроса одним пакетом, подготавливая данные для каждого commit внутри этого пакета:
    • с сервера GitLab для каждого commit забирается своя версия файла настроек маршрутизации данных в ИБ-получатели (файл .ext-epf.json в корне репозитория);
    • с сервера GitLab для каждого commit забирается своя версия бинарного файла с расширением .epf,.erf;
    • данные сохраняются в ИБ-распределителе для возможности анализа и аварийной отправке данных в ИБ-получатели;
    • подготавливаются данные для отправки согласно маршрутам доставки; каждый файл или действие асинхронно через Web-сервис отправляется в ИБ-получатель с получением ответа об успехе;
  5. В ИБ-получателе производятся действия согласно правилам настроек маршрутизации.
  6. Мониторинг ИБ-распределителя осуществляется либо через web-client, либо через тонкий клиент.

Включение и отключение функционала

Включить или отключить процесс обработки событий от GitLab и доставку внешних обработок в базы-получатели можно в ИБ-распределителе через "Сервисы GitLab" - "Сервис" - "Настройки сервисов GitLab" флажок "Включить загрузку файлов из внешнего хранилища".

Диагностика веб-сервисов

Проверить работоспособность веб-сервисов (отклик и ответ) можно в настройках сервисов (1):

Проверка веб-сервиса

Нажав "Проверить" можно увидеть как статус сервиса (доступен, недоступен, включен, выключен) (3), так и тело ответа (4):

Результат проверки веб-сервиса

Аутентификация и авторизация

  1. На сервере Gitlab для каждого репозитория в Settings → Integrations устанавливается секретный ключа (Secret Token), который будет добавляться в заголовки POST запросов для аутентификации этих запросов на стороне HTTP-сервиса 1С. Данный ключ необходимо указать в качестве идентификатора в справочнике "Обработчики событий" в ИБ-распределителе. При срабатывании webhook в справочнике "Обработчики событий" осуществляется поиск элемента справочника с требуемым ключом (идентификатором) с последующей привязкой этого элемента к обрабатываемому webhook. Если таких элементов несколько, то будет выбран первый. Настройка секретного токена

  2. На сервере GitLab выбирается или добавляется новый пользователь, под которым будут забираться данные с репозитория (файлы настроек маршрутизации и бинарные файлы). На сервере данная настройка находится в персональных настройках пользователя в разделе User Settings → Access Tokens → Personal Access Tokens.  Необходимо с установить дату до которой действует ключ и Scopes = api. На стороне 1C значение этого ключа прописывается в константу "GitLab user private token" ИБ-распределителя. Настройка Personal Access Tokens

  3. Для ИБ-распределителя создается два файла-публикации: один для HTTP-сервиса (с урезанным доступом для тонкого клиента), другой - для доступа к базе через web-client. В самой же информационной базе создается специальный пользователь с ролью HTTPСервисGitLab (пользователь с этой ролью указывается в .vrd файле публикации), остальным пользователям, которым дается право на мониторинг сервисов GitLab, назначается роль ПользовательGitLab (см. каталог проекта ../web).

  4. Для всех информационных баз, в которые необходимо отправлять внешние обработки, выбирается или добавляется новый пользователь с ролью WSGitLab. Он должен быть одним и тем же для всех этих баз. Имя такого пользователя и его пароль указывается в настройках подключения к конечной точке в ИБ-распределителе. Подключение к конечной точке

//TODO ...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • 1C Enterprise 95.3%
  • Gherkin 4.7%