Описание¶
Суть проблемы¶
- Редактирование неактуальных версий внешних отчетов и обработок.
- Ручной процесс применения изменений сразу для нескольких информационных баз.
- Отсутствие контроля за процессом изменения внешних отчетов и обработок.
Цели¶
- Хранение внешних обработок в одном месте для различных информационных баз.
- Использование системы контроля версий.
- Автоматизированная доставка изменений до информационных баз.
Связь с целями и стратегией¶
Однотипность процесса разработки, уменьшение затрат на разработку, разработка в любой среде, контроль качества кода.
Решение¶
-
Хранить внешние обработки в системах управления репозиториями программного кода для распределенной системы контроля версий Git.
- GitLab Enterprise Edition не ниже 11.4.0-ee.
- ...
-
Разработать веб-сервисы и клиент для интеграции с внешними хранилищами кода.
-
Реализовать в информационных базах получателях API обновления внешний отчетов и обработок. Пример подобной реализации.
BPMN: изменение внешней обработки¶
Интеграция с внешними хранилищами кода¶
GitLab¶
Информация об изменении кода во внешнем хранилище поступает через систему оповещения о событиях (webhooks).
plantuml
@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:Endpoint" : file
"1C:Transmitter:BackgroundJobs" <- "1C:Endpoint" : status
return
return
@enduml
- Для контролируемой ветки в удаленном репозитории на сервере GitLab выполняется некоторое событие.
- На сервере GitLab срабатывает webhook в виде запроса по методу POST к HTTP-сервису 1С
epf-transmitter
. - Веб-сервис
epf-transmitter
проводит аутентификацию и проверяет данные запроса, переданный в форматеjson (application/json)
. Если аутентификация пройдена и данные корректны, то возвращается HTTP-ответ с кодом 200. В противном случае - код ошибки. - Веб-сервис
epf-transmitter
в фоновом задании обрабатывает тело запроса, подготавливая данные для каждогоcommit
из запроса:- с сервера GitLab для каждого
commit
забирается своя версия файла настроек маршрутизации данных по базам-получателям (по умолчанию, файл.ext-epf.json
в корне репозитория); - с сервера GitLab для каждого
commit
забирается своя версия бинарного файла с расширением*.epf, *.erf
; - данные сохраняются в
epf-transmitter
для возможности анализа и повторной отправки данных; - подготавливаются данные согласно маршрутам доставки;
- каждый файл в своем фоновом задании отправляется в информационную базу-приемник с сохранением данных о результатах доставки;
- с сервера GitLab для каждого