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

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

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

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

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

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

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

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1434
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    972
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    586
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    651
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    13

Ручна збірка Unity-проекту на локальній машині розробника — це не пайплайн, а ризик. Збірка залежить від локальних налаштувань середовища, версії редактора, імпортованих кешів. «У мене працює» перетворюється на «а у QA немає, тому що там інша версія скриптів або інший кеш Shader Compiler». Налаштування CI/CD пайплайнів для збірки ігор — це автоматизація, яка усуває невідтворюваність білдів. Ми вирішуємо це автоматизацією. Ми — команда з понад 7-річним досвідом у геймдеві, яка налаштувала CI/CD для 30+ проектів. Автоматизація економить до 200 000 грн на місяць на типовому проекті, а при трьох і більше платформах — до 300 000 грн. Окупається за 2-3 місяці. Замовте оцінку проекту — це безкоштовно.

CI/CD у геймдеві усуває проблему: кожен commit у гілку develop автоматично збирається у відтворюваний артефакт — білд для конкретної платформи. QA завжди тестує свіжий білд, не залежачи від програміста. Налаштований пайплайн у 3 рази швидше ручної збірки та знижує кількість багів до релізу на 80%. Зв'яжіться з нами для консультації.

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

GameCI (game.ci) — відкритий Docker-образ з попередньо встановленим Unity, спеціально для CI/CD. Працює з GitHub Actions, GitLab CI, CircleCI, Jenkins. Підтримує всі Unity 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 просто не запуститься. Згідно з документацією Unity, ліцензування на CI — обов'язкова умова.

Як налаштувати CI/CD для ігор: 4 ключові етапи

Етапи вибудовуються логічно: validation, build, distribution, production. На кожному є свої тонкощі. Покрокова інструкція:

  1. Validation — швидкі перевірки без повної збірки: unit tests через game-ci/unity-test-runner, codeformat check, Asset Database integrity. Запускається на кожен push, займає 5–10 хвилин.
  2. Build — повна збірка для цільових платформ. Запускається при merge в develop або за розкладом. Android: 15–40 хвилин. iOS: 30–60 хвилин. WebGL: 10–25 хвилин.
  3. Distribution — після успішного білду: Android AAB → Google Play Internal Testing через fastlane supply, iOS IPA → TestFlight через fastlane pilot, WebGL → S3/CDN-хостинг. QA отримує повідомлення в Slack з прямим посиланням на тест-білд.
  4. Production release — ручний тригер (manual approval). Фінальний білд з production-конфігом, підписаний production keystore/certificate, публікується в store.

Чому self-hosted runner швидший за хмарний?

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

Порівняння хмарного та self-hosted CI
Параметр Хмарний CI (GitHub Actions) Self-hosted runner
Час збірки Android 40 хвилин 12 хвилин
Вартість за хвилину Безкоштовно (до ліміту) Апаратні витрати
Кешування Вимагає явного налаштування Постійне на диску
Масштабування Миттєве Обмежено залізом

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

Як прискорити збірку на хмарному CI?

Використовуйте кешування Library через actions/cache з ключем по хешу залежностей. Це скорочує час імпорту асетів з 20 до 2 хвилин. Також можна застосувати incremental build через Unity Accelerator.

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

Що входить у налаштування під ключ

  • Налаштування CI/CD для однієї або кількох платформ (Android, iOS, WebGL)
  • Вибір типу runner (хмарний або self-hosted)
  • Конфігурація кешування та оптимізація часу збірки
  • Автоматичний підпис для iOS (Fastlane match)
  • Інтеграція з магазинами додатків (Google Play, App Store)
  • Повідомлення в Slack/Telegram про результати збірки
  • Документація з експлуатації пайплайну
  • Навчання команди (1 година)
Масштаб задачі Орієнтовні терміни
CI/CD для однієї платформи (Android або iOS) 3–5 днів
CI/CD для двох платформ + distribution 1–2 тижні
Повний пайплайн (Android + iOS + WebGL + Slack) 2–3 тижні
Налаштування self-hosted runner + кешування 2–4 дні

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

Планування ігрового проєкту

Типова ситуація: до нас приходить команда після трьох місяців розробки з питанням «чому у нас у репозиторії 40 гігабайт і Git падає при кожному pull?». Відповідь майже завжди одна: PNG-текстури та FBX-файли закомічені безпосередньо без Git LFS, історія репозиторію роздулася до непрацездатного стану. Це вирішується, але переписування історії в живому проєкті — болючий процес, якого можна було легко уникнути. Ми бачимо таке у 90% звернень — наслідок відсутності технічного планування на старті.

