Руководство по интеграции CI/CD 1С:Предприятие 8.3 на Linux в Docker с пробросом лицензий
Настоящее руководство описывает процесс развертывания и интеграции скриптов сборки, синтаксического контроля и автотестирования в инфраструктуру контейнеризации Docker и конвейер GitLab CI/CD на серверах под управлением Linux. Особое внимание уделено критической проблеме — стабильности коммерческого лицензирования 1С в динамическом контейнерном окружении.
1. Архитектура решения и управление лицензиями
Контейнеризация процессов сборки и тестирования 1С требует стабильного доступа к лицензиям. Попытка запустить Конфигуратор без лицензии приводит к немедленной ошибке.
1.1. "Проброс лицензий" против "Докеризация аппаратного ключа"
- Докеризация аппаратного ключа (нелегитимно): попытка подключить USB-ключ внутрь контейнера. Не работает из-за задержек USB-виртуализации и запрещено Лицензионным соглашением.
- Проброс лицензий (легитимно):
- сетевой HASP License Manager через UDP-475;
- монтирование программных лицензий *.lic в режиме Read-Only.
1.2. Сетевая аппаратная защита (HASP)
- USB-ключ подключён к серверу с HASP License Manager;
- контейнеры обращаются к нему по UDP-475;
- в образе настраивается файл nethasp.ini с явным IP.
1.3. Программные лицензии (*.lic)
- Лицензия активируется на хосте Linux.
- Каталог /var/1C/licenses монтируется внутрь контейнера.
- Контейнер запускается с параметрами --net=host и фиксированным hostname.
2. Проверка привязки к оборудованию
2.1. Анализируемые параметры
- сетевое имя;
- модель материнской платы;
- BIOS;
- ОЗУ;
- процессоры;
- контроллеры дисков;
- сетевые адаптеры и MAC-адреса;
- параметры ОС (Windows).
2.2. Логика сравнения
- Удаление компонентов ломает привязку.
- ОЗУ можно увеличивать, но нельзя уменьшать ниже исходного значения.
- Внешние накопители игнорируются.
2.3. Частота проверок
Проверка выполняется не чаще одного раза в сутки.
3. Интеграция Docker-окружения
Шаг 1. Сборка образа
docker build -t 1c-ci-runner:latest --build-arg ONEC_VERSION=8.3.25.1394 .
Шаг 2. Настройка nethasp.ini
[NH_COMMON] NH_TCPIP = Enabled [NH_TCPIP] NH_SERVER_ADDR = 192.168.1.50 NH_PORT_NUMBER = 475 NH_TCPIP_METHOD = UDP NH_USE_BROADCAST = Disabled
Шаг 3. Docker Compose
mkdir -p /var/1c/db /var/1c/logs docker-compose up -d
4. GitLab Runner
sudo gitlab-runner register \ --executor "docker" \ --docker-image "1c-ci-runner:latest" [[runners]] volumes = ["/var/1C/licenses:/var/1C/licenses:ro"] network_mode = "host"
5. Конвейер GitLab CI/CD
stages: - test - deploy - acceptance-test
6. Чек-лист стабильности
| Проблема | Причина | Решение |
|---|---|---|
| «Не найден ключ защиты» | Контейнер ищет USB-ключ локально | Использовать nethasp.ini |
| Лицензия *.lic не видна | Неверные права | Права каталога 775, группа grp1cv8 |
| Лицензия слетает | MAC-адрес контейнера меняется | Запускать с --net=host |
Вступайте в нашу телеграмм-группу Инфостарт