Comments 10
На прошлой работе для сборок под мобилки использовал fastlane. Он мог дёрнуть API из Google Play и получить последнюю версию билда для разных типов (alpha, beta, prod), что полностью решало вопрос с версионированием.
Такой вариант вариант не рассматривали? По-сути ведь Google Play всегда знает все версии сам и хранит их, он же единственный источник правды
Да, это хороший вариант, но при таком подходе мы не исключаем race condition.
Между получением последней сборки и сохранением новой - проходит время (как минимум: билд + отправка через fastlane), и мы не застрахованы что во время этого этапа кто-нибудь из разработчиков сделает новую сборку, соответственно - данные для новой сборки будут неконсистентными
Проблема race condition решается тем что ставится ограничение на CI выполнять только 1 экземпляр инстанса - тогда всегда будет собираться только одна версия в моменте.
Так же, если я правильно понял, в вашем подходе проблема race condition никак не решается (поправте если я ошибаюсь)
Вы правы, это отличный вариант!
Но для нас это не решение проблемы, а новое ограничение - сборка одной версии занимает от 15 минут и в таком случае мы теряем возможность делать сборки одновременно, и рано или поздно мы получим очередь из таких задач.
Вы также правы насчет того что проблема race condition не решается в полной мере, но значение этого промежутка не велико, т.к. оно зависит от скорости выполнения скрипта, описанного выше. В нашем случае оно равно, в среднем, 2-3 секунды (пример на скрине). Мы с командой определили что вероятность одновременного создания сборки в интервал 3 секунды, стремится к нулю и мы можем пойти на такой шаг, чтобы не ограничивать себя в выполнении только 1 экземпляра инстанса.
а классический вариант с артефактори не рассматривали ? разрабы могут делать снапшоты, CI - релизы, никто никому не мешает
конечно правильнее брать последнюю версию непосредственно из Google Play/TestFlight/App Store. И не обязательно для этого тащить fastlane в проект, есть более простые CLI tools для этого.
При этом вы работаете с последней версией из нужного track (alpha/beta/prod) и никакие race condition вам не грозят - достаточно настроить, чтобы новый билд, автоматически останавливал любые активные билды этого workflow (так уже умеют все CI/CD).
Инкрементация и сохранение сборки на CI