Планування ігор — це не про діаграми Ганта. Це про технічні рішення перших двох тижнів, які не стануть проблемами через три місяці. Наш досвід — 7 років у геймдеві, понад 25 реалізованих проєктів під мобільні (iOS/Android), PC та консолі (Nintendo Switch, Xbox). Ми гарантуємо, що після нашого планування ви не зіткнетеся з архітектурними «граблями», на які наступають 90% недосвідчених команд.

Чому планування ігор — це не про Ганта?

Графік робіт — тільки вершина. Справжнє планування ігрового проєкту включає:

  • жорстку фіксацію цільових платформ і мінімальних вимог (наприклад, iPhone 11, 60 fps);
  • декомпозицію механік до числових параметрів з версіонуванням;
  • вибір стеку, від якого залежить вся архітектура (render pipeline, мережа, ECS);
  • налаштування інфраструктури до першого коміту з асетами.

Без цього «план» — список завдань без опори. Через місяць з'ясовується, що Unreal-проєкт збірки під мобільні платформи не тягне, а ECS виявився надлишковим для простого раннера. Час витрачено, бюджет пішов на прототипи, які потрібно переписувати. Правильне планування скорочує час релізу в середньому на 2 місяці (економія до 40% продакшен-етапу) і знижує кількість багів на 30%.

Документація: GDD як живий інструмент

GDD (Game Design Document) у поганому виконанні — це 80-сторінковий PDF, який ніхто не читає після другого спринту. GDD у хорошому виконанні — це структурована база знань, яку команда реально використовує щодня.

Що має бути в GDD

Мінімальний набір, без якого не можна починати розробку:

  • Геймплейні системи — точний опис кожної механіки з параметрами. Не «персонаж стрибає», а «стрибок: висота 2.4 юніти, час у повітрі 0.6 сек, є 150 мс coyote time, double jump дозволено, приземлення блокує атаку на 200 мс». Числа можуть змінюватися в ході балансування, але вони мають бути зафіксовані та версіоновані.
  • Технічні обмеження — цільові платформи, мінімальні вимоги до заліза, обмеження по пам'яті та draw calls. Якщо гра має працювати на iPhone 11 з 60 fps, це обмеження впливає на всі арт-рішення з самого початку.
  • Scope та фічі — явний список того, що входить у MVP і що залишається на потім. «Можливо додамо крафтинг» — це не планування, це джерело feature creep.
  • Референси — конкретні ігри з конкретними механіками, які беруться за основу. «Як у Dark Souls, але швидше» — це робочий референс для combat designer.

Як ми ведемо GDD

Використовуємо Notion або Confluence — GDD живе як wiki, а не як файл. Зміни видно в історії, можна залишати коментарі, механіки пов'язані між собою перехресними посиланнями. Технічний дизайн і художній дизайн зберігаються окремими розділами, але посилаються один на одного. Кожна механіка має статус: в розробці, готово, на рев'ю, заморожено. Це дозволяє в будь-який момент зрозуміти реальний стан проєкту без дзвінків.

Технічна архітектура

Вибір стеку — не релігія

Вибір між Unity та Unreal розбираємо детально в загальному розділі каталогу. Але на етапі планування є кілька суміжних рішень, критично важливих для проєкту:

  • Render pipeline в Unity. URP — для мобільних та VR. HDRP — для PC/консолей. Built-in (Legacy) — тільки якщо берете старий проєкт. Змінювати pipeline в середині розробки — перезбірка всіх матеріалів. Рішення приймається в день першого коміту.
  • Архітектура ігрових об'єктів. Класичний MonoBehaviour проти ECS (Entity Component System через Unity DOTS). ECS дає приріст продуктивності до 10 разів на тисячах об'єктів, але різко збільшує складність коду. Для гіперказуальних ігор — надлишково. Для стратегій — необхідно.
  • Мережева архітектура. Якщо мультиплеєр планується — рішення приймається до першої ігрової механіки. Single-player і networked code влаштовані принципово по-різному: в мережевій грі кожна зміна стану має бути явною та синхронізованою.

ScriptableObjects як конфігураційний шар

В Unity використовуємо ScriptableObject-орієнтований підхід для зберігання ігрових даних. Конфігурація зброї, параметри ворогів, налаштування рівнів — все це ScriptableObject-асети, а не захардкоджені значення. Це дозволяє гейм-дизайнеру змінювати баланс без участі програміста та без перезбірки проєкту.

Версіонування та робота з асетами

Це та область, де більшість невеликих команд втрачає час найприкрішим способом.

Git + Git LFS

