Налаштування CI/CD пайплайнів для збірки білдів ігор

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

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

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Налаштування CI/CD пайплайнів для збірки білдів ігор
Середня
від 1 робочого дня до 1 тижня
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • 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 (сертифікати зберігаються в зашифрованому git-репозиторії) або через Manual Provisioning Profile, завантажений у CI secrets.

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

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

Правильний CI/CD для гри складається з кількох stage:

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, публікується в магазині.

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 дні

Вартість розраховується після аналізу інфраструктури та цільових платформ.