← Назад к вопросам

Где собирал сборки на работе?

1.0 Junior🔥 72 комментариев
#Опыт и софт-скиллы

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Процесс сборки проектов в моей практике

На протяжении своей карьеры 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-проектах с комплексными пайплайнами

Архитектура пайплайнов сборки

Типичный пайплайн включал следующие этапы:

  1. Подготовка окружения

    • Клонирование репозитория с нужной веткой
    • Установка нужной версии Unity через Unity Hub в headless-режиме
    • Настройка SDK/NDK для мобильных платформ
  2. Предобработка

    • Генерация уникального build number
    • Обновление версии в Player Settings
    • Подготовка asset bundles при необходимости
  3. Сборка

    • Параллельная сборка для нескольких платформ
    • Кэширование промежуточных результатов
    • Логирование с детализацией по этапам
  4. Постобработка

    • Подписание 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.