CI/CD для 1С: как упростить себе жизнь

09.06.25

Разработка - DevOps и автоматизация разработки

Устали от ручной поддержки версий обработок, отчетов и печатных форм в 1С в разных базах, ошибок и перезаписи важных изменений разными программистами? Автоматизируйте процессы с CI/CD и Jenkins. Читайте статью, скачивайте готовые скрипты и настройки, ставьте плюс и делитесь с коллегами!

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
DevOps_Jenkins_OneC
.zip 12,97Kb
10 3 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Многие наверняка сталкивались с ручным сведением версий обработок, отчетов и печатных форм: бесконечные, однообразные операции, ошибки из-за человеческого фактора, перезапись важных изменений. Знакомо?

У нас было то же самое, имелось две базы:

  • продуктовая (База1Предприятие) с данными, в которой все обработки, отчеты и ПФ помещены как дополнительные в справочник ДополнительныеОтчетыОбработки;
  • разработческая (База2Разработка) пустая без данных, но все обработки, отчёты и печатные формы хранятся встроенными в конфигурацию подключенную к Хранилищу_Конфигураций.

В остальном обе конфигурации с точки зрения метаданных идентичны. Разработка, учет версий, изменения ведутся в База2Разработка и потом вручную после тестирования разработчик или тестировщик обновляет справочник в База1Предприятие.

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

Почему не перейти на Git? Наша конфигурация достаточно старая и использует обычные формы, поэтому переход на EDT и Git посчитали сложным из-за необходимости переработки кода.

Какое решение? Автоматизация через CI/CD. И в этой статье я покажу, как настроить конвейер непрерывной интеграции и доставки для 1С на примере Jenkins. В результате получится автоматический процесс, который сам обновляет продуктовую базу при изменениях в разработческой.

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

 
Установка и настройка Jenkins

 

Скрипты работы с 1С

Во вложенном архиве представлены готовые скрипты, которые выполняют следующие действия:

  1. Обновить разработческую базу из Хранилища_Конфигураций и выгрузить конфигурацию в файлы XML
  2. Заменить теги в файлах XML и конвертировать их в *.epf, *.erf
  3. Вызвать обработку 1С с параметрами запуска для развертывания в продуктовой База1Предприятие.

Все шаги автоматизированы, не забудьте подставить в скрипты свои пути и учетные данные. Пример запуска скрипта для получения версии обработки из XML файла из поля комментарий.

 

 
Преобразование XML в .epf, .erf.

После выгрузки конфигурации 1С в файлы имеем файлы xml в директориях \DataProcessors и \Reports. Если сразу попробовать в Конфигураторе создать новую пустую обработку/отчет и выбрать Загрузить из файлов напрямую указав файл xml, то 1С не дает этого сделать и выдает ошибку: "Ошибка загрузки документа. Отсутствует контейнер метаданных по причине: Отсутствует контейнер метаданных."

Давайте используем особенность 1С: если в XML-файле заменить теги <DataProcessor> на <ExternalDataProcessor> (или <Report> на <ExternalReport> для отчётов), то скрипт успешно конвертирует их в .epf или .erf.

 

 

См. пример конвертации xml файла в *.epf.

 

 

При этом, если Вы попробуете сделать замену тегов XML и загрузку через Конфигуратор вручную, то работать будет через раз - причину мне не удалось найти. И да ошибки, которые могут появляться при ручной загрузке в Конфигураторе не оказывают влияния на успешность конвертации при работе через скрипты.

 

 
 
Обновление продуктовой базы

Запуск обновления в справочнике продуктовой базы производится путем вызова скрипта с передачей ему на вход параметров запуска 1С, с указанием пути к файлу новой версии обработки/отчета .epf, .erf и КодаОбработки в справочнике ДополнительныеОбработки (название измените для своей конфигурации), которую нужно обновить.

Примечания:

  • Проверка что загружаемая версия больше текущей не рассматривается здесь для упрощения, можно легко реализовать дополнительно.
  • У служебного пользователя, под которым в продуктовую База1Предприятие будут загружаться обновления, нужно убрать ограничение “Защита от опасных действий” для предотвращения лишних сообщений.
 
