Как с помощью одного сервиса сократить время онбординга разработчиков на 90%

В первой же строке признаюсь, что в заголовке немного лукавство. Дело в том, что разработчики, с которыми я работал и для которых поднимал этот сервис, — начинающие, студенты младших и средних курсов университетов. Многие из них в начале работы не имели на компьютерах даже IDE. Однако я уверен, что описанный далее способ поможет не только им, но и более опытным разработчикам.

c7e56f20b7e5410c1367d6201f1c7647.webp

А рассказать я хочу про Coder — OpenSource инструмент для поднятия готовых разработческих окружений по запросу. То есть готовых сред, к которым можно подключиться по ssh или с помощью вашей любимой IDE, в которых уже установлены нужные утилиты, произведены нужные настройки, сконфигурирован проект и остается только писать код и запускать тестирование одной кнопкой.

За последние годы я работал в дюжине разных команд, и моя нелюбимая часть работы в каждой новой — первые дни, когда тебе показывают репозиторий, ридмишку и ты уходишь в томительные часы установки всех зависимостей, получая миллионы различных ошибок от «не работает линтер» до «эта библиотека не поддерживает ваши ОС/архитектуру процессора/видеокарту».

Решений подобных проблем довольно много: крупные богатые компании могут всем поголовно выдавать одинаковые макбуки, на которых у всех разработчиков одинаковое железо и на них будет установлен одинаковый набор ПО; другие пишут подробные гайды по установке, поднимают свои репозитории с зависимостями и фиксируют эти зависимости жесткими версиями; у третьих в проектах появляются Dev Containers. Вариантов решения довольно много, но Coder показался мне одним из самых универсальных.

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

При этом вы (человек, который настраивает Coder в своей команде или организации) имеете почти неограниченное количество возможностей, где эти окружения поднимать, благодаря тому, что для настройки используется Terraform. Исключение составляет лишь то, что это будет не локальное развертывание на машинке разработчика, а какое-то сетевое расположение. Примеры:

  • Сервер или группа серверов в AWS, Google Cloud Platform, Microsoft Azure, Yandex/Sber/VK Cloud или любом другом облачном провайдере.

  • Kubernetes в вашем корпоративном контуре.

  • Docker контейнеры — мой любимый способ, которым я, в основном, и пользуюсь.

Если вы уже знакомы с Terraform хотя бы обзорно, то на примерах из официального репозитория и статьи на официальном сайте вы поднимите свое первое окружение за пару часов вне зависимости от выбранного варианта размещения. При этом Coder позволяет использовать разные варианты для разных шаблонов проектов, и даже комбинировать их в пределах одного шаблона.

Coder для разработчика

Сам я полностью пересел на Coder для разработки всех своих пет-проектов и любых других внерабочих активностей. Подняв однажды Coder-сервер я теперь трачу минут 30 на то, чтобы накидать базовый Docker-образ со всеми нужными зависимостями (или вообще беру готовый, если в проекте есть dev containers) и начинаю разработку. Я бы потратил столько же времени на то, чтобы поднять окружение локально на своем рабочем компьютере, а на новой машинке время настройки, скорее всего, еще кратно увеличилось бы.

Каждый микросервис разрабатывается отдельно. Вместо кучи папок и софта на локальной машине – отдельные окружения в докер контейнерах.

Каждый микросервис разрабатывается отдельно. Вместо кучи папок и софта на локальной машине — отдельные окружения в докер контейнерах.

Еще из плюсов:

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

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

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

  • Когда нужно поработать с чужого компьютера, можно запустить VSCode прямо в окне браузера и просто отредактировать код без вообще какой-либо установки ПО.

  • Если запарол машинку — за пару кликов поднимаешь новую.

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

Но есть и минусы:

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

  • Для работы всегда нужно стабильное подключение к интернету. В самолете не поработаешь.

В моем Coder есть несколько готовых универсальных шаблонов, которыми я пользуюсь регулярно:

  • Общий. Поднимает один Docker-контейнер с Ubuntu без каких-либо дополнительных зависимостей. Дальше можно доставить что угодно и пользоваться. Удобно для каких-то быстрых задач, когда нужно поднять окружение один раз, протестировать и удалить.

  • Python FastAPI. Мое основное рабочее окружение, поднимающее контейнер на основе Python, контейнеры с Postgres и Redis. Это мой основной контейнер, многие мои проекты написаны на плюс-минус этом стеке с небольшими изменениями.

  • Node.js. Контейнер для фронтенда, который представляет из себя общий, но с установленным Node.js, pnpm и другими мелочами.

  • Airflow. Наверное самый сложный из шаблонов окружений, поднимающий в докерах БД и Airflow, позволяющий быстро и удобно разрабатывать графы и дебажить таски. Нужен был для пары проектов.

Как я уже упомянул, все среды я запускаю в Docker контейнерах. На машинке в 4 ядра и 8 гигов живу вполне себе спокойно. На той же машинке у меня Gitea с CI-раннером и JupyterHub. То есть получилось достаточно легковесно на моих нагрузках.

Замечу что Coder и VSCode делают довольно много, чтобы пользоваться удаленными окружениями было удобно. Например, Coder в интерфейсе предоставляет публичный SSH ключ, который можно подключить в вашем аккаунте Github/Gitlab/пр. Приватниый ключ автоматически пробрасывается на машинки и позволяет бесшовно работать с удаленным репозиторием без ввода логина и пароля, без проброса SSH агента. VSCode же умеет одной кнопкой (а зачастую вообще самостоятельно) пробрасывать порты на локальную машинку, поэтому экспириенс от разработки веб сервисов совершенно бесшовный, неотличимый от работы локально.

Кстати, насколько я знаю, подключаться к средам можно не только через VSCode, но и через другие IDE. Примеры с VSCode исключительно потому, что ничем другим я не пользовался.

Для руководителя

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

Но самый показательный экспириенс был с студентами, которые разрабатывают приложение Твой ФФ, про которое я рассказывал тут. Летом в той команде проходила стажировка, в которой участвовали студенты 1–3 курсов, в которой я участвовал как руководитель в одном из направлений. Участвую я уже не первый год, но в этом году решил протестировать Coder. В прошлом году у меня уходили недели на то, чтобы собраться с каждым из стажирующихся и помочь ему настроить среду на его Windows XP или непонятно откуда взявшейся Аврора ОС (давайте не будем задавать вопросы что за стажеры пришли кодить и не могут установить себе питон). В этом году я потратил по часу на онбординг каждого, в который входило и описание задачи, и подготовка окружения.

Кнопка EasyCode открывает Coder с заполненными настройками. Окружение в один клик прямо из ридми.

Кнопка EasyCode открывает Coder с заполненными настройками. Окружение в один клик прямо из ридми.

Для себя я выделил несколько важных вещей, поработав с Coder в команде:

  • Готовые среды очень эффективны, когда разработчики не очень опытные.

  • Если опытные разработчики тоже пользуются Coder для работы — шаблон под проекты этого вида будет развиваться, обрастать фичами и оставаться актуальным, в отличие от документации в README.

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

За полгода Coder стал неотъемлимой частью моей среды для работы из-за его удобства и простоты использования. Думаю, что кроме этого решения есть и другие удобные code-env среды или иные способы быстрого поднятия разработческих «песочниц», но я не проводил исследований, попал первой ссылкой на Coder и считаю, что не прогадал. С большим удовольствием почитаю комментарии, какие варианты прошли мимо меня.

© Habrahabr.ru