Как мы воплотили CI/CD в 1С, или зачем девелоперу непрерывные интеграция и поставка?
Офис Sminex
Распространённый подход к разработке — аккумулирование всех обновлений в единый пакет с последующим развёртыванием новой версии программного обеспечения. Это простая, понятная, отработанная годами схема, которая отлично подходит небольшим командам с маленьким количеством проектов и изменений. В больших проектах, когда к созданию кода привлечены несколько человек одновременно, это перестаёт работать — все ждут всех, задачи накапливаются, релизы становятся реже. И тогда на помощь приходит практика CI/CD.
Говорят, программисты делятся на два типа: тех, кто использует систему контроля версий, и всех остальных. В Sminex мы причисляем себя к первому типу. Причём, смеем утверждать, что мы один из очень немногих девелоперов, кто успешно внедрил практику CI/CD (Continuous Integration/Continuous Delivery, непрерывные интеграция и поставка) при работе с платформой 1С. Если вообще не единственный. Нам такой подход оказался крайне необходим.
Представимся
Sminex — лидер рынка элитной недвижимости Москвы по объёму строительства самых дорогих домов в центре столицы и по продажам. Мы аккумулировали 23-летний опыт в девелопменте недвижимости, создаём комфортную и престижную среду для жизни и работы, строим и проектируем 12 домов общей площадью более 700 тысяч квадратных метров.
Наши ключевые проекты, наверняка знакомые и вам, — элитный дом «Лаврушинский» в километре от Кремля, коллекция клубных особняков «Ильинка 3/8» в 160 метрах от Красной площади, клубные дома «Чистые Пруды» в 150 метрах от знаменитого пруда и «Обыденский № 1» в лучшей части Остоженки. В 2024 году планируем запустить продажи двух элитных проектов, один из которых — «Тишинский бульвар» в 400 метрах от исторической Тишинской площади.
Офис Sminex
Постоянный рост влечёт за собой и непрерывное увеличение числа сотрудников — в компании работают уже около 1800 человек, а концу года нас будет уже 2000. В департаменте IT в Sminex работают 145 высококлассных специалистов, которые, конечно же, занимаются не только DevOps, включая выстраивание и поддержание пайплайна CI/CD в 1С. У нас используется самый современный стек технологий и подходов: React, Vue.js, Node.js, GO, .NET CORE, BI, UI/UX, KeyCloak, очереди сообщений. Специалисты работают преимущественно двухнедельными спринтами. К концу года Sminex планирует увеличить штат айтишников до 180 человек.
Почему CI/CD?
При работе над крупными проектами неизбежно возникает ряд сложностей, которые становятся тем непреодолимее, чем сильнее разрастается сам проект и чем больше в нём участвует разработчиков. Некоторые из них, как, например, невозможность одновременного внесения нескольких изменений в продукт и монопольная работа с объектами конфигурации »1С», ещё можно терпеть. Другие же — непозволительны. Так, при внесении множества изменений в программный продукт становится крайне трудно отслеживать и проверять их, в результате чего в релиз могут попадать незапланированные варианты кода.
Отсюда следует, что конечные пользователи получают очередной релиз с большими задержками, которые могут достигать многих месяцев. И мы уже не говорим о том, что в больших проектах с большими командами тестирование продукта либо не проводится вовсе, либо осуществляется в ручном и весьма ограниченном режиме.
И вот тут как раз выходит на первое место практика CI/CD. В контексте »1С» CI означает непрерывную работу над продуктом, сборку готового решения и его всестороннее тестирование. CD — обновление готовым решением программного продукта для конечных пользователей. Подход CI/CD предполагает частое внесение небольших изменений в код с оперативными коммитами в репозиторий, частые автоматизированные сборки проекта по факту обновления репозитория, проведение регулярных автоматизированных тестов, а затем — автоматизированную же выгрузку обновлений в продуктивное окружение, для конечных пользователей.
Практика CI/CD в Sminex позволила получить прозрачность внедрения изменений в контуре систем »1С», значительно повысить качество выпуска релизов в том числе за счёт различных автотестов и повысить скорость выпуска программных релизов. И, наконец, мы отработали сам подход CI/CD и масштабируем его на новые корпоративные системы. Да, и не менее главное — повысили внутреннюю дисциплину, поскольку непрерывность как разработки, так и поставки предполагает частые коммиты небольших изменений — любителям взять задачу и «зависнуть» с ней на месяц в пайплайне CI/CD просто нет места.
Инструменты CI/CD
При внедрении непрерывных разработки и поставки изобретать велосипед мы не стали и использовали уже хорошо проверенный список инструментов. Они отлично работают, подходят для решения большинства поставленных задач.
Речь идёт о сервере автоматизации Jenkins, сервере управления репозиториями GitLab без доступа вовне и платформе SonarQube, которая позволяет анализировать и измерять качество программного кода. И, конечно, о библиотеках движка OneScript. Последний позволяет запускать фреймворки тестирования Vanessa-automation и Vanessa ADD. Через них мы, в частности, генерируем и прогоняем «дымовые» тесты — базовая проверка факта запуска приложений, функционирование различных форм, кнопок и подобного.
В составе Jenkins мы используем библиотеку Vanessa-usher от «Серебряной пули», как наиболее надёжное решение для автоматического создания Jenkins-файлов на основе настроек JSON. Такие настройки хранятся в репозитории каждого конкретного проекта »1С».
В конечном итоге у нас получилась относительно простая сборочная линия:
разработчик коммитит изменения;
сервер GitLab ловит их и передаёт управление Jenkins;
Jenkins запускает задачу по получению исходников, сборке конфигурации, расширений и обработок;
стартует процесс синтаксической проверки всей конфигурации;
стартует тестирование — модульные тесты TDD, «дымовые» и функциональные сценарные тесты;
параллельно проводится анализ качества кода;
формируется отчёт о внесённых изменениях.
В общей сложности прогон через линию занимает чуть меньше трёх часов. А после завершения прогона, сборки релиза и поставки его в продуктивное окружение, связанные задачи в Jira у нас закрываются автоматически. Удобно.
Результаты
Подход CI/CD мы в Sminex внедряли поэтапно. Первым был проект »1С: Зарплата и управление персоналом», затем — »1С: Управленческий учёт», а потом — »1С: CRM». Теперь коротко о плюсах. Больше не нужно тратить время на тестирование, сборку и доставку, потому что они проходят автоматически. Прежде этот процесс мог занимать несколько недель.
Кроме того, несколько разработчиков могут вносить изменения одновременно, не тормозя процесс разработки. Наконец, удалось снизить влияние человеческого фактора на качество готового программного продукта: автотесты с подробными отчётами — настоящее спасение. Да, определённая доля легаси кода в наших проектах тоже присутствует, но тут помогают дополнительные настройки серверов и окружения. Грубо говоря, код, созданный до определенной даты, то есть дня, когда мы начали внедрять CI/CD, просто игнорируется при прогонах.
В итоге мы создали собственный стандарт написания автотестов, проработали схемы DevOps-конвейера для хранилища »1С» и »1С: EDT», получили готовую структуру репозитория GitLab с кодом, тестами и плагинами, которую можно масштабировать на другие продукты »1С».
В Sminex мы активно развиваем IT-системы, потому что во многом они позволяют следовать нашей философии — строить в точности то, что обещано. Об этом более подробно расскажем в следующих статьях. И мы активно набираем специалистов, которым готовы платить выше рынка, предоставлять комфортные рабочие места с самыми современными IT-решениями и, самое главное, сталкиваться с новыми вызовами и непрерывно повышать свои компетенции. А приятное дополнение ко всему этому — медстраховка, бесплатные обеды и полдники, корпоративное обучение.
С актуальными вакансиями можно ознакомиться на нашей странице на HH.ru.