Что в приложенном файле:
  1. Dockerfile - файл для запуска контейнера Jenkins в Докере
  2. Jenkinsfile - Groovy скрипт для Jenkins Pipeline, включая рассылку в мессенджер после выполнения всех стадий
  3. install_plugins.sh - скрипт установки плагинов Jenkins
  4. basic-security.groovy - задание логина/пароля для входа в Jenkins
  5. 1_updateConf.cmd - скрипт обновления конфигурации 1С из хранилища и выгрузки в файлы XML
  6. 2_getVersionFile.ps1 - получает из файла XML версию обработки/отчета для различных интересных сценариев работы
  7. 3_convertFile.ps1 и 3_ReplaceXML.vbs - заменяет теги в XML файлах и конвертирует их в *.epf, *.erf
  8. 4_insert.ps1 - скрипт запуска 1С для обновления обработки в продуктовой базе
  9. UploaderSimple.epf - Обработка 1С, которая вызывается при запуске 1С:Предприятия для обновления версии в целевой продуктовой База1Предприятие (имя справочника в обработке адаптируйте под свою конфигурацию).
 
В заключение

Спасибо, что дочитали до конца. CI/CD для 1С это спасение от рутины и ошибок. С этим конвейером вы сэкономите время, повысите надёжность и ускорите разработку. Несмотря на то, что в примерах я использовал Jenkins и Java-агент, основная сила решения заключается в "чистых" скриптах. Всё, что вам нужно это командная строка и 1С. Никаких EDT, Git, БСП, тяжёлых зависимостей, плагинов, других языков или "кошмаров библиотек": вы можете запускать CI/CD-конвейеры просто по расписанию. Подход полностью конфигурируемый, легко адаптируется под любую инфраструктуру и сохраняет простоту сопровождения. Идеально подходит для устаревших конфигураций с обычными формами и не требует от команды глубоких знаний DevOps.

В дополнение, подробно описан нестандартный процесс конвертации XML-файлов в бинарные форматы 1С (*.epf, *.erf) с заменой тегов, что позволяет автоматизировать задачи, которые обычно требуют ручного вмешательства. Этот подход может быть полезным даже для тех, кто уже использует другие CI/CD-системы.

Скачивайте архив с готовыми скриптами и настройками - там всё готово для старта. Если статья была полезна, ставьте плюс, чтобы не потерять.

Возможно Вас заинтересуют другие публикации:

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 10.3, релизы 10.3.88.3
  • Управление торговлей, редакция 11, релизы 11.5.22.63

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

1C CI/CD Автоматизация разработки 1С Jenkins и 1С Непрерывная интеграция 1С Развёртывание обработок 1С XML в EPF XML в ERF Внешние обработки 1С Автоматизация бизнес-процессов DevOps 1C

См. также

Тестирование QA DevOps и автоматизация разработки Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.190.11.

5368 руб.

20.01.2022    11293    48    1    

21

DevOps и автоматизация разработки Тестирование QA Программист Пользователь 1С:Предприятие 8 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Автотесты 1С - готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Зарплата и Управление Персоналом 3 и версии КОРП: 3.1.35.48.

5000 руб.

05.08.2024    5569    36    1    

20

Тестирование QA DevOps и автоматизация разработки Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.22.145.

5000 руб.

04.07.2022    13223    50    1    

39

DevOps и автоматизация разработки Программист Бесплатно (free)

Если вы думаете, что внедрение CDC конвейера — это геморрой, то вы правы. Но мы уже прошли через все боли: от настройки MSSQL CDC до танцев с Kafka и ClickHouse. Теперь конвейер работает и данные ключевых операций в 1С, от которых зависит бизнес, попадают в ClickHouse, где их можно анализировать и использовать для мониторинга в реальном времени. В этой статье я расскажу, как выглядит архитектура и с какими проблемами можно столкнуться

05.03.2026    760    NesterTop1    4    

5

DevOps и автоматизация разработки EDT Программист Бесплатно (free)

Разбираемся, почему ручной деплой в 1С все еще жив и сколько времени он на самом деле занимает, несмотря на стремительное развитие CI/CD-подходов. На реальном кейсе показываем, что корень проблемы чаще кроется не в автоматизации, а в ее неэффективной настройке. Событийная модель вместо расписаний, параллельные тесты, использование кеша Gitlab для оптимизаций и правильные настройки для управления репозиториями на раннерах радикально меняют скорость delivery. Объясняем, почему переход на Docker иногда замедляет процесс, как платформенные особенности 1С влияют на пайплайны и какие стратегии позволяют устранить узкие места. Материал будет полезен тем, кто хочет понять реальную стоимость ручного деплоя и сравнить ее с возможностями правильно настроенной автоматизации.

04.03.2026    808    konst1231    0    

4

DevOps и автоматизация разработки EDT Программист 1С 8.3 Бесплатно (free)

