Від git-тега до живого сервера: наш конвеєр релізів
Реліз Blocks Beyond The Stars сьогодні складається з однієї команди: надіслати git-тег. Усе подальше робить машина. У цій статті я покажу наш конвеєр CI/CD — і чому зусилля окупаються навіть для хобі-проєкту.
Робочий процес релізу. Щойно надсилається тег на кшталт v0.7.4, GitHub Actions збирає повний пакет: інсталятори для Windows (setup, portable, MSI), збірку для Linux, збірку WebGL для браузера та Docker-образ для сервера — шість артефактів з одного тега. Номер версії береться з самого тега; джерело істини лише одне.
Робочий процес розгортання. Другий робочий процес доставляє нові версії на сервер. Для нас було важливо мати продакшн-шлюз: розгортання починається лише після явного схвалення. Жодного випадкового «ой, це був продакшн». Сам сервер фіксує версію гри в конфігураційному файлі — кожен світ, що прокидається, автоматично стартує з новою версією, а запущені світи ніхто не переривається.
Урок, який довелося вивчити: виправлення в ігровому клієнті доходять до гравців лише зі справжнім релізом. Наш клієнт оновлюється сам через Velopack — хто встановив гру, отримує оновлення лише тоді, коли ми публікуємо нову версію. Влите виправлення в головній гілці нікому не допомагає, поки не буде тега. Звучить очевидно, але не раз ми дивувалися, чому «виправлена» помилка досі на місці.
А браузер? Збірка WebGL потрапляє на сервер як ZIP і активується заміною каталогу — старий каталог лишається як запасний. Маленький файл version.txt показує, що саме зараз працює.
Увесь цей апарат коштував кількох вихідних — і окуповується знову з кожним релізом.
Коментарі