Настройка CI/CD пайплайнов для сборки билдов игр

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

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Настройка CI/CD пайплайнов для сборки билдов игр
Средняя
от 1 рабочего дня до 1 недели
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

Настройка CI/CD пайплайнов для сборки билдов игр

Сборка Unity-проекта вручную на локальной машине разработчика — это не пайплайн, это риск. Сборка зависит от локальных настроек среды, версии редактора, импортированных кешей. «У меня работает» превращается в «а у QA нет, потому что там другая версия скриптов или другой кеш Shader Compiler».

CI/CD в геймдеве решает конкретную проблему: каждый commit в ветку develop автоматически собирается в воспроизводимый артефакт — билд для конкретной платформы. QA всегда тестирует свежий билд, не зависят от программиста.

GameCI как основа Unity CI/CD

GameCI (game.ci) — открытый Docker-образ с предустановленным Unity, специально для CI/CD. Работает с GitHub Actions, GitLab CI, CircleCI, Jenkins. Поддерживает все Unity-версии начиная с 2019.4 LTS, все целевые платформы (Android, iOS, WebGL, Windows, macOS, Linux).

Базовый GitHub Actions workflow для Unity Android-билда:

- name: Build Android
  uses: game-ci/unity-builder@v4
  env:
    UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
    UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
    UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
  with:
    targetPlatform: Android
    unityVersion: 2022.3.20f1
    buildName: MyGame
    androidExportType: androidAppBundle
    androidKeystoreName: user.keystore
    androidKeystoreBase64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
    androidKeystorePass: ${{ secrets.ANDROID_KEYSTORE_PASS }}
    androidKeyaliasName: ${{ secrets.ANDROID_KEY_ALIAS_NAME }}
    androidKeyaliasPass: ${{ secrets.ANDROID_KEY_ALIAS_PASS }}

Критичный момент — Unity License на CI-машине. Unity Personal/Plus требует seat activation. Для CI используем либо Unity License Server (Enterprise), либо manual activation через game-ci activation workflow. Это первый камень преткновения — без правильной активации CI просто не запустится.

iOS-сборка в CI — отдельная история

iOS-билды требуют macOS с Xcode. GitHub Actions предоставляет macos-latest runner, но он дорогой в минутах. Альтернативы: Mac mini в облаке (MacStadium, AWS EC2 Mac), self-hosted runner на физическом Mac в офисе.

Цепочка для iOS: Unity build → Xcode project (.xcodeproj) → Fastlane gym → .ipa → Fastlane pilot (TestFlight). Fastlane обрабатывает подписку сертификатами через match (certificates хранятся в зашифрованном git-репозитории) или через Manual Provisioning Profile, загруженный в CI secrets.

Без автоматизации подписи каждый iOS-билд требует ручных действий в Apple Developer Portal. С Fastlane match — регенерация сертификатов и provisioning profiles автоматическая.

Структура пайплайна для игрового проекта

Правильный CI/CD для игры состоит из нескольких stages:

Validation stage — быстрые проверки без полной сборки: unit tests через game-ci/unity-test-runner, codeformat check, Asset Database integrity. Запускается на каждый push, занимает 5–10 минут.

Build stage — полная сборка для целевых платформ. Запускается при merge в develop или по расписанию (ночные билды). Android: 15–40 минут. iOS: 30–60 минут. WebGL: 10–25 минут.

Distribution stage — после успешного билда: Android AAB → Google Play Internal Testing через fastlane supply, iOS IPA → TestFlight через fastlane pilot, WebGL → S3/CDN-хостинг. QA получает уведомление в Slack с прямой ссылкой на тест-билд.

Production release stage — ручной триггер (manual approval). Финальный билд с production-конфигом, подписанный production keystore/certificate, публикуется в store.

Self-hosted runner vs облачный CI

Для студии с 3+ разработчиками self-hosted runner на выделенной машине экономически выгоднее. Сборка Unity — CPU и IO интенсивная задача. Время на GitHub Actions (4 CPU, 16 GB RAM) — 40 минут для Android-билда. На выделенном сервере (16 CPU, 64 GB RAM) — те же 12 минут.

Unity Shader Cache и Asset Import Cache между сборками — критичны для скорости. На self-hosted runner кеш сохраняется между runs. На облачном CI нужно явно кешировать через actions/cache (Library/ папка), иначе каждый билд импортирует все ассеты заново.

Реальный кейс: студия 4 программиста + 2 художника, Android-проект. Ручная сборка занимала 50+ минут, делалась раз в неделю. После настройки GameCI + GitHub Actions на self-hosted Ubuntu-runner с Wine для Unity: автоматический билд при каждом merge в develop, время сборки 18 минут, QA получает ссылку на Firebase App Distribution автоматически. Количество выявляемых багов до релиза выросло в 3 раза — просто потому, что QA начал тестировать регулярно.

Масштаб задачи Ориентировочные сроки
CI/CD для одной платформы (Android или iOS) 3–5 дней
CI/CD для двух платформ + distribution 1–2 недели
Полный пайплайн (Android + iOS + WebGL + Slack) 2–3 недели
Настройка self-hosted runner + кеширование 2–4 дня

Стоимость рассчитывается после анализа инфраструктуры и целевых платформ.