Входные данные - конфигурация 1С в формате EDT, для системы контроля версий используется Git, две базы - рабочая и тестовая. Задача: коммит в ветку должен автоматически обновлять базу. Без ручного запуска конфигуратора, без «сохрани CF и скопируй на сервер». Инструмент - GitHub Actions + PowerShell-скрипты на сервере. Платформа 8.3.27.

27.02.2026    1114    BiLBelarus    0    

7

DevOps и автоматизация разработки WEB-интеграция Программист Бесплатно (free)

В этой статье я расскажу, как настроить автоматическое обновление файлов поставки на Infostart сразу после создания релиза в GitHub. Больше не нужно вручную скачивать <code>.cfe</code> и загружать его через браузер

17.02.2026    598    Aleksandr    1    

6

DevOps и автоматизация разработки Программист 1С:Предприятие 8 Бесплатно (free)

Один репозиторий GitHub и одно расширение, которое нужно выпускать сразу для нескольких конфигураций 1С — звучит как «будут конфликты». В статье показываю рабочую схему: main как ядро, ветки; сборки под конфигурации, `git worktree`, чистая XML;выгрузка (без EDT артефактов) и автоматизация сборки `.cfe` через PowerShell + 1cv8 DESIGNER.

11.02.2026    2783    Aleksandr    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ImHunter 343 09.06.25 14:37 Сейчас в теме
Есть ли что-то про расширения?
3. da_1c 199 09.06.25 18:58 Сейчас в теме
(1) Не используем расширения
2. partizand 145 09.06.25 18:28 Сейчас в теме
Неясно, почему разработчики сразу не делают внешние обработки. Их как раз можно положить в гит. Зачем лишняя конвертация.
4. da_1c 199 09.06.25 19:01 Сейчас в теме
(2) Не понимаю вопрос. Вы предлагаете класть в гит бинарники 1с?
5. partizand 145 09.06.25 20:08 Сейчас в теме
Я предлагаю делать сразу то, что будет в рабочей базе - внешние обработки. Это сильно упростит процесс развертывания.
А внешние обработки уже можно закатывать в гит. Есть там такой пункт "выгрузить в файлы" (если вы не в курсе).
А то выглядит это все как автоматизация хаоса.
triviumfan; +1 Ответить
6. triviumfan 101 10.06.25 00:47 Сейчас в теме
(5) тоже не понял зачем эта дополнительная конвертация
7. Peltik2 10.06.25 01:02 Сейчас в теме
(5) если автоматизировать бардак, то получится автоматизированный бардак :)
8. da_1c 199 10.06.25 02:09 Сейчас в теме
(5) Внешние обработки в Git это хорошо, но без гарантированного захвата объектов в хранилище это превращается в хаос, особенно при работе распределённой команды с разницей во времени до 8 часов.
Git не решает конфликтов, если объект не заблокирован, и в таких случаях возникают накладки и теряются изменения. Поэтому мы используем захват объекта в хранилище и храним обработки в отдельной базе через конфигуратор.
А как у вас решается ситуация, если программист просто забудет выгрузить внешнюю обработку в Git? Или если 10 человек одновременно зальют по одной своей фиче в 1 обработку? В таких случаях разруливать будет сложновато.
Для нашей команды текущая схема надёжнее, управляемее и проверена годами использования.
9. yukon 157 10.06.25 08:23 Сейчас в теме
(8) Все отлично разруливается. Количество разработчиков тут не главное.

В хранилище единицей изменения является объект, в git строка, что на порядки (в сотни и тысячи раз) снижает вероятность конфиликта
А при правильном построении процесса разработки и структурировании кода вообще снижает эту вероятность до единичных значений.
10. da_1c 199 11.06.25 03:08 Сейчас в теме
(9) На практике это «всё отлично разруливается» часто просто теория. Мы уже проходили через случаи, когда в одну обработку за ночь прилетало по 5 изменений от разных людей, в разные части одной процедуры, не учитывая доработки друг друга. Мёржи да, теоретически проще. Но если в этих строках разная логика и смысл, а задачи не связаны это уже не мёрж, а ручная реконструкция. Особенно если никто не знал о параллельной работе. Такой якобы «единичный» конфликт может сжечь несколько часов человека уровня выше среднего с хорошим таким окладом.
Git хорош, но он не решает проблему координации и не заменяет контроль объекта. Мы просто предпочитаем процесс, где конфликты не возникают вовсе, а не потом «отлично разруливаются».
11. kastielm368 12.06.25 19:58 Сейчас в теме
Тут многие предлагают везде использовать внешние обработки. А у меня обратный вопрос: зачем вообще использовать внешние обработки и отчеты, если есть расширения, или если тем более на проекте допускается добавление объектов в основную конфигурацию? Наблюдал такое на многих проектах, даже без ci cd. Ведь версионировать проще, дорабатывать проще, и нет путаницы с кучей разных версий одной обработки в каталоге где то на компе у разраба. Например, отчеты и печатные формы при подключении через конфигуратор с помощью БСП, можно гораздо гибче настраивать. Плюс любая внешняя обработка это для платформы и заказчика потенциально опасный код, особенно если, как в большинстве случаев, отключается безопасный режим.

