Создатели крупнейшего хостинга репозиториев кода GitHub объявили, что теперь будут работать в Codespaces. Облачная среда обеспечивает доступ к 32 процессорным ядрам и до 64 ГБ оперативной памяти. Такие мощности должны ускорить совместную разработку проектов любого масштаба.
Большие перемены
Кодовой базе GitHub.com почти 14 лет. Разработчики подчеркнули: если брать историю программирования, начиная с эпохи расцвета языка COBOL, это не слишком большой срок. Но для эпохи интернета это довольно много. Посудите сами: когда на GitHub.com опубликовали первый коммит (снимок репозитория кода), Ruby on Rails, на котором написан код платформы, было всего два года. А службы облачных вычислений Microsoft Azure и Google Cloud Platform в то время еще даже не существовали.
За 14 лет в основном репозитории GitHub.com (github / github) было опубликовано более миллиона коммитов. Подавляющее большинство из них подготовили разработчики, которые создают и тестируют код компьютерах Apple и macOS. Но, видимо, для проекта Microsoft (она купила GitHub в 2018 году за 7,5 млрд долларов) пришло время больших перемен.
В GitHub давно используют подход, основанный на использовании единых сценариев и правил для всех. Новые сотрудники могут просто клонировать основной репозиторий github / github и из него запускать сценарии установки и начальной загрузки, а также иметь локальный экземпляр GitHub.com, который находится в работоспособном состоянии примерно 12 часов в сутки. Когда же что-то идёт не так, сценарий автоматически связывает сотрудника со специалистами службы поддержки, которые оперативно решают проблему.
Команды, которые позволяют запустить локальную копию GitHub
Но GitHub непрерывно растёт, и в какой-то момент даже небольшие изменения в коде стали все чаще приводить к краху. Приходилось разрабатывать скрипты, которые восстанавливали локальные копии репозитория до гарантированно работоспособного состояния, и часами ждать, пока обновятся внутренние зависимости проекта.
Переход в Codespaces должен решить эту проблему – для GitHub и других крупных проектов. Единая облачная среда повышает производительность разработки и сокращает время ожидания.
Что такое Codespaces
Проект Codespaces предоставляет командам разработчиков быструю среду совместной разработки в облаке. С ней в любой момент можно вернуться в заведомо работоспособное состояние репозитория и сразу продолжить начатое, не решая ворох возникших проблем.
Codespaces доступен в любом популярном браузере. Под капотом – виртуальные машины, которые включают до 32 процессорных ядер, до 64 ГБ оперативной памяти и до 128 ГБ места на диске.
Интерфейс платформы – интегрированная среда Visual Studio Code со всеми основными инструментами. Здесь есть редактор, дебаггер, терминал, доступ к системе контроля версий, синхронизация настроек, расширения и инструмент GitHub Copilot на базе искусственного интеллекта для дополнения кода. Есть также возможность предварительного просмотра изменений в браузере при работе с веб-проектами и порт-форвардинг.
С августа проект Codespaces стал доступен в тарифных планах Team и Enterprise Cloud на github.com. Платить предлагается за использованное время и ресурсы. Например, виртуальная машина с 2 процессорными ядрами и 4 ГБ оперативной памяти обойдётся в 18 центов в час, хранение гигабайта данных на диске – 7 центов в месяц.
Личный опыт
Разработчики признались, что миграция в Codespaces далась им нелегко. Репозиторий GitHub.com занимает на диске почти 13 ГБ. Клонировать его можно было не менее чем за 20 минут, а настройка зависимостей и загрузка кодового пространства занимала ещё 45 минут. Но даже после успешного монтирования репозитория в кодовое пространство разработчики очень долго не могли запустить проект.
В итоге после множества изменений и доработок пришлось переделать логику клонирования репозиториев в Codespaces. Вместо создания полного клона при инициализации теперь выполняется поверхностное клонирование, а затем, после создания кодового пространства с самыми последними коммитами, в фоновом режиме загружается история репозитория. Это позволило сократить время клонирования с 20 минут до 90 секунд.
После оптимизации кеширования и автоматического создания Docker-контейнеров, которые используются в качестве настроек (config-as-code) для сред Codespaces, загрузку кодового пространства и зависимостей удалось ускорить с 45 минут до 5. Но команда хотела большего, ведь обычно разработчики не готовы ждать 5 минут и уже через 10 секунд выпадают из состояния потока.
В GitHub поняли, что основная проблема заключалась в том, что клонирование и загрузка конкурируют за ресурсы. Поэтому в Codespaces стали заранее создавать предварительно сконфигурированные кодовые пространства, которые будут готовы к работе за 10 секунд.
Кроме того, миграция на Codespaces позволила делиться с коллегами результатами разработки просто по ссылке – без коммитов, пушей, код-ревью или развертывания. Достаточно просто скопировать и отправить ссылку, чтобы другой разработчик получил доступ к 80 порту в вашем кодовом пространстве и выполнил все необходимые операции или тесты.
Наконец, GitHub добавил в Codespaces поддержку работы в консоли. Для этого достаточно обновить предварительно созданный образ, который инициализирует sshd с открытыми ключами, открывает порт 22 и перенаправляет запросы к нему из кодового пространства. Что-то подобное можно сделать в любом проекте, чтобы повысить эффективность и удобство разработки.