При переходе на Linux многие разработчики 1С сталкиваются с проблемой автоматизации процессов DevOps, которые на Windows привычно решались с помощью v8unpack.exe или готовых скриптов precommit1c. Основная сложность заключается в том, что файлы конфигураций (.cf), внешних обработок (.epf) и отчетов (.erf) являются бинарными контейнерами. Для эффективного использования систем контроля версий, таких как Git, эти файлы необходимо распаковывать в текстовый формат (XML или программный код), чтобы иметь возможность анализировать изменения (diff) и проводить код-ревью.
В данной статье мы разберем современные способы организации автоматической распаковки файлов 1С при совершении коммита в среде Linux, проанализируем использование платформенных утилит и инструментов сообщества.
Начиная с версии платформы 8.3.14, компания 1С поставляет утилиту командной строки ibcmd, которая позволяет выполнять административные действия без запуска графического конфигуратора. Это наиболее стабильный и «официальный» способ выгрузки конфигурации в файлы на Linux.
Рассмотрим порядок действий для экспорта конфигурации. Вместо использования тяжеловесных сценариев с запуском Конфигуратора через Xvfb (виртуальный дисплей), мы воспользуемся встроенной командой экспорта. Для этого выполним следующую команду:
ibcmd infobase config export --db-path=/path/to/base --target=/path/to/xml_files
Проанализируем параметры этой команды:
infobase config export — указывает утилите на необходимость выгрузки конфигурации из информационной базы в файлы.--db-path — путь к файловой информационной базе.--target — каталог, в который будут помещены распакованные XML-файлы.Важным преимуществом ibcmd является отсутствие необходимости запускать полноценный сервер 1С или графический клиент, что делает её идеальной для работы внутри серверных скриптов и Git-хуков.
Для сообщества 1С-разработчиков стандартом де-факто стал OneScript. Это кроссплатформенная среда исполнения сценариев на языке 1С, которая отлично работает в Linux. Для решения задачи распаковки файлов существует библиотека v8files-extractor, которая является прямым аналогом Windows-инструмента precommit1c.
Разберем процесс настройки этого инструмента по шагам:
opm для установки экстрактора:
opm install v8files-extractor
.git/hooks/pre-commit. Этот скрипт будет автоматически запускаться каждый раз, когда мы пытаемся зафиксировать изменения.Пример содержания файла pre-commit для Linux:
#!/bin/bash
# Вызываем распаковщик файлов 1С через OneScript
oscript -lib v8files-extractor .src/ext/v8files-extractor.os --src . --out ./src_files
# Добавляем распакованные файлы в индекс Git
git add ./src_files
Этот сценарий проанализирует измененные файлы .cf или .epf, распакует их в указанную директорию и автоматически добавит текстовые файлы в текущий коммит. Это обеспечивает полную прозрачность истории разработки.
Если по каким-то причинам использование платформы 1С или OneScript невозможно (например, в минималистичных Docker-контейнерах), можно рассмотреть порты утилиты v8unpack на языках C++ или Go. Рассмотрим ситуацию, когда нам требуется максимальное быстродействие.
Проанализируем работу с портами на Go (например, v8unpacker). Такие инструменты работают напрямую с бинарной структурой контейнера 1С, не требуя установленной платформы. Это позволяет распаковывать файлы даже на серверах, где 1С не инсталлирована. Однако стоит помнить, что формат файлов 1С может меняться с выходом новых версий платформы, и сторонние утилиты могут потребовать обновления.
Если основной процесс разработки все еще ведется в хранилище 1С, но вам необходимо иметь актуальное «зеркало» в Git на Linux-сервере, лучшим решением будет использование gitsync. Рассмотрим схему его работы:
gitsync подключается к хранилищу 1С.В Linux это настраивается через cron для регулярного обновления репозитория. Пример команды запуска:
gitsync sync --storage-url tcp://server/storage --db-path /tmp/base --git-dir /home/git/repo
При совместной работе разработчиков на Windows и Linux критически важно настроить корректную обработку окончаний строк. Выясним причину возможных конфликтов: Windows использует CRLF, а Linux — LF. Чтобы Git не считал измененной каждую строку файла после распаковки на другой ОС, создадим файл .gitattributes в корне репозитория:
*.xml text eol=crlf
*.txt text eol=crlf
*.bsl text eol=crlf
Это заставит Git всегда сохранять файлы исходного кода 1С с Windows-окончаниями строк, что обеспечит совместимость при работе в Конфигураторе или EDT вне зависимости от операционной системы сервера, на котором запущены хуки.
Мы рассмотрели несколько подходов к автоматизации распаковки файлов 1С в Linux. Для новых проектов наиболее предпочтительным является использование ibcmd, так как это штатный инструмент платформы. Для команд, активно использующих инструменты сообщества, связка OneScript + v8files-extractor обеспечит наибольшую гибкость и привычный функционал. Выбор конкретного метода зависит от вашей инфраструктуры и используемой версии платформы 1С.