Я не критикую. Мне правда интересно, вдруг я чего то не вижу не понимаю, и есть какие то плюсы во внешних обработках
12. da_1c 199 13.06.25 21:06 Сейчас в теме
(11) Хороший вопрос. Уточню, что в текущей публикации вообще не затрагиваются изменения в конфигурации основной базы с данными - она может оставаться на поддержке. Расширения по моему мнению сложнее сопровождать, особенно в долгую.
Внешние обработки я использую как микросервисы: они как бы живут отдельно и независимо. Это удобно при распределённой разработке и гибче в доработке.
А про БСП: из-за нестабильности и изменений от версии к версии, давайте лучше не трогать эту тему здесь )))
13. kastielm368 18.06.25 15:53 Сейчас в теме
(12)
Расширения по моему мнению сложнее сопровождать, особенно в долгую.
если их много, то да. А если все или большая часть доработок в одном расширении, то сложностей никаких. Особенно с хранилищем конфигурации.

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

(12)
А про БСП: из-за нестабильности и изменений от версии к версии
не совсем понял о какой нестабильности идет речь. Вся ERP на БСП построена, при возникновении ошибок, их обычно исправляют с релизами. Да и к тому же, вы как бы противопоставляете внешние обработки БСП, но ведь функционал Дополнительных отчетов и обработок входит в состав БСП. А значит нестабильность распространяется и на них.
14. da_1c 199 20.06.25 04:02 Сейчас в теме
(13) Благодарю за вашу точку зрения.
Расширения иногда тянут лишние объекты, которые потом сложно вычищать. Как Вы управляете такими "мусорными" объектами, чтобы поддержка оставалась удобной?
Когда говорил о нестабильности БСП, имел в виду изменения в названиях и сигнатурах методов между версиями, что затрудняет долгосрочную поддержку кода, зависящего от них.
Расширения хороши для точечных или небольших кастомизаций, а внешние обработки - для гибкости и независимости.
15. Avatarzorro 71 26.06.25 07:02 Сейчас в теме
(14) уже год или 2 как расширение видит все объекты в тех же запросах, потом спрашивает добавить ли все в расширение или нет. Нажимаешь нет и никаких проблем.

тянет обычно картинки и стили, но кому на них не плевать? Кто вообще заглядывает в этот раздел дерева конфигурации?

БСП стабильно работает в любой базе при чем с разницей версий, потому что там оставляют совместимость. Тот же ДлительныеОперации.ВыполнитьВФоне() помечена как устаревшая уже кучу лет, но все еще остается в коде. Другое дело что ты под бсп подразумеваешь все что типовое, а это не так. Типо ОбщегоНазначенияУТ для тебя это бсп, а это даже в теории не так
16. kastielm368 28.06.25 12:43 Сейчас в теме
(14)
Как Вы управляете такими "мусорными" объектами, чтобы поддержка оставалась удобной?
В регламенте разработки прописано и на код ревью проверяется. Каждый разраб при захвате корня и добавлении в расширение новых объектов, должен оставить в расширении только используемые объекты. Разный мусор вроде стилей и перечислений должен удалять. Так расширение поддерживается в чистом состоянии. Особенно если еще соблюдать условия по расширению типовых методов, например, использовать подписки на события, директивы После и Перед, добавлять вызовы только в общих модулях локализации и тд.

(14)
Когда говорил о нестабильности БСП, имел в виду изменения в названиях и сигнатурах методов между версиями, что затрудняет долгосрочную поддержку кода, зависящего от них.
Это неизбежно всегда. И с внешними обработками также. Если только они не используют исключительно методы платформы. При любом обновлении релиза идет проверка на работоспособность. И в этот момент и исправляются все изменившиеся сигнатуры методов и имена объектов. Не понимаю, как опытному разработчику это может доставлять проблемы.

(14)
Расширения хороши для точечных или небольших кастомизаций
В целом согласен. Но они также вполне подходят и для больших доработок. Только желательно не хранить важных данные в объектах расширения.
Для отправки сообщения требуется регистрация/авторизация