1C:SRE-Suite: автоматизируем непрерывную интеграцию (CI) через GitHub Actions

03.09.26

База данных - Администрирование СУБД

Декларативный pipeline в GitHub Actions, тонкости лицензирования в Docker (--net=host), изоляция RUN_ID и интеграция со сборочным конвейером 1C:SRE-Suite. Вторая часть практического руководства (https://infostart.ru/public/2779597): от первого коммита до детерминированного синтаксического гейта на headless-раннере Linux

1C:SRE-Suite: автоматизируем непрерывную интеграцию (CI) через GitHub Actions

Декларативный пайплайн в GitHub Actions, тонкости лицензирования в Docker (--net=host), изоляция RUN_ID и интеграция со сборочным конвейером 1C:SRE-Suite.

Часть 2 практического руководства: от первого коммита до детерминированного синтаксического гейта на headless-раннере Linux

В первой части нашей публикации мы рассмотрели общую архитектуру SRE-пакета для платформы «1С:Предприятие» в операционной системе Linux. Мы заложили теоретический и практический фундамент: описали пятислойный сборочный скрипт защиты от ложного успеха, утилиту автоматической трансляции проектов EDT и превентивные механизмы ротации процессов.

Связь с первой частью цикла: Архитектурное наполнение SRE-пакета, разбор пяти рубежей обороны скрипта 1c-ci-linux-build-v4.sh и методика мягкой ротации rphost опубликованы в вводном материале: 1C:SRE-Suite: переводим управление инфраструктурой 1С на Linux в декларативный формат (Часть 1).

Однако декларативное описание инфраструктуры работает на полную мощность только тогда, когда оно встроено в автоматический цикл обратной связи. Любой коммит разработчика или аналитика должен автоматически проверяться на синтаксическую корректность до того, как изменения попадут в общую базу.

Во второй части нашего цикла мы подробно разберем построение конвейера непрерывной интеграции (CI) на базе GitHub Actions. Мы покажем внутреннюю структуру конфигурационного файла github-actions-ci.yml, разберем сетевые нюансы взаимодействия с серверами лицензирования и покажем, как изолировать параллельные сессии сборки в контейнерах. Исходный код проекта и пайплайнов открыт на GitHub: NickScherbakov/1c-sre-suite.

📂 Разбор пайплайна: шаг за шагом

Файл конфигурации github-actions-ci.yml описывает один рабочий процесс (Workflow), который автоматически активируется при отправке кода (push) или создании запросов на слияние (pull request) в ветки main и master. Это гарантирует контроль качества на самых ранних этапах жизненного цикла разработки.

Этап конвейера Выполняемое действие Технический регламент
Шаг 1. Исходники Git Полное извлечение репозитория с историей коммитов. actions/checkout@v4 с обязательным параметром fetch-depth: 0 для Diff-контроля.
Шаг 2. Среда Node.js Подготовка рантайма для CLI-транслятора EDT. Развертывание Node.js v20 и условное выполнение npm ci при наличии манифеста.
Шаг 3. Сборка раннера Динамическая компиляция Docker-образа. Сборка 1c-sre-runner:latest из docker/Dockerfile (Xvfb + системные шрифты).
Шаг 4. Прогон синтаксиса Запуск 5 рубежей защиты в изолированном контейнере. Вызов 1c-ci-linux-build-v4.sh с сетевым режимом --net=host и изоляцией RUN_ID.

Шаг 1. Получение актуальных исходников

Конвейер использует стандартный шаг actions/checkout@v4. Важнейшей деталью является параметр fetch-depth: 0. По умолчанию GitHub Actions скачивает только последний коммит, что ускоряет процесс, однако для полноценной работы упреждающего контроля и расчета разницы метаданных (diff-верификация на пятом слое нашего сборочного скрипта) критически необходима полная история изменений. Указание нулевой глубины извлечения исключает ложные срабатывания.

Шаг 2. Развертывание окружения Node.js

Для работы нашего транслятора из формата 1C:EDT в бинарный конфигурационный файл требуется выполнение скрипта scripts/edt-to-configurator.js. Пайплайн разворачивает виртуальное окружение Node.js 20 и выполняет команду детерминированной установки зависимостей npm ci, если в корне проекта присутствует файл package.json. Если манифест отсутствует, шаг безопасно пропускается, не прерывая конвейер.

Шаг 3. Динамическая сборка Docker-контейнера

Для компиляции кода 1С необходима установленная платформа. Наш конвейер не требует ручной предустановки платформы на сам GitHub-раннер. Вместо этого пайплайн собирает воспроизводимый образ сборочного агента 1c-sre-runner:latest из docker/Dockerfile. В этот образ уже упакованы все необходимые зависимости: виртуальный фреймбуфер Xvfb, системные шрифты MS Core Fonts и утилиты администрирования.

Шаг 4. Запуск тестирования внутри контейнера

Это технологически ключевой этап, где одновременно решаются три классические проблемы интеграции 1С в CI-процессы: сетевая доступность лицензий, изоляция параллельных сессий и безопасность конфиденциальной информации.

Команда запуска контейнера выглядит следующим образом:

Bash — Запуск сборочного раннера в изолированном окружении docker run
1docker run --rm \
2  --net=host \
3  -v ${{ github.workspace }}:/workspace \
4  -w /workspace \
5  -e RUN_ID="$RUN_ID" \
6  -e HASP_SERVER_IP="$HASP_SERVER_IP" \
7  1c-sre-runner:latest \
8  bash scripts/1c-ci-linux-build-v4.sh
YAML — Полный рабочий процесс .github/workflows/ci.yml Workflow
 1name: 1C:SRE-Suite CI
 2
 3on:
 4  push:
 5    branches: [ main, master ]
 6  pull_request:
 7    branches: [ main, master ]
 8
 9jobs:
10  syntax-check:
11    runs-on: ubuntu-latest
12    steps:
13      - name: Шаг 1. Получение актуальных исходников
14        uses: actions/checkout@v4
15        with:
16          fetch-depth: 0
17
18      - name: Шаг 2. Развертывание окружения Node.js
19        uses: actions/setup-node@v4
20        with:
21          node-version: 20
22
23      - name: Установка зависимостей EDT-моста
24        run: |
25          if [ -f package.json ]; then npm ci; fi
26
27      - name: Шаг 3. Сборка сборочного Docker-образа
28        run: |
29          docker build -t 1c-sre-runner:latest ./docker
30
31      - name: Шаг 4. Запуск тестирования внутри контейнера
32        env:
33          RUN_ID: ${{ github.run_id }}
34          HASP_SERVER_IP: ${{ secrets.HASP_SERVER_IP }}
35        run: |
36          docker run --rm \
37            --net=host \
38            -v ${{ github.workspace }}:/workspace \
39            -w /workspace \
40            -e RUN_ID="$RUN_ID" \
41            -e HASP_SERVER_IP="$HASP_SERVER_IP" \
42            1c-sre-runner:latest \
43            bash scripts/1c-ci-linux-build-v4.sh

 (!!!) - Три инженерных решения в основе запуска контейнера

Разберем детально, какие критические инфраструктурные барьеры устраняет приведенная команда запуска раннера.

Инженерный вызов Уязвимость в типовом Docker Решение контура 1C:SRE-Suite
1. Сетевые лицензии HASP Потеря широковещательных UDP-пакетов в виртуальном мосту (bridge). Параметр --net=host: прямой доступ к физическому сетевому стеку.
2. Коллизии параллелизма Блокировка общих баз и каталогов несколькими параллельными сборами. Проброс уникального RUN_ID (на базе github.run_id) для полной изоляции.
3. Защита периметра Утечка приватных IP-адресов серверов лицензий в открытый репозиторий. Маскирование через GitHub Secrets с генерацией безопасного nethasp.ini.

1. Сетевой режим host вместо моста (bridge)

По умолчанию Docker запускает контейнеры в изолированной виртуальной сети. Для работы платформы «1С:Предприятие» внутри контейнера критически важен доступ к ключам защиты. Если используются аппаратные HASP-ключи, платформа пытается обнаружить менеджер лицензий по протоколу UDP. В режиме виртуального моста (bridge) широковещательные UDP-запросы не проходят сквозь сетевой экран Docker.

Параметр --net=host заставляет контейнер использовать сетевой стек хост-системы. Это полностью снимает сетевые ограничения: контейнер видит локальную сеть точно так же, как сам GitHub-раннер, что гарантирует мгновенное получение программных или аппаратных лицензий без сложной маршрутизации.

2. Двухсторонняя изоляция через переменные окружения

При одновременном запуске нескольких сборочных конвейеров на одном физическом сервере процессы Конфигуратора неизбежно сталкиваются с конфликтами захвата файлов блокировок (*.1cLck, 1Cv8.lk) или мешают друг другу во временных базах данных.

Для решения этой проблемы мы передаем внутрь контейнера переменную RUN_ID, значением которой выступает уникальный идентификатор текущего запуска GitHub Actions (${{ github.run_id }}). Наш сборочный скрипт использует этот идентификатор для создания изолированных каталогов временных файлов и выделенных баз данных, гарантируя полное отсутствие коллизий при параллельной работе.

3. Безопасность инфраструктурных параметров через GitHub Secrets

Адрес сервера лицензирования или параметры подключения к базам данных ни при каких условиях не должны храниться в публичном репозитории в открытом виде. Это создает прямую угрозу компрометации защищенного контура предприятия.

Мы используем механизм шифрованных секретов GitHub Secrets. Переменная HASP_SERVER_IP наполняется динамически из секрета ${{ secrets.HASP_SERVER_IP }}. Значение автоматически маскируется в логах сборки и передается исключительно в переменные окружения контейнера на время выполнения шага. Наш сборочный скрипт считывает эту переменную и на лету подставляет её в файл конфигурации nethasp.ini, обеспечивая строгую точечную адресацию без сетевых таймаутов.

🤝 Подключайтесь к развитию проекта

Наш конфигурационный файл GitHub Actions представляет собой готовое промышленное решение, которое легко масштабировать под любые другие платформы автоматизации: GitLab CI, TeamCity или Jenkins.

Мы продолжаем активную разработку 1C:SRE-Suite на GitHub и приглашаем инженеров принять участие в формировании открытых отраслевых стандартов эксплуатации 1С.

Приоритетные задачи в рамках CI/CD-модулей прямо сейчас:
  • Оптимизация кэширования слоев Docker для многократного ускорения повторной сборки раннера.
  • Публикация результатов синтаксического контроля в формате JUnit для наглядных отчетов в интерфейсе Git.
  • Интеграция шага автоматического запуска автотестов Vanessa-Automation и YAxUnit в headless-режиме непосредственно после успешной синтаксической сборки.

Готовый файл github-actions-ci.yml доступен в репозитории проекта и готов к внедрению в ваши рабочие контуры. Ждем ваши отзывы, архитектурные идеи в разделе Issue и пул-реквесты в репозитории NickScherbakov/1c-sre-suite!

Проект распространяется под открытой коммерческой лицензией MIT: вы можете свободно использовать его, дорабатывать и внедрять в инфраструктуру своего предприятия.

Перейти в репозиторий NickScherbakov/1c-sre-suite на GitHub →

Присоединяйтесь к дискуссиям и разработке в сообществе: Телеграм-чат Инфостарт.


Материал подготовлен для сообщества infostart.ru с прицелом на матёрых DevOps-инженеров, системных администраторов и архитекторов «1С:Предприятия».

Нинель и Николай Щербаковы — декларативная инфраструктура, SRE и интеллектуальная автоматизация экосистемы 1С на Linux.

Вступайте в нашу телеграмм-группу Инфостарт

1c 1c-edt 1c-enterprise devops-automation github-actions docker Linux SRE infostart.ru open-source

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Администрирование СУБД Системный администратор Программист Бесплатно (free)

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    2098    jul.dolganova    8    

22

Групповая разработка (Git, хранилище) EDT Программист 1С:Предприятие 8 Россия Бесплатно (free)

Синхронизируйте свой проект EDT с хранилищем конфигурации так же легко, как в git клиенте. По кнопке Pull в проект EDT подтягиваются изменения из хранилища, по кнопке Push ваш коммит из git репозитория проекта EDT улетает в хранилище конфигурации.

09.07.2026    6139    DmitryShehovtsev    14    

26

Администрирование СУБД Системный администратор Программист Бесплатно (free)

Статья рассказывает об опыте перевода больших баз с MSSQL на Postgres и годовой эксплуатации после перехода. Показано, с какими ограничениями утилиты ibcmd можно столкнуться при миграции больших баз и какие подходы помогают безопасно обходить эти проблемы. Приведены наиболее интересные кейсы, выявленные в эксплуатации: особенности настроек Postgres, поведение оптимизатора, тонкости работы логики и статистики, а также редкие, но критичные ситуации с производительностью. Материал будет полезен тем, кто планирует переход на Postgres и хочет заранее понимать реальные риски, подводные камни и проверенные практики их преодоления.

20.04.2026    9384    berserg    12    

27

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Программист Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    13026    nasonkin    19    

31

Администрирование СУБД Программист 1С:Предприятие 8 Россия Бесплатно (free)

Ошибка реструктуризации: "Запись не найдена в менеджере имен баз данных". Диагностика и решение проблемы.

22.08.2025    5093    a13k55    1    

19

EDT Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 Бесплатно (free)

Плагин, расширяющий функциональность EDT, предоставляя возможность работы с хранилищем конфигурации 1С без использования 1С:ГитКонвертер.

04.08.2025    17302    ZigRinat85    54    

54

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Позволяет проектировать и выполнять сценарии, состоящие из команд 1С, Git и CMD, а также решать конфликты слияния напрямую из 1С с помощью KDiff3. Предустановлен набор команд для автоматизации сборки CFE-файлов.

1 стартмани

29.07.2025    6075    9    gorsheninsn    6    

29

Администрирование веб-серверов Linux Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Проблема: При переходе с Windows на Linux многие сталкиваются с затруднениями при настройке аутентификации ОС в веб-клиенте 1С через Apache 2.4 (Debian). Решение: Команда Magnit Tech (Центр экспертизы 1С и Сопровождение 1C) разработала готовую инструкцию по настройке веб-клиента 1С на Debian 12 с поддержкой как Windows, так и Linux-серверов. Экономьте время — внедряйте проверенное!

25.07.2025    19161    biryukmikh    80    

30
Для отправки сообщения требуется регистрация/авторизация