Настройка 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 дня |
Стоимость рассчитывается после анализа инфраструктуры и целевых платформ.





