Как стать автором
Обновить

Комментарии 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 - релизы, никто никому не мешает

Не совсем понял какой классический вариант вы имеете в виду. Приведите, пожалуйста, примеры.

деплоить артефакт в артефактори

Перед нами не стояла задача наладить хранение артефактов из CI. Артефактори стал бы для нас дополнительной точкой отказа. Подробнее описано в 4 пункте в блоке "Выбор хранилища".

конечно правильнее брать последнюю версию непосредственно из Google Play/TestFlight/App Store. И не обязательно для этого тащить fastlane в проект, есть более простые CLI tools для этого.

При этом вы работаете с последней версией из нужного track (alpha/beta/prod) и никакие race condition вам не грозят - достаточно настроить, чтобы новый билд, автоматически останавливал любые активные билды этого workflow (так уже умеют все CI/CD).

Спасибо за комментарий!
Согласен с вами, получать данные из первого источника наиболее верный подход, но по некоторым причинам, в частности, описанными выше, мы выбрали подход с дополнительным хранилищем данных, и именно этот случай описан в данной статье.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий