Infrastructure as code: кнопка «Сделать всё», или Упаковываем наше окружение в 5 кБ текста

01.11.23

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

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

Меня зовут Вера Кокотова. Хочу рассказать про использование подхода «Инфраструктура как код» при разворачивании окружения для 1С-разработки на проекте.

 

 

Я более десяти лет работаю в КРОКе. Начинала как разработчик. Сейчас я работаю тимлидом группы технической архитектуры и разработки. Участвовала во многих крупных проектах компании.

 

 

КРОК – это крупная ИТ-компания. Мы давно работаем на рынке. В этом году КРОКу исполнилось 30 лет.

У нас работает более 2000 сотрудников. Направление 1С в КРОКе тоже более 10 лет. Мы выросли из направления Oracle, поэтому многие подходы к проектному управлению мы заимствовали из Oracle.

Мы специализируемся на крупных проектах автоматизации на базе флагманских продуктов 1С: ERP и Управление холдингом. Но я сегодня хочу поговорить не о методологических аспектах внедрения, а о конкретных инструментах и сервисах, и в частности об инфраструктуре, которую мы используем у себя на проектах.

 

Архитектура изолированного окружения под проект 1С в облаке

 

 

Прежде всего под каждый проект мы поднимаем стенд разработки:

  • Раньше стенд разработки в основном поднимался на Windows, но с 2022 года по понятным причинам доля проектов на стеке Linux и PostgreSQL значительно выросла. Зачастую стенд разработки поднимается в нашем облаке, а не у заказчика, потому что до передачи системы в эксплуатацию разработка – это наша зона ответственности.

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

  • И может подниматься сборочная линия с автотестами – эта сборочная линия может также совмещаться со стендом разработки.

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

Этот стенд предоставляет следующие сервисы:

  • СППР;

  • сервис хранилищ конфигураций 1С;

  • сервис управления версиями GitLab;

  • сервис на базе Gitsync, который раскладывает версии хранилищ в Git;

  • сервис проверки качества кода SonarQube;

  • автотесты;

  • ну и Jenkins, который обеспечивает автоматический запуск задач.

Все эти сервисы связывают работу участников проекта в единый процесс.

  • Консультанты:

    • фиксируют требования в СППР;

    • описывают каталог бизнес-процессов и сами бизнес-процессы;

    • формируют список доработок в терминах объектов метаданных разрабатываемой конфигурации;

    • и отгружают уже техническое задание разработчику.

  • Разработчик работает в хранилище:

    • каждая версия хранилища автоматически разбирается, помещается в Git-репозиторий;

    • также автоматически запускается проверка качества кода этой версии;

    • и адресно рассылаются замечания по результатам проверки.

 

 

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

  • СУБД;

  • сервер 1С;

  • веб-сервер;

  • и агент Jenkins, который позволяет нам запускать какие-то автоматические задачи: например обновление общих тестовых баз с какой-то периодичностью или по коммиту в хранилище.

Если говорить о базах, которые разворачиваются, их количество и состав тоже регламентирован:

  • у нас есть эталонная база, в которую вносятся настройки для будущего прода;

  • демобаза;

  • база моделирования, в которой проводится общее моделирование для бизнес-пользователей;

  • и уже индивидуальные базы для каждого консультанта и разработчика.

Во всех этих базах, кроме демобазы, должен быть создан набор пользователей, соответствующий участникам проектной команды.

 

Недостатки разворачивания инфраструктуры вручную

 

 

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

Тут возникают несколько проблем.

  • Во-первых, инженер в силу специфики своей работы участвует во многих проектах, поэтому процесс разворачивания может затянуться.

  • На исполнение этой задачи требуются специальные знания – не каждый разработчик сможет такую инфраструктуру поднять.

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

 

Эволюция использования подхода

 

 

Наблюдая, сколько времени тратится на разворачивание, мы стали думать о том, как можно этот процесс ускорить.

  • В самой первой редакции эти сервисы вообще поднимались на Windows, если говорить про стенд pipeline CI/CD.

  • Потом мы почти сразу перешли на Linux – в том числе потому, что это экономит затраты на инфраструктуру. И с Linux мы сразу стали использовать Docker. Был создан шаблон виртуальной машины на базе Docker – при старте проекта нужно было создать из этого шаблона виртуалку и донастроить ее. Причем это тоже был достаточно трудоемкий процесс. В инструкции тех времен было описано 20 листов дополнительных действий – от создания хранилища до создания задач в Jenkins.

  • И через какое-то время уже мы перешли к полной автоматизации, когда стенд разворачивается вообще по одной кнопке с использованием инструментов Terraform и Ansible.

 

Docker, Terraform, Ansible

 

 

Подробнее про инструменты.

Docker – это легковесная среда контейнеризации. Контейнеризация потребляет меньше ресурсов, чем виртуализация.

  • Чтобы запустить в Docker какое-то приложение, необходимо подготовить образ, который является шаблоном запускаемого контейнера, и в нем уже содержатся приложения со всеми необходимыми зависимостями и настройками. Чтобы собрать такой образ для Docker, нужно написать Dockerfile с инструкциями. Пример Dockerfile на слайде. В классическом подходе инженеры выполняют скрипты, меняют настройки операционной системы, устанавливают дополнительные зависимости. Здесь все эти действия описаны в Dockerfile, и вероятность какой-то ошибки исключена.

  • Когда образ протестирован, он может быть помещен в Docker Registry – приложение для управления доставкой и хранением образов. Оттуда его легко переиспользовать на других виртуальных машинах.

  • Один контейнер содержит в себе один процесс – это значит, что для каждого приложения нужен свой контейнер. При этом приложение работает в своей среде и не мешает другим приложениям на этом хосте. Если приложение вдруг завершится с ошибкой или зависнет, на основную операционную систему это катастрофического влияния не окажет.

  • На тот момент использование Docker помогало нам ускорить процесс развертывания всех сервисов.

 

Сами хосты, на которых разворачиваются эти сервисы, располагаются в облаке. Для использования виртуалки в облаке мы используем Terraform.

После того как Terraform создал эту виртуалку с необходимыми ресурсами, он возвращает айдишник к этой виртуалке Ansible.

А Ansible уже донастраивает эту виртуальную машину: устанавливает необходимые приложения, разворачивает докер-образы и так далее.

Чуть подробнее про Terraform.

  • Terraform обращается к облаку через API.

  • Ему передается конфигурационный файл, на основе которого должна быть создана виртуальная машина. Этот файл параметризован – мы можем заранее сказать, что для ERP нам нужна нода такой мощности, для самописной конфигурации на БСП – другой.

  • Terraform умеет хранить состояние виртуальных машин.

  • И он не требует установки агентов.

После того как Terraform развернул виртуальную машину в облаке, мы получили ее айдишник и отдаем его Ansible:

  • Ansible уже заканчивает настройку этой виртуальной машины, выполняя любые действия с операционной системой.

  • Он также не требует установки агентов, что очень удобно.

  • Ansible имеет низкий порог вхождения по сравнению с остальными системами управления конфигурацией.

  • Существует очень много модулей Ansible, и при желании можно дописать свой модуль на Python. Это тоже не так сложно, потому что Python – тоже язык с низким порогом вхождения, плюс у нас уже есть скрипты на Python, которые мы используем в проде.

  • И по Ansible много документации, она обновляется, информацию найти легко.

 

 

Основные базовые понятия Ansible – это:

  • Inventory – файл, где хранятся пути к хостам, который мы настраиваем.

  • Modules – это скрипты, которые выполняются на настраиваемых хостах. Например, можно написать модуль для копирования файлов с управляющей ноды на настраиваемую.

  • Playbook – это сценарии в формате YML. Они тоже простые и понятные. Там описывается, где и какие действия мы выполняем. Там же мы можем описывать, какие переменные мы передаем.

  • Role – это сущность, которая логически объединяет связанные между собой сценарии. Например, роль включает в себя:

    • установку PostgreSQL;

    • изменение конфигурационного файла PostgreSQL в зависимости от мощности виртуалки;

    • создание баз и пользователей.

 

Процесс создания стенда

 

 

Резюмируя – вот так теперь выглядит процесс создания стенда.

  • Мы запускаем задачу в Jenkins и передаем туда необходимые параметры: вид стенда, проектную команду и версию платформы.

  • Jenkins подключается к репозиторию Git, в котором хранится настройка пайплана для Jenkins и необходимые настройки конфигурационных файлов для Terraform и Ansible.

  • Далее создается виртуальная машина Terraform,

  • Потом она донастраивается с помощью Ansible.

  • И на заключительном этапе для этой развернутой ноды в git-репозитории создается новая ветка, куда пушится ее состояние, чтобы мы видели, на основе чего эта нода была развернута.

 

 

Вот здесь показано, как видит настройка и запуск пайплайна в Jenkins.

А справа – файлик, где мы указываем логины, пароли, почту и роли участников проектной команды.

 

 

Теперь создание стенда происходит намного быстрее – время сократилось до 40 минут.

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

И в целом каждый участник команды может какие-то свои изменения внести в этот процесс и подключиться к развитию этого инструмента.

 

Преимущества подхода «Infrastructure as code»

 

 

Все ноды у нас едины между собой – нет так называемого configuration drift, когда вроде бы развернуты одинаковые сервисы, но с разными настройками. От этого поддержка усложняется – непонятно, кто делал на них, с какой целью.

При автоматическом развороте человеческий фактор исключается – мы не ловим какие-то ошибки на мелочах.

 

 

Ну и плюс наши инженеры радуются, потому что теперь они занимаются более интеллектуальной и интересной деятельностью: развиваются, развивают направление и тратят меньше времени на рутинные задачи.

 

Вопросы

 

Вы показали на примере линуксовой архитектуры, но я предполагаю, что у вас наверняка должны быть и виндовые проекты. Когда речь идет об экосистеме Microsoft, какие инструменты по аналогии с Ansible вы используете и используете ли вообще?

Последнее время стали использовать Chocolatey для разворота платформы и различные скрипты автоматизации на OneScript для подключения к серверу 1С через RAC и RAS.

Я не совсем понял, а в какой среде эти скрипты исполняются? Голый PowerShell или может быть 1С:Исполнитель у вас там все конфигурирует?

1С:Исполнитель пока не используем, потому что исторически больше использовали OneScript.

В основном создается шаблон виртуалки – это в полуручном режиме происходит. Все-таки стенд на Windows намного проще развернуть, чем стенд на Linux с кучей сервисов.

Поэтому для Windows пока нет полной автоматизации, и для нас это не так критично.

Скажите, пожалуйста, а почему вы используете два разных продукта: Terraform и Ansible? Почему не используется один? Потому что в моем понимании Ansible в вашем формате может заменить полностью Terraform?

Да, есть такой момент. На момент внедрения этой линии автоматизированного создания виртуальных машин Ansible еще не умел хранить состояние этих виртуалок. Поэтому было принято решение скрестить эти инструменты.

 

*************

Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event.

Инфостарт Tech Event 2026

Инфостарт A&PM Event 2026

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

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

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

См. также

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

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    8800    KatanaDragon511    26    

35

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

Представьте, что вас попросили «сделай нам DevOps для 1С». С чего начинать? Часто за этой потребностью скрывается хаос в самом процессе разработки. Поэтому начинать нужно не с инструментов, не с серверов и не со скриптов, а с понимания того, что именно необходимо изменить. Предлагаем небольшой спасительный чек-лист, по которому можно относительно безболезненно запустить современные процессы управления разработкой 1С, даже когда у команды нет ничего, а изменения они присылают друг другу почтой и в мессенджерах. Вы получите структурированный пошаговый список задач, с которым не страшно окунаться в любой проект аудита разработки на 1С с целью навести там порядок.

31.08.2026    2183    Evil Beaver    2    

13

Нейросети DevOps и автоматизация разработки EDT Системный администратор Программист Руководитель проекта Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:ERP. Управление холдингом Абонемент ($m)

Почему ни утилита ring, ни ibcmd не способны «из коробки» собрать бинарный .cfe из исходников EDT без развертывания СУБД? Разработчики коммитят код в Git из 1C:EDT, но на серверы тестирования и в прод по-прежнему требуются бинарные контейнеры Конфигуратора. Ручные манипуляции с XML, локальные временные базы и забытый синтаксический контроль на каждой задаче сжигают часы рабочего времени. В статье разбираем архитектуру инструментов платформы и выстраиваем сквозной автоматический мост между EDT и Конфигуратором: - Анатомия сборки: почему ring только транслирует схему XML, а ibcmd жестко завязана на структуры СУБД; - Трансформация процессов: как освободить программиста от рутины, победить кодировки и Xvfb в Linux и сделать Git единственным источником правды; - Zero-dependency решение: скрипт edt-to-configurator.js, работающий и как консольный сборщик, и как Agent Skill для ИИ-ассистентов; - Ready-to-use CI/CD: готовые конфигурации для GitLab CI и GitHub Actions.

1 стартмани

31.08.2026    999    Ninel_S    0    

1

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

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

26.08.2026    825    YA_2159986692    2    

1

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

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    18940    mrXoxot    51    

75

Linux DevOps и автоматизация разработки Программист 1С 8.3 Беларусь Россия Казахстан Бесплатно (free)

Разворачивание полноценной CI/CD инфраструктуры для 1С на Linux — это не просто дань моде, а жесткая необходимость для бизнеса, который не может позволить себе простои из-за ошибок человеческого фактора.

25.08.2026    986    Ninel_S    0    

1

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

Полный цикл разработки расширения 1С в пакетном режиме DESIGNER: выгрузка, правка, гейт компиляции, применение к базе и контроль результата — без единого клика в конфигураторе. Разбираю семь мин, на которых подорвался лично: почему LoadConfigFromFiles возвращает нулевой код на битом модуле, зачем нужен Xvfb, как pgrep находит сам себя, кто держит базу и как отличить работающий сеанс от забытого, и почему после рестарта сервера база остаётся закрытой. Платформа 8.3.27, УТ 11.5, сервер на Linux.

24.08.2026    3236    YA_2159986692    7    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Artem-B 104 06.11.23 14:23 Сейчас в теме
Спасибо за доклад.
Подскажите, а как у вас организовано окружение для CI/CD?
Под каждый пайплайн поднимаются контейнеры с Postgres, сервером 1С, тонким клиентом ?
В противном случае как решаете конфликты с конкуретным/параллельным запуском одного и того же пайплайна? (например, клиенты тестирования и менеджеры могут друг другу мешать, тоже самое касается и баз для тестов)
3. Libelle 56 28.11.23 14:04 Сейчас в теме
(1) под каждый пайплайн свое окружение, но пайплайн с автотестами - отдельный и таски параллельно в нем не запускаются
2. Alistan007 08.11.23 21:05 Сейчас в теме
Почему в стеке нет 1С Исполнителя? )
4. Libelle 56 28.11.23 14:06 Сейчас в теме
(2) его не было еще на момент создания скриптов
5. RayCon 827 05.02.24 02:51 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация