Ответ вслух Middle Сборка и публикация обновлено

CI/CD для Flutter-приложения

Вопрос

Как бы вы настроили сборку и выкладку Flutter-приложения от коммита до магазина?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «На каждый пулреквест гоняю flutter analyze, проверку формата и тесты. После мержа в основную ветку CI собирает dev и stage через flavors, конфиг окружения через --dart-define-from-file.

Что должно прозвучать в ответе

  • Проверки: `flutter analyze`, форматирование, тесты на каждый пулреквест

  • Окружения через flavors и `--dart-define-from-file`

  • Номер сборки из CI, подпись секретами из хранилища CI

  • Сборка AAB и IPA, обфускация и сохранение символов

  • Выкладка тестировщикам (Firebase App Distribution, TestFlight), затем поэтапно в стор

  • Мониторинг падений после релиза

Что могут спросить следом

  • Где хранить keystore и сертификаты?
  • Как откатить неудачный релиз?
  • Как ускорить сборку iOS в CI?

Разбор

Образцовый ответ: «На каждый пулреквест гоняю flutter analyze, проверку формата и тесты. После мержа в основную ветку CI собирает dev и stage через flavors, конфиг окружения через --dart-define-from-file. Номер сборки берётся из номера запуска CI, чтобы он всегда рос. Keystore и сертификаты лежат в секретах CI, на iOS удобно fastlane match. Release собираю с обфускацией и сохраняю символы как артефакт, загружаю в Crashlytics. Сборки уходят тестировщикам через Firebase App Distribution и TestFlight, в Google Play выкладываю поэтапным раскатом на процент пользователей. Откатиться в сторе нельзя, можно только остановить раскат и выпустить исправление, поэтому критичные функции закрываю флагами с сервера»

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.