Внутренние платформы разработки (Internal Development Platform, IDP), как один из артефактов реализации платформенного подхода (Platform Engineering), становятся важной точкой роста для многих компаний, занимающихся разработкой: помогают унифицировать стек, снизить нецелевую нагрузку на команды, сократить time-to-market. Поэтому многие компании начинают двигаться в сторону создания своих IDP.
Мы продолжаем серию статей о Platform Engineering и Internal Development Platform (IDP). В первом и втором материалах цикла мы уже рассмотрели базовую теорию, познакомились с типовой архитектурой IDP и вариантами реализации. А в этой статье остановимся на обзоре Dev Platform, разрабатываемой командой VK Cloud.
Немного контекста
Platform Engineering — методология организации команд разработки и инструментов вокруг них, которая позволяет снять с разработчиков лишнюю непрофильную нагрузку, повышая тем самым их производительность в контексте поставки ценности для бизнеса.
Internal Development Platform (IDP) — внутренняя платформа разработки, которая является одним из вариантов реализации платформенного подхода. Классически IDP представляет собой портал, который в формате «единого окна» дает разработчикам доступ к инструментам, ресурсам, выстроенным пайплайнам, шаблонам стендов, другим преднастроенным компонентам и решениям.
О Dev Platform
Построение платформы — достаточно сложная задача. Обусловлено это тем, что продукт должен включать множество сервисов для покрытия всего пайплайна разработки: от task-трекера и хранения кода до управления инфраструктурой, где будет развернуто приложение.
На этапе зарождения Dev Platform мы рассматривали два варианта реализации решения:
-
в виде набора продуктов, имеющих интеграцию между собой (пример — стек Atlassian);
-
в виде большого комбайна all-in-one, который включает все сервисы сразу и не предполагает поставку сервисов отдельно (пример — Azure DevOps или Gitlab).
Первый вариант, безусловно, имеет ряд преимуществ — разработка отдельных сервисов легко выделяется в отдельное направление и имеет свой трек продаж. Например, Task Tracker может быть разработан отдельно и продан независимо от других компонентов.
Но наши исследования показали, что лучший Developer Experience был в решениях, построенных по типу All-in-one. Более того, степень интеграции сервисов между собой в решениях такого типа, как правило, выше. Поэтому, чтобы команды разработки с нашим продуктом получали максимум возможностей, мы выбрали путь создания единого решения, которое бы включало все необходимые сервисы «из коробки».
От концепции к реализации
После определения границ продукта и выбора варианта поставки, нам надо было определить, что именно должно стать «центральным ядром» для работы команд с нужными им ресурсами внутри продукта: проект, репозиторий или конкретный сервис. От этого также зависит Developer Experience пользователей платформы.
Например, в github все процессы выстроены вокруг репозитория. То есть реализуется подход repo-first. Это удобно для open-source разработки, когда работа ведется с одним или несколькими публично доступными репозиториями. Например, это отличное решение для inner-source подхода при работе с кодом. Тут очевидно — такой фокус делает сложным насыщение платформы новыми сервисами и их ресурсами, поскольку репозиторий будет на первом месте, даже несмотря на то, что является лишь одним из инструментов команды.
В gitlab — другой подход. Здесь также преобладает repo-first, но репозиториторий вписан в проект, который, в свою очередь, является центральной точкой работы с ресурсами: окружениями, кодом, CI/CD, тасками. То есть, проект можно насыщать дополнительными сервисами и ресурсами. Например, если появится новый сервис — он просто станет доступен в проекте. Таким образом реализуется project-first подход.
Но у этой реализации в gitlab есть недостаток — один проект всегда соответствует одному репозиторию. То есть присутствует неявная зависимость проекта от репозитория.
Этот недостаток устранен в Azure Devops. Так, здесь проект, как и в gitlab, является центральным местом работы команды, но отсутствует жесткая привязка проекта к репозиторию. То есть, репозиторий — один из ресурсов, и их может быть несколько. Это удобно, если в одном проекте, где работает команда, нужно несколько репозиториев — например, для DevOps, QA, Front, Back.
Так или иначе, в github, gitlab и Azure DevOps проекты и репозитории оборачиваются в некую иерархию:
-
в Azure DevOps и Github — это организации;
-
в Gitlab — это группы (организации будут скоро также добавлены).
Такая иерархия очень удобна для организации multitenancy (актуально для SaaS и некоторых on-prem заказчиков) и работы в одном продукте нескольких подразделений одного холдинга.
Взвесив все плюсы и минусы существующих решения, для реализации Dev Platform мы остановились на project-first подходе без жесткой привязки к конкретному ресурсу (по примеру Azure DevOps). Это позволит нам масштабировать сервисы в продукте без изменения пользовательского опыта и иерархии ресурсов. Для реализации multitenancy и предоставления гибкости крупным компаниям, мы сейчас работаем над организациями, в которые будут вписаны проекты.
Таким образом, в рамках Dev Platform мы реализуем подход All-in-One с организационно-проектно-ориентированной моделью. Это позволяет нашим пользователям работать с такими однозначными и ясными понятиями как: организация, проект, сервис и ресурс. С одной стороны, это дает возможность поддержать организационную структуру наших клиентов в продукте, а с другой — поможет выстроить работу каждой отдельной команды разработки в режиме единого окна.
Состав Dev Platform
Пользователям Dev Platform мы предоставляем доступ к таким сервисам как:
-
таск-трекер;
-
git-репозитории;
-
CI/CD;
-
сервисы развертывания инфраструктуры;
-
система управления качеством кода.
Здесь стоит оговориться, что не все сервисы мы реализовываем самостоятельно — это сложно, нерационально и ограничивает пользователей. Вместо этого мы делаем акцент на двух моментах:
-
позволяем интегрировать платформу в любой окружающий ландшафт;
-
реализовываем платформу так, чтобы разработка и onboarding новых сервисов были проще для конечных пользователей.
Например, на первом этапе для интеграции с другими продуктами мы активно развиваем систему веб-хуков и публичный API продукта. В будущем, по мере развития, будет реализована система плагинов, которая позволит серьезно расширить возможности платформы.
Варианты поставки Dev Platform
Уже сейчас доступен on-premise вариант поставки Dev Platform — решение может быть установлено в инфраструктуре Заказчика (поверх частного облака VK). Также в ближайшее время обеспечим возможность развертывания в Публичном Облаке VK, в качестве single-tenant инсталляции. В планах на 2025 год планируется реализация и SaaS-версии продукта.
При этом, как мы уже упоминали в предыдущих статьях (здесь и здесь), наибольший положительный эффект дает экосистема. То есть, максимальное раскрытие потенциала Dev Platform возможно в связке с VK Cloud (как с публичным, так и с частным облаком). Причем на базе платформы VK Cloud можно не только разворачивать инфраструктуру под IDP, но и строить каталог услуг. Использование всего стека инструментов, доступных на облачной платформе, и развертывание Dev Platform поверх VK Cloud позволяет выстраивать полностью экосистемное решение и получать больше ценности за счет глубокой интеграции с механизмами управления облачной инфраструктурой. Причем в данном случае, чтобы разработчик получил необходимые ресурсы, не нужны дополнительные согласования, сложные интеграции и длительные ожидания.
Также в перспективе с Dev Platform можно будет работать без привязки к облаку VK Cloud — на той инфраструктуре или платформе, которая есть у пользователя.
Dev Platform как IDP
Dev Platform при построении IDP может выступать в качестве готового «ядра» с предварительно настроенными, проинтегрированными и совместимыми сервисами. Причем реализовать такую интеграцию Dev Platform в IDP можно минимальными усилиями со стороны пользователя — решение поставляется в виде «коробки», которая устанавливается при помощи инсталлятора.
Внедрение Dev Platform закрывает в первую очередь greenfield-проекты, которые подразумевают разработку нового решения или инициативы. Объективно, командам гораздо легче начать использовать платформу для разработки нового продукта.
Но при должной подготовке на IDP можно перенести и brownfield-проекты, то есть существующие системы, которые долгое время разрабатываются внутренними командами или внешними подрядчиками. Опыт наших внутренних команд показал, что это возможно, хоть и не всегда просто.
Вместе с тем, надо понимать, что установка Dev Platform as-is, к сожалению, не приведет само по себе к перестройке организации и взрывному росту культуры разработки. Следуя Team Topologies, для получения максимального профита от внедрения IDP в компании зоны ответственности должны быть разделены. Так, нужны:
-
команды продукта (функциональные команды), которые разрабатывают продукты;
-
платформенная команда, которая администрирует Платформу;
-
команда вовлечения (enabling team), которая помогает остальным участникам процесса максимально быстро и эффективно втянуться в новые реалии.
Что «под капотом»
«Под капотом» нашей платформы собраны как распространенные инструменты с открытым исходным кодом, так и сервисы, разработанные VK. Например:
-
ядро платформы в качестве оркестратора компонентов решения;
-
портал самообслуживания как единое окно для участников команд разработки;
-
окружения — компонент, управляющий ресурсами в VK Cloud;
-
репозиторий артефактов представлен Nexus Repository;
-
сервис развертывания окружений представлен нашей собственной разработкой, которая на базе Terraform-файлов деплоит инфраструктуру в VK Cloud;
-
задачи ALM-системы выполняет партнерское решение (на выбор: Devprom ALM или TeamStorm);
-
для анализа качества кода доступен SonarQube.
Вместе с тем, в большинстве своем Dev Platform базируется на open-source компонентах. Выбор в пользу open-source осознан и дает ряд важных преимуществ.
-
Низкий порог входа. Многие компании работают с open-source-инструментами, поэтому перейти на Dev Platform могут практически бесшовно — в большинстве случаев не придется сложно и мучительно перестраивать пайплайн с нуля, отказываться от самописных реализаций и скриптов, осваивать новые решения.
-
Сокращение рисков vendor lock-in. Поставляя пользователям сервисы с открытым исходным кодом, мы исключаем ситуации, при которых инструмент может стать недоступным по решению компании-разработчика. Так мы позволяем строить стабильные платформы разработки.
Но мы не довольствуемся возможностями open-source «в чистом виде», и в рамках своего продукта расширяем их, а также планируем добавить в ближайшее время:
-
multiple approvers in code review;
-
merge request approval settings;
-
запрет мержа без получения апрува всех ревьюверов;
-
merge request approval rules;
-
merge rules;
-
code owners;
-
remote repository pull mirroring.
При этом мы отвечаем за обновление всех компонентов, чтобы пользователям были доступны все востребованные функции и апдейты.
Особенности нашей реализации
-
Dev Platform предоставляет портал, который является единой точкой входа с поддержкой SSO (single sign-on) для быстрого, удобного и, главное, безопасного доступа к инструментам.
-
В рамках Dev Platform все инструменты уже проинтегрированы между собой, практически сразу готовы к работе и поставляются в виде единого инсталлятора. При этом за обновление и администрирование компонентов Dev Platform отвечает команда VK Cloud, снимая нагрузку с пользователей. Настройка всех компонентов остается на стороне пользователя, что позволяет гибко адаптировать Dev Platform под специфические задачи компании.
-
Портал Dev Platform позволяет осуществлять централизованное управление ролевой моделью, чтобы распределять права доступа к инструментам, функциям и рабочим средам. Благодаря этому, можно реализовывать логическое деление по командам, проектам и даже организациям (что особенно важно в случае привлечения специалистов на аутсорсе). Причем то, что настроено через портал, нельзя изменить на уровне отдельного инструмента — это исключает риск несанкционированного изменения прав доступа.
-
Вместе с платформой мы поставляем набор различных практик, преднастроенных Terraform- и CI/CD-шаблонов, которые позволят ускорить сборку и развертывание приложений на инфраструктуре VK Cloud.
-
Порог входа в работу с Dev Platform минимален. Во-первых, вместе с платформой мы поставляем набор методических рекомендаций с гайдами по развертыванию решений, настройке, примерами лучших практик и другими материалами. Во-вторых, мы предлагаем обучение и консалтинговые услуги в части настройки инструментов, перестройки процессов, аудита, сопровождения, внедрения Application Security компонентов, выстраивания end-to-end процесса разработки и других задач.
-
Dev Platform позволяет централизованно управлять инфраструктурой. Также решение дает возможность управлять разработкой не только в рамках проектов, но и в рамках организаций.
-
В Dev Platform реализован инструмент интеграции внешних систем для простого подключения новых решений по API и веб-хукам. Это предопределяет возможность дальнейшего расширения стека Dev Platform и функциональности платформы в целом.
-
В Dev Platform безопасная разработка реализована через интеграцию с решениями наших партнеров, являющихся лидерами в области AppSec. При работе с платформой можно будет выбрать один из заготовленных шаблонов для сканирования конвейера на наличие ошибок и уязвимостей.
Сценарии работы с Dev Platform
Dev Platform — all-in-one-продукт, поэтому с ним можно работать по-разному.
-
Построение IDP. Базовый сценарий, который подразумевает применение Dev Platform в качестве основы для построения IDP. В таком сценарии пользователь может быстро развернуть из инсталлятора готовый набор преднастроенных и проинтегрированных инструментов, сокращая затраты ресурсов и времени на подготовку IDP.
-
Настройка собственного процесса разработки. Во многих enterprise-компаниях важен комплаенс с точки зрения безопасности и ИТ-инфраструктуры. Dev Platform позволяет на уровне портала ограничить функции инструментов и настроить шаблоны работы с ними (например, в части хранения, CI/CD, деплоя и не только), чтобы унифицировать пайплайн, повысить контроль над циклами разработки и исключить нецелевое использование ресурсов.
-
Обеспечение безопасной разработки. Сейчас приоритетом многих компаний является безопасная разработка и интеграция с инструментами DevSecOps. Поэтому в Dev Platform, совместно с крупнейшими компаниями в области информационной безопасности, реализованы интеграции с AppSec-инструментами. Это позволяет полностью закрыть end-to-end цикл с учетом требований security software development lifecycle (SSDLC).
-
Разделение на различные контуры разработки. Многие компании реализовывают разделение по контурам — например, на Dev и Prod. При этом полученные сущности максимально между собой развязаны — как правило, у пользователей разные доступы к каждому из сегментов. Например, Prod контур является более доверенным, и для попадания в него кода или артефакта должны быть пройдены ряд проверок. Если развертывать среды с помощью Dev Platform, за счет максимальной идентичности инструментов и окружений, при переносе кода в прод не возникает никаких проблем с совместимостью. Аналогично дополнительный экземпляр Dev Platform можно разворачивать для создания тестового контура out-source-разработки, тесно связанного с основным контуром.
-
Работа с подрядными организациями и удаленные офисы. Также можно обеспечить подключение подрядчиков к Dev Platform за счет разделения на организации. Такой подход позволяет предоставлять разграниченные доступы в том числе и командам разработки, относящимся к разным бизнес-юнитам и даже департаментам. Так можно создать условия для обособленной работы и защиты информации, но предоставить единую среду разработки, чтобы максимально быстро доносить ценность до конечных потребителей.
Как это все работает
Для наглядности кратко разберем возможности работы с Dev Platform для пользователей двух категорий:
-
менеджера проекта (либо любого другого человека, отвечающего в компании за запуск разработки и имеющего права на выделение ресурсов);
-
разработчика.
Менеджер проекта
В Dev Platform менеджеру проекта доступна возможность создания нового проекта или работы с уже существующим.
Помимо этого, из единого окна он может:
-
создавать и настраивать необходимые компоненты;
-
управлять пользователями и/или группами пользователей (интегрированных с AD);
-
выдавать доступы (например, DevOps-инженеру для настройки стендов) и не только.
Тут сразу нужно сделать несколько ремарок.
-
Облачный проект нужно предварительно добавить. Делает это специалист, ответственный за виртуальные ресурсы, либо сам DevOps, которому передали креды. Добавление происходит через механизм service connection.
-
Разворачивая окружение, DevOps использует terraform-скрипт, с помощью которого создаются необходимые ресурсы в выбранном облачном проекте.
-
Файл с переменными нужен для того, чтобы далее разработчики могли самостоятельно без помощи DevOps корректировать наполнение ВМ и их количество под свои нужды. При этом, данную опцию можно отключить, чтобы избежать потенциально нецелевого использования ресурсов.
Примечание: Реализацию взаимодействия между нашей платформой и облаком VK Cloud мы рассмотрим в рамках отдельной статьи.
Разработчик
В большинстве проектов возможности разработчиков ограничены по сравнению, например, с менеджерами. Аналогичный подход можно реализовать и в Dev Platform. Например, можно установить запрет на создание репозиториев с нуля, чтобы исключить возможность модификации существующих пайплайнов.
Вместе с тем, разработчик обычно имеет полный доступ к инструментам и функциям, которые нужны ему для работы. Что особенно важно, такой доступ предоставляется в рамках «единого окна» — не надо искать и запускать десятки программ в фоне.
Что дальше?
На текущий момент Dev Platform в первую очередь является оркестратором инструментов разработки. Это позволяет нам собирать все необходимые метрики с подключаемых к нам инструментов и предоставлять аналитику, чтобы пользователи могли отслеживать эффективность поставки ценности своей разработки и вовремя реагировать на инциденты.
Одновременно с этим, сейчас мы продолжаем работу над тем, чтобы перейти от оркестратора инструментов к оркестратору процессов разработки, который будет включать набор гейтов. С их помощью можно будет стандартизировать разработку и минимизировать влияние человеческого фактора (напоминаю, что споры в комментариях относительно ограничения роли разработчика процесса не просто допускаются, но и приветствуются).
Помимо этого наш приоритет на среднесрочную перспективу — повышение технологической независимости и локализации инструментов, входящих в стек платформы. Для этого мы планируем постепенный переход на решения собственной разработки и сервисы партнеров, разрабатываемые в РФ.
Мы уже сейчас плотно работаем с Dev Platform для решения внутренних задач, в том числе при разработке Dev Platform — закрываем с ее помощью значительную часть пайплайна разработки. Вместе с тем, в перспективе мы планируем перевести на Dev Platform разработку не только внутри VK Tech. Что из этого получится — расскажем в следующих статьях.
ссылка на оригинал статьи https://habr.com/ru/articles/827022/
Добавить комментарий