CI/CD для 1С через Jenkins и Git за 6 шагов

CI/CD для 1С через Jenkins и Git за 6 шагов

📅 Опубликовано 13 августа 2026 г.

Коротко: CI/CD для 1С — это связка Git, Jenkins и консольного запуска платформы, которая сама собирает файл cf из исходников, прогоняет автотесты и выкладывает обновление на тестовый контур. Базовая настройка укладывается в 6 шагов и 3–5 рабочих дней. По опыту проектных команд, цикл выпуска релиза сокращается с 3–6 часов ручных операций до 20–40 минут, а доля релизов с забытыми объектами метаданных падает почти до нуля.

Что такое CI/CD для 1С и что он реально даёт?

CI/CD (Continuous Integration / Continuous Delivery) — это конвейер, который забирает изменения разработчиков из системы контроля версий, автоматически собирает из них поставку и проверяет её тестами. Для 1С конвейер строится вокруг трёх элементов: Git хранит исходники конфигурации в виде XML-файлов, Jenkins управляет очередью заданий и запускает шаги, а платформа 1С:Предприятие в пакетном режиме выполняет саму работу — загрузку, сборку, обновление баз.

Главное заблуждение руководителей — что CI/CD нужен только «большим командам с десятью программистами». На практике конвейер окупается уже при двух-трёх разработчиках и одной активно дорабатываемой базе, потому что закрывает не проблему масштаба, а проблему повторяемости: каждый релиз собирается одинаково, из одних и тех же исходников, без зависимости от того, кто именно сегодня на смене.

  • Минимальный контур: один сервер сборки (4 vCPU, 8–16 ГБ RAM, SSD от 200 ГБ), лицензия платформы для агента, Git-репозиторий и Jenkins LTS.
  • Обязательное условие: конфигурация должна выгружаться в файлы XML — без этого версионирование и сравнение изменений теряют смысл.
  • Сборка cf для типовой конфигурации на 12–20 тысяч объектов метаданных занимает 8–25 минут, дымовые автотесты — ещё 20–40 минут.
  • Выкладка на рабочую базу всегда остаётся полуавтоматической: конвейер готовит всё, но финальную кнопку нажимает человек.
  • Срок внедрения базового пайплайна — 3–5 рабочих дней, полноценного с тестами и несколькими контурами — 3–6 недель.

Чем автоматический релиз отличается от ручного?

ОперацияРучной процессCI/CD-конвейер
Сборка поставки cf30–60 мин, вручную в конфигураторе8–25 мин, по коммиту
Проверка синтаксиса и ссылокВыборочно, «на глаз»Каждая сборка, автоматически
Прогон тестовЧаще всего не выполняется20–40 мин, дымовой набор
Обновление тестовой базы20–40 мин + участие человека5–15 мин, без участия
Откат неудачного релизаПоиск последней копии, 1–3 часаПрошлый артефакт cf, 10–20 мин
Риск «забыли объект»ВысокийПрактически исключён

Шаг 1. Как подготовить инфраструктуру и лицензии?

Начинать нужно не с Jenkins, а с инвентаризации. Отдельный сервер сборки обязателен: запускать конвейер на машине разработчика или на продуктивном сервере 1С нельзя — сборка потребляет диск и процессор рывками и может конфликтовать с регламентными заданиями.

Минимальная спецификация для одной конфигурации среднего размера — 4 vCPU, 8 ГБ RAM, 200 ГБ SSD. Если планируется параллельная сборка нескольких конфигураций или восстановление баз из копий, закладывайте 8 vCPU, 32 ГБ RAM и 500 ГБ–1 ТБ диска: выгрузка конфигурации в XML для крупной ERP-базы может занимать десятки гигабайт вместе с временными файлами.

Какие лицензии и учётные записи понадобятся?

  • Клиентская лицензия 1С для агента сборки — конвейер запускает конфигуратор в пакетном режиме, и это полноценный сеанс.
  • Серверная лицензия, если тестовые базы будут развёрнуты в клиент-серверном варианте.
  • Служебная учётная запись в базе с правами администратора и включённой аутентификацией 1С — доменная аутентификация в пакетном режиме работает нестабильно.
  • Техническая учётная запись в Git с доступом на чтение и запись, желательно по SSH-ключу, а не по паролю.
  • Установленные платформы всех версий, с которыми работают базы: конвейер должен уметь собирать под 8.3.21, 8.3.24 и любую другую версию, а не под одну «последнюю».

Отдельно зафиксируйте политику паролей: если пароль служебной учётной записи меняется по расписанию безопасности, пайплайн упадёт в ближайшую ночь. Такие пароли выносят в хранилище учётных данных Jenkins (Credentials) и обновляют централизованно.

