DevOps с приложениями Unity

Разработка приложений для современных платформ включает гораздо больше, чем просто написание кода. Эти действия, называемые DevOps (разработка + операции), охватывают весь жизненный цикл приложения и включают планирование и отслеживание работы, проектирование и реализацию кода, управление репозиторием исходного кода, выполнение сборок, управление непрерывной интеграцией и развертываниями, тестирование (включая модульные тесты и тесты пользовательского интерфейса), выполнение всевозможной диагностики в средах разработки и рабочих средах и отслеживание производительности приложения и поведения пользователей в режиме реального времени с помощью телеметрии и анализа.

Visual Studio (совместно с Azure DevOps Services и Team Foundation Server) предоставляет широкий набор возможностей DevOps. Многие из них применимы к кроссплатформенным проектам, в том числе к играм и мощным графическим приложениям, созданным с помощью Unity — особенно при использовании C# в качестве скриптового языка. Однако поскольку Unity имеет собственную среду разработки и выполнения, ряд возможностей DevOps не применяется, как в случае с другими типами проектов, созданных в Visual Studio.

В следующих таблицах описано, какие функции DevOps в Visual Studio применяются при работе с Unity, а какие — нет. Дополнительные сведения о самих функциях см. в документации по ссылкам.

Средства Agile

Ссылка для справки: о средствах гибкой разработки и гибком управлении проектами (с использованием Azure Boards или TFS, включая Team Explorer Everywhere)

Общий комментарий: все возможности планирования и отслеживания не зависят от типа проекта и языков программирования.

Функция Поддерживается в Xamarin Дополнительные комментарии
Управление невыполненной работой и спринтами Да
Отслеживание трудозатрат Да
Совместная работа в комнате команды Да
Канбан-доски Да
Визуализация хода выполнения и отчеты о ходе выполнения Да

Моделирование

Ссылка для справки: Анализ и моделирование архитектуры

Общий комментарий. Несмотря на то что эти функции разработки являются независимыми от языка программирования или поддерживают языки .NET, например C#, они работают на основе традиционной парадигмы приложений, предусматривающей иерархии объектов и отношения между классами. Разработка игры в среде Unity предполагает совершенно иную парадигму, основанную в частности на отношениях между графическими объектами, звуковыми дорожками, шейдерами, скриптами и другими объектами. По этой причине инструменты создания схем моделирования Visual Studio в целом мало применимы в отношении проектов Unity. В какой-то степени их можно использовать для управления отношениями внутри скриптов C#, но это лишь частная задача.

Функция Поддерживается в Xamarin Дополнительные комментарии
Схемы последовательностей Нет
Графы зависимости Нет
Иерархия вызовов Нет
Конструктор классов Нет
Обозреватель архитектуры Нет
UML-схемы (вариант использования, действие, класс, компонент, последовательность и DSL) Нет
Схемы слоев Нет
Проверка слоев Нет

Код

Функция Поддерживается в Xamarin Дополнительные комментарии
Использование системы управления версиями Team Foundation (TFVC) или Azure Repos Да Проекты Unity представляют собой наборы файлов, которые можно добавлять в системы управления версиями так же, как любые другие проекты. Однако существует ряд особенностей, которые описаны ниже.
Приступая к работе с Git в Azure Repos Да См. примечания после таблицы.
Улучшение качества кода Да
Поиск изменений кода и других журналов Да
Использование карт кода для отладки приложений Да

Особые замечания, касающиеся управления версиями с помощью Unity:

  1. Среда Unity отслеживает метаданные активов игры в виде единой непрозрачной библиотеки, которая по умолчанию скрыта. Чтобы синхронизировать файлы и метаданные, необходимо сделать метаданные видимыми и хранить их в виде более управляемых блоков. Дополнительные сведения см. в разделе Использование внешних систем управления версиями с помощью Unity (документация по Unity).

  2. Не все файлы и папки в проекте Unity подходят для управления версиями, как описано в указанной выше статье. Папки Assets и ProjectSettings можно добавить, но папки Library и Temp добавлять не следует. Дополнительный список создаваемых файлов, которые не следует передавать в систему управления версиями, см. в обсуждении Как использовать Git для систем управления версиями в Unity3D? на сайте StackOverflow. Многие разработчики также написали собственные статьи по этой теме в своих блогах.

  3. Двоичные активы в проекте Unity, например текстуры или звуковые файлы, могут занимать много места. Многие системы управления версиями, например хранилище GIT, сохраняют уникальную копию файла для каждого внесенного изменения, даже если оно затрагивает лишь небольшую часть файла. Это может привести к переполнению репозитория GIT. Чтобы решить эту проблему, разработчики Unity часто добавляют в репозиторий только окончательную версию активов, используя для промежуточного хранения другие средства, такие как OneDrive, DropBox или git-annex. Этот подход имеет смысл, так как в отличие от изменений исходного кода управлять версиями таких активов не требуется. Разработчики также обычно устанавливают принудительный текстовый режим сериализации активов в редакторе проекта, чтобы файлы сцен сохранялись в текстовом, а не в двоичном формате, что позволяет объединять копии в системе управления версиями. Дополнительные сведения см. в разделе Параметры редактора (документация по Unity).

Построение

Ссылка для справки: Azure Pipelines

Функция Поддерживается в Xamarin Дополнительные комментарии
Локальное развертывание Team Foundation Server (TFS) Возможна Сборка проектов Unity осуществляется с помощью среды Unity, а не системы сборки Visual Studio (при сборке с помощью набора средств Visual Studio Tools для Unity скрипты компилируются, но исполняемый файл не создается). Вы можете настроить сборку проектов Unity из командной строки (документация по Unity), поэтому вы можете настроить процесс MSBuild на сервере TFS для выполнения соответствующих команд Unity, если на этом сервере установлена сама среда Unity.

Unity также предлагает службу облачной сборки для Unity, которая отслеживает репозиторий Git или SVN и периодически выполняет сборку. В настоящее время она не работает с TFVC или Azure DevOps Services.
Локальные серверы сборки, связанные с Azure DevOps Services Возможна С приведенными выше условиями можно выполнять сборки, запущенные с помощью Azure DevOps Services, на локальном компьютере TFS. Инструкции см. в разделе Агенты сборки и выпуска.
Служба размещенного контроллера Azure DevOps Services Нет Сборки Unity в настоящее время не поддерживаются.
Определения сборки с сценариями до и после сборки Да В пользовательском определении сборки, использующем командную строку Unity для выполнения сборки, также можно настроить запуск скриптов до и после сборки.
Непрерывная интеграция, включая условный возврат Да Условный возврат доступен только для TFVC, так как Git работает с моделью запроса на включение внесенных изменений, а не с возвратом.

Проверка

Функция Поддерживается в Xamarin Дополнительные комментарии
Планирование тестов, создание тестовых случаев и организация наборов тестов Да
Тестирование вручную Да
Test Manager (запись и воспроизведение тестов) Только устройства Windows и эмуляторы Android
Покрытие кода Н/Д Неприменимо, так как модульное тестирование выполняется в среде Unity, а не в Visual Studio. См. следующий пункт.
Модульное тестирование кода В среде Unity, но не в Visual Studio Среда Unity предоставляет собственную платформу модульного тестирования в составе набора Средства тестирования Unity (Unity Asset Store). Результаты модульных тестов выводятся в Unity и недоступны в Visual Studio.
Использование автоматизации пользовательского интерфейса для тестирования кода Нет Закодированные тесты пользовательского интерфейса предполагают наличие доступных для чтения элементов управления в пользовательском интерфейсе приложения. Приложения Unity по своей сути являются графическими, и их содержимое не может считываться средствами для проведения таких тестов.

Улучшите качество кода

Ссылка для справки: Улучшение качества кода

Функция Поддерживается в Xamarin Дополнительные комментарии
Анализ качества управляемого кода Да Возможность анализа кода скриптов на языке C# в Visual Studio.
Поиск повторяющегося кода с помощью обнаружения клонов кода Да Возможность анализа кода скриптов на языке C# в Visual Studio.
Оценка сложности и удобства сопровождения управляемого кода Да Возможность анализа кода скриптов на языке C# в Visual Studio.
Средства производительности Нет Используйте Профилировщик Unity (веб-сайт Unity).
Анализ проблем с памятью .NET Framework Нет Средства Visual Studio не имеют обработчиков в платформе Mono (используемой средой Unity) для профилирования. Используйте Профилировщик Unity (документация по Unity).

Управление выпуском

Ссылка для справки: Сборка и выпуск в Azure Pipelines и TFS

Функция Поддерживается в Xamarin Дополнительные комментарии
Управление процессами выпуска Да
Развертывание на серверах для загрузки неопубликованных приложений через сценарии Да
Отправка в магазин приложений Partial Доступны расширения, которые автоматизируют этот процесс для некоторых магазинов приложений. См. раздел Расширения для Azure DevOps Services, например расширение для Google Play.

Мониторинг с HockeyApp

Ссылка для справки: Мониторинг с HockeyApp

Функция Поддерживается в Xamarin Дополнительные комментарии
Анализ сбоев, телеметрия и бета-распределение Да HockeyApp в основном используется для обработки бета-распределения и получения отчетов о сбоях.

Для данных телеметрии, полученных от скриптов на языке C#, можно использовать любую платформу аналитики при условии, что она работает на основе версии .NET, которая используется в среде Unity. Однако это позволяет получать аналитику только по игровым скриптам, но не по внутренним подсистемам Unity. В настоящее время подключаемого модуля для Application Insights не существует, но доступны подключаемые модули других решений аналитики, например, Unity Analytics и Google Analytics. Такие службы, как Unity Analytics, учитывающие особенности проектов Unity, безусловно, позволяют получать гораздо более ценные сведения, чем универсальные платформы.