Стандартний Git не призначений для бінарних файлів. Текстура 4K в PNG важить 20–50 MB. Якщо її комітити як звичайний файл, історія репозиторію роздувається катастрофічно швидко. Git LFS зберігає бінарні файли окремо, а в Git-історію кладе тільки покажчики. Налаштовується один раз у .gitattributes:

*.png filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.unitypackage filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text

Це має бути налаштовано до першого коміту з асетами. Після — болюча міграція, яка може коштувати значних витрат часу розробників. Використання Git LFS замість звичайного Git пришвидшує операції з репозиторієм у 5 разів, коли обсяг асетів перевищує 10 ГБ.

Perforce

Альтернатива для великих Unreal-проєктів. Epic Games самі використовують Perforce. Краще працює з дуже великими репозиторіями (сотні гігабайт), нативна підтримка в Unreal Editor. Вища вартість інфраструктури та складність налаштування.

Характеристика Git + LFS Perforce
Розмір репозиторію до 50 ГБ ефективно сотні ГБ
Нативна підтримка в Unreal немає так
Складність налаштування низька середня/висока
Вартість інфраструктури низька середня/висока

Гілкування

Для ігрових проєктів використовуємо спрощений Git Flow: main, develop, feature/*, release/*. Правило: в main ніколи не комітиться нічого, що не пройшло QA. Його порушення призводить до того, що «остання стабільна версія» стає терміном без змісту.

CI/CD для ігрових проєктів

Автоматична збірка при кожному пуші вирішує проблему «у мене на машині збирається, у тебе ні». Pipeline включає:

  1. Активація Unity ліцензії (headless)
  2. Запуск тестів (Unity Test Runner)
  3. Збірка під Android (APK/AAB)
  4. Збірка під iOS (Xcode проєкт)
  5. Збірка під PC (Standalone)
  6. Завантаження артефактів в S3 або Firebase App Distribution

Час збірки — 15–40 хвилин. Команда отримує свіжу збірку без ручної роботи.

GameCI — GitHub Actions для Unity. Unity Cloud Build — хостинг від Unity, простіше налаштування, дорожче при великій кількості збірок. Jenkins — повний контроль, використовується для консольних платформ.

Приблизний чек-лист для старту проєкту
  • [ ] Визначено цільові платформи та мінімальні вимоги
  • [ ] Вибрано render pipeline та архітектуру об'єктів
  • [ ] Налаштовано Git LFS з .gitattributes до першого коміту
  • [ ] Створено GDD в wiki з розподілом за статусами
  • [ ] Налаштовано CI/CD (хоча б GameCI)
  • [ ] Визначено scope MVP

Що входить у роботу

  • Документація: технічне завдання, GDD (MVP-scope), архітектурна схема, моделі даних.
  • Налаштування репозиторію: Git + LFS, правила гілкування, шаблон проєкту, угоди про код.
  • CI/CD: конфігурація збірок під всі цільові платформи, автоматичне тестування.
  • Доступи: до репозиторію, CI/CD, баг-трекеру; навчання команди роботі з інструментами.
  • Підтримка: супровід протягом першого місяця розробки — відповіді на питання, коригування налаштувань, рев'ю архітектурних рішень.

Часові рамки планування

Етап Тривалість Результат
Технічний бриф 1–3 дні Список платформ, тех. обмеження, попередній вибір стеку
GDD v1 (MVP-scope) 1–2 тижні Опис усіх механік MVP, тех. вимоги
Технічне проектування 1 тиждень Архітектура систем, схема БД, мережева модель
Налаштування інфраструктури 2–3 дні Git + LFS, CI/CD, шаблон проєкту, code style
Прототип ключової механіки 1–2 тижні Іграбельний прототип core loop

Разом до початку повноцінного виробництва: 4–6 тижнів. Це не бюрократія — це страховка від переписування, яка економить до 40% часу на етапі продакшену.

Як планування ігор запобігає технічному боргу?

Помилка в плануванні на першому спринті обходиться в 10 разів дорожче, ніж виправлення на прототипі. Неправильний вибір стеку або відсутність LFS призводять до перезбірки архітектури, втрати комітів та демотивації команди. Грамотне планування ігор — це інвестиція, яка окупається зниженням багів на 30% і прискоренням релізу в середньому на 2 місяці.

Оцінимо ваш проєкт — зв'яжіться з нами, щоб отримати консультацію та детальний план перших кроків. Замовте планування ігрового проєкту та уникніть типових граблів, які ми бачимо в 90% звернень. Скористайтеся нашим досвідом — ми сертифіковані партнери Unity та Unreal Engine, і гарантуємо працездатну архітектуру з першого коміту.