Шаг 2. Как выгрузить конфигурацию 1С в Git?

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

Вариант A — «Хранилище как источник». Команда продолжает работать через хранилище конфигурации, а отдельное задание Jenkins раз в 10–15 минут выгружает новые версии хранилища в файлы XML и коммитит их в Git с сохранением автора и комментария. Плюс — ничего не меняется в привычках разработчиков. Минус — Git используется в основном как журнал и база для сборки, полноценных веток и ревью не будет.

Вариант B — «Git как источник». Разработчики выгружают свои доработки в файлы, работают в ветках, делают запросы на слияние, а конфигурация собирается из веток. Модель мощнее, но требует дисциплины и обучения команды. Подробный разбор обоих подходов, включая структуру репозитория и правила именования веток, мы делали в материале про хранение конфигурации 1С в Git и построение CI/CD — если команда ещё не выбрала модель, начните с него.

Что положить в репозиторий, а что — нет?

В репозиторий кладут: выгрузку конфигурации в XML, выгрузку расширений, файлы внешних отчётов и обработок в исходниках, скрипты пайплайна, сценарии автотестов и файл описания релиза. Не кладут: собранные cf и cfu, дампы баз, архивы, временные каталоги конфигуратора и любые файлы с реальными персональными данными. Для этого сразу заводится файл исключений .gitignore.

Практическая деталь, которую почти все пропускают на старте: первая выгрузка большой конфигурации создаёт сотни тысяч файлов, и коммит может идти десятки минут. Настройте репозиторий на хранение длинных путей и отключите автоматическое преобразование переводов строк — иначе при первом же сравнении вы увидите «изменения» во всех файлах сразу.

Шаг 3. Как настроить Jenkins и агента сборки?

Устанавливайте LTS-версию Jenkins — она получает исправления безопасности и совместима с большинством плагинов. Сразу после установки выполните четыре обязательных действия.

  1. Включите авторизацию. Раздел «Настроить Jenkins» → «Безопасность»: матрица прав, отдельные роли для разработчиков (запуск и просмотр) и администраторов (изменение заданий).
  2. Установите плагины: Git, Pipeline, Credentials Binding, Workspace Cleanup, а также плагины публикации отчётов о тестах (формат JUnit) и уведомлений в корпоративный мессенджер или почту.
  3. Заведите узел-агент. Даже если Jenkins и платформа стоят на одной машине, вынесите сборку на отдельный узел с меткой (label) вида 1c-build. Это позволит позже добавить второй сервер без переписывания заданий.
  4. Добавьте учётные данные в раздел Credentials: ключ доступа к Git, логин и пароль администратора баз, пароль пользователя хранилища конфигурации. В скриптах должны фигурировать только идентификаторы учётных данных, никогда — открытые пароли.

Задание в интерфейсе или скриптом?

Для первого пайплайна допустимо собрать задание типа Freestyle через веб-интерфейс: это быстрее и нагляднее. Но уже на втором конвейере переходите к описанию pipeline в файле, который лежит в самом репозитории. Тогда изменение процесса сборки проходит те же ревью, что и изменение кода, а восстановление Jenkins после сбоя сводится к переустановке и подключению репозитория, а не к ручному воспроизведению трёх десятков галочек.

Шаг 4. Как настроить автосборку cf из исходников?

Логика этапа сборки всегда одна и та же, независимо от инструментов-обёрток: создать пустую файловую базу, загрузить в неё конфигурацию из XML, выгрузить результат в cf и сохранить как артефакт задания.

Все действия выполняются через пакетный запуск платформы. Единственный фрагмент командной строки, без которого объяснить этап невозможно, выглядит так:

"C:\Program Files\1cv8\8.3.24.1234\bin\1cv8.exe" DESIGNER /F "D:\build\tmpbase" /N Администратор /P *** /LoadConfigFromFiles "D:\build\src\cf" /UpdateDBCfg -Server /Out "D:\build\logs\load.log"

Далее той же командой с ключом выгрузки формируется файл cf. Разберём, что должно происходить вокруг этого вызова.

  • Проверка кода возврата. Платформа возвращает ненулевой код при ошибке, но иногда завершается «успешно» с ошибками в логе. Правило: считать сборку неудачной, если код возврата не равен нулю или в файле лога встретились строки со словами «Ошибка» и «не удалось».
  • Таймаут. Зависший конфигуратор — самая частая причина «висящих» заданий. Ставьте ограничение в 60–90 минут и принудительно завершайте процесс.
  • Очистка рабочего каталога до и после сборки: остатки временной базы от прошлого прогона искажают результат.
  • Версионирование артефакта. Имя файла формируйте как Имя_Конфигурации_1.2.3.45_build127.cf, где последний блок — номер сборки Jenkins. Это единственный надёжный способ понять, какой именно cf стоит в базе.
  • Срок хранения: держите последние 20–30 сборок и все релизные — это десятки гигабайт, но именно они обеспечивают быстрый откат.

