Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Процесс сборки проектов в моей практике
На протяжении своей карьеры Unity-разработчика я работал с различными системами сборки, которые эволюционировали по мере роста проектов и команд.
Основные подходы к сборке
Локальная сборка через Unity Editor использовалась на ранних этапах разработки и для быстрого тестирования:
// Пример скрипта для автоматизации сборки
using UnityEditor;
using System.IO;
public static class BuildScripts
{
[MenuItem("Build/Android")]
public static void BuildAndroid()
{
string[] scenes = { "Assets/Scenes/Main.unity" };
string buildPath = "Builds/Android/app.apk";
BuildPipeline.BuildPlayer(scenes, buildPath,
BuildTarget.Android, BuildOptions.None);
}
}
CI/CD системы стали основным инструментом в профессиональных проектах:
- Jenkins – использовался в крупных студиях для сборки мобильных и ПК-версий
- GitLab CI/CD – оптимальное решение для проектов с GitLab репозиторием
- GitHub Actions – современный выбор для cloud-based сборок
- TeamCity – применялся в AAA-проектах с комплексными пайплайнами
Архитектура пайплайнов сборки
Типичный пайплайн включал следующие этапы:
-
Подготовка окружения
- Клонирование репозитория с нужной веткой
- Установка нужной версии Unity через Unity Hub в headless-режиме
- Настройка SDK/NDK для мобильных платформ
-
Предобработка
- Генерация уникального build number
- Обновление версии в Player Settings
- Подготовка asset bundles при необходимости
-
Сборка
- Параллельная сборка для нескольких платформ
- Кэширование промежуточных результатов
- Логирование с детализацией по этапам
-
Постобработка
- Подписание APK/IPA файлов
- Загрузка артефактов в хранилище
- Отправка уведомлений в Slack/Telegram
Пример конфигурации GitLab CI/CD
# .gitlab-ci.yml
stages:
- build
- deploy
unity-build-android:
stage: build
image: unityci/editor:2021.3.0f1-android-1.0.0
script:
- unity-editor -quit -batchmode -projectPath .
-executeMethod BuildScripts.PerformBuild
-buildTarget Android -logFile build.log
artifacts:
paths:
- Builds/Android/*.apk
expire_in: 1 week
Особенности для разных платформ
Для мобильных платформ:
- Использование App Center или Firebase App Distribution для раздачи тестовых сборок
- Автоматическое увеличение versionCode для Android
- Подготовка provisioning profiles для iOS
Для ПК и консолей:
- Сборка отдельных дистрибутивов для Steam, EGS
- Генерация установочных пакетов (MSI, PKG)
- Интеграция с системами DRM и античит
Мониторинг и оптимизация
Ключевые метрики, которые мы отслеживали:
- Время сборки (стремились к <15 минут для инкрементальных сборок)
- Размер билда с детализацией по asset bundles
- Успешность сборок (ratio успешных/проваленных)
- Использование кэша для ускорения повторных сборок
Проблемы и решения
Типичные вызовы:
- Проблемы с лицензированием Unity в CI-окружении решались через активацию без GUI
- Расхождения между локальной и CI-сборкой устранялись через Docker-образы с фиксированными версиями тулинга
- Большой размер кэша оптимизировался через selective caching и cleanup policies
В современных проектах я предпочитаю облачные CI/CD решения за их масштабируемость и минимальные требования к инфраструктуре. Ключевой принцип – полная воспроизводимость сборки в любой момент времени, что достигается через версионирование всех зависимостей и использование containerization.