Отдельно настройте сборку файла обновления cfu для тиражных решений и сборку расширений: расширения собираются в cfe той же командой и должны проверяться на совместимость с текущей версией основной конфигурации — иначе после обновления они молча отключатся.

Шаг 5. Как подключить автотесты и что тестировать в первую очередь?

Ошибка большинства первых внедрений — попытка сразу покрыть тестами бизнес-логику. Это долго, дорого и почти всегда заканчивается брошенными сценариями. Начинать нужно с дымового набора (smoke-тестов), который отвечает на один вопрос: «конфигурация вообще запускается и открывается?».

Из чего состоит минимальный набор тестов?

  1. Синтаксический контроль. Запускается прямо на этапе сборки, ловит ошибки компиляции модулей. Занимает 3–10 минут.
  2. Открытие всех форм. Дымовой сценарий последовательно открывает списки, формы объектов и отчёты. Именно он ловит 60–70% регресса после обновления типовой конфигурации.
  3. Проведение ключевых документов. 10–15 сценариев: реализация, поступление, оплата, начисление зарплаты — то, что останавливает работу компании при поломке.
  4. Проверка обменов и интеграций. Отправка тестового документа во внешнюю систему, проверка регламентных заданий обмена.
  5. Проверка отчётности. Формирование двух-трёх ключевых регламентированных отчётов с эталонными данными.

Инструменты выбирают по задаче: сценарные тесты пользовательского интерфейса пишут в Vanessa Automation на понятном языке Gherkin — сценарий читается бухгалтером и может им же проверяться; модульные тесты серверной логики удобнее делать через фреймворки юнит-тестирования. Результаты обязательно выгружайте в формате JUnit — Jenkins построит по ним график и покажет, какие тесты «мигают».

Тестовые данные — отдельная тема. Использовать копию рабочей базы без обезличивания нельзя: это персональные данные и коммерческая тайна на сервере сборки. Правильный путь — эталонная база с сгенерированными данными либо копия с обязательным этапом обезличивания (замена ФИО, телефонов, реквизитов контрагентов, отключение почты и обменов). Этап обезличивания встраивается в тот же пайплайн и выполняется автоматически при каждом восстановлении копии.

Правило приёмки: если дымовой набор красный — релиз не выкладывается ни при каких обстоятельствах. Как только команда позволяет себе первое исключение «ну там тест просто старый», тесты умирают за два-три месяца.

Шаг 6. Как автоматизировать выкладку обновлений на базы?

Выкладка строится по контурам. Классическая схема из трёх сред: тестовая (обновляется автоматически при каждой успешной сборке), предпродуктивная (свежая копия рабочей базы, обновляется по расписанию или по кнопке, здесь проверяют реальные данные и время обновления) и рабочая (только ручной запуск с подтверждением ответственного).

Что должен делать пайплайн выкладки?

  1. Проверить наличие резервной копии и её актуальность. Нет свежей копии — задание останавливается с ошибкой, а не «на всякий случай продолжает».
  2. Завершить сеансы пользователей и заблокировать вход через настройки блокировки в кластере или консоль администрирования.
  3. Загрузить cf и выполнить обновление конфигурации базы данных в пакетном режиме.
  4. Запустить обработчики обновления и дождаться их завершения — на крупных базах это самая длинная операция, от 10 минут до нескольких часов.
  5. Снять блокировку и выполнить короткий проверочный сценарий: вход пользователя, открытие двух-трёх ключевых форм.
  6. Отправить уведомление с номером сборки, версией конфигурации, длительностью и ссылкой на лог.

Ключевое требование к пункту 3 — заранее измеренное окно обновления. Именно поэтому существует предпродуктивный контур: он показывает, сколько на самом деле займёт обновление на объёме реальных данных. Для тяжёлых систем этот замер критичен; аналогичный подход мы описывали в разборе подготовки 1С:Документооборот к обновлению, где длительность обработчиков — главный фактор планирования.

План отката прописывается до первого автоматического релиза и должен быть исполним за 20–30 минут: восстановление базы из копии либо загрузка предыдущего артефакта cf. Проверьте откат на тестовом контуре хотя бы один раз — план, который никогда не выполняли, планом не является.

Найдите специалиста для решения этой задачи на koderion.ru

Читайте также