Flutter.dev: Continuous delivery с Flutter

Автор оригинала: https://flutter.dev/
  • Перевод
Перевод статьи подготовлен в преддверии старта курса «Flutter Mobile Developer».





Следуйте лучшим практикам непрерывного развертывания (continuous delivery — CD) вместе с Flutter, чтобы ваше приложение было непременно доставлено вашим бета-тестерам и проверялось на регулярной основе без необходимости прибегать к ручным манипуляциям.

fastlane


В этом руководстве показано, как интегрировать fastlane (набор инструментов с открытым исходным кодом) в существующие рабочие процессы тестирования и непрерывной интеграции (continuous integration — CI), например, Travis или Cirrus.

Local setup

Перед переходом в облачную систему настоятельно рекомендуется протестировать процесс сборки и развертывания локально. Вы также можете реализовать непрерывное развертывание с локального компьютера.

  1. Установите fastlane: gem install fastlane или brew install fastlane. Для получения более развернутой информации посетите документацию Fastlane.
  2. Создайте проект Flutter и, когда он будет готов, убедитесь, что ваш проект собирается посредством
    • flutter build appbundle; и
    • flutter build ios --release --no-codesign.
  3. Инициализируйте проекты Fastlane для каждой платформы.
    • Запустите fastlane init в каталоге [project]/android.
    • Запустите fastlane init в каталоге [project]/ios.
  4. Убедитесь, что Appfileы содержат адекватные метаданные для вашего приложения.
    • Убедитесь, что package_name в [project]/android/fastlane/Appfile совпадает с именем вашего пакета в AndroidManifest.xml.
    • Убедитесь, что [project]/ios/fastlane/Appfile также соответствует идентификатору пакета Info.plist. Внесите в apple_id, itc_team_id, team_id данные вашей учетной записи.
  5. Настройте локальные учетные данные для входа в сторы.
    • Следуйте настройке Supply и убедитесь, что fastlane supply init успешно синхронизирует данные с вашей Play Store консоли. Относитесь к .json файлу как к своему паролю и не храните его в каких-либо общедоступных репозиториях систем контроля версий.
    • Ваш юзернейм ITunes Connect уже находится в ваших Appfileах в поле apple_id. Запишите в переменную среды FASTLANE_PASSWORD ваш пароль iTunes Connect. В противном случае он будет запрашиваться при загрузке в iTunes/TestFlight.
  6. Настройте цифровую подпись кода.
    • В Android есть два ключа для подписи: ключ развертывания и ключ загрузки. Конечные пользователи загружают .apk, подписанный «ключом развертывания». «Ключ загрузки» используется для аутентификации .aab/.apk, загружаемого разработчиками в Play Store, и переподписывается ключом развертывания по завершению загрузки в Play Store.
      • Для ключа развертывания настоятельно рекомендуется использовать автоматическую подпись, которая управляется облаком. Для получения дополнительной информации см. официальную документацию Play Store.
      • Чтобы создать ключ загрузки следуйте инструкции по генерации ключа.
      • Настройте gradle на использование ключа загрузки во время создания билда приложения в режиме release, отредактировав android.buildTypes.release в [project]/android/app/build.gradle.
    • В iOS, когда вы будете готовы к тестированию и развертыванию с помощью TestFlight или App Store, создайте и подпишите приложение, используя сертификат распространения вместо сертификата разработки.

      • Создайте и загрузите сертификат распространения в консоли Apple Developer Account.
      • откройте [project]/ios/Runner.xcworkspace/ и выберите сертификат распространения на панели настроек вашей цели.
  7. Создайте скрипт Fastfile для каждой платформы.

    • Для Android следуйте руководству по развертыванию бета-версии Fastlane Android. Все редактирование может заключаться всего лишь в добавлении lane, которая вызывает upload_to_play_store. Установите значение аргумента aab в ../build/app/outputs/bundle/release/app-release.aab, чтобы использовать пакет, который flutter build уже подготовил.
    • Для iOS следуйте руководству по развертыванию бета-версии Fastlane iOS. Все редактирование может заключаться всего лишь в добавлении lane, которая вызывает build_ios_app с export_method: 'app-store' и upload_to_testflight. В iOS потребуется дополнительный билд, поскольку flutter build создает .app, а не архивирует .ipas для релиза.

Теперь вы готовы выполнять развертывание локально или переносить процесс развертывания в систему непрерывной интеграции (CI).

Выполнение развертывания локально


  1. Создайте приложение в режиме release.
    • flutter build appbundle.
    • flutter build ios --release --no-codesign. Сейчас не нужно подписывать, так как fastlane будет осуществлять подпись при архивировании.
  2. Запустите скрипт Fastfile на каждой платформе.
    • cd android, затем fastlane [название созданной вами lane].
    • cd ios, затем fastlane [название созданной вами lane].


Настройка сборки и развертывания в облаке


Сначала проследуйте инструкциям в разделе локальной настройки, описанном в разделе «Локальная настройка», чтобы убедиться, что процесс работает корректно, прежде чем переходить на облачную систему, такую ​​как Travis.

Главное, на что следует обратить внимание — это то, что, поскольку облачные инстансы эфемерны и ненадежны, вы не должны оставлять свои учетные данные, такие как JSON учетной записи службы Play Store или сертификат распространения iTunes на сервере.

Системы непрерывной интеграции (CI), такие как Cirrus, обычно поддерживают зашифрованные переменные среды для хранения приватных данных.

Примите все меры предосторожности, чтобы не выводить значения этих переменных на консоль в ваших тестовых скриптах. Эти переменные также не должны быть доступны в пул-реквестах, пока они не будут смержены, чтобы злоумышленники не могли создать пул-реквест, который умыкнет эти секреты. Будьте осторожны при взаимодействии с этими секретами в пул-реквестах, которые вы принимаете и мержите.

  1. Сделайте учетные данные эфемерными.
    • В Android:

      • Удалите поле json_key_file из Appfile и сохраните содержимое JSON строки в зашифрованном переменной вашей CI системы. Используйте аргумент json_key_data в upload_to_play_store, чтобы прочитать переменную среды непосредственно в вашем Fastfile.
      • Сериализуйте свой ключ загрузки (например, используя base64) и сохраните его как зашифрованную переменную среды. Вы можете десериализовать его в своей системе CI на этапе установки с помощью
      • echo "$PLAY_STORE_UPLOAD_KEY" | base64 --decode > /home/cirrus/[directory # и имя файла, указанное в вашем gradle].keystore
    • В iOS:

      • Переместите локальную переменную среды FASTLANE_PASSWORD для использования зашифрованных переменных сред в системе CI.
      • Системе CI требуется доступ к вашему сертификату распространения. Рекомендуется использовать систему Fastlane Match для синхронизации ваших сертификатов на разных машинах.
  2. Рекомендуется использовать Gemfile вместо использования индетерминированного gem install fastlane в системе CI, чтобы гарантировать стабильность и воспроизводимость зависимостей fastlane между локальными и облачными машинами каждый раз. Однако этот шаг не является обязательным.

    • В обоих [project]/android и [project]/ios папках создайте Gemfile, содержащий следующее содержимое:
    • source "https://rubygems.org"
      	 gem "fastlane"
    • В обоих каталогах запустите bundle update и внесите Gemfile. и Gemfile.lock в систему контроля версий.
    • При локальном запуске используйте bundle exec fastlane вместо fastlane.
  3. Создайте тестовый скрипт CI, например .travis.yml или .cirrus.yml, в корне репозитория.

    • Сегментируйте свой скрипт для работы на платформах Linux и macOS.
    • Не забудьте указать зависимость от Xcode для macOS (например, osx_image: xcode9.2).
    • См. документацию Fastlane по CI для настройки конкретной CI.
    • На этапе установки, в зависимости от платформы, убедитесь, что:

      • Bundler доступен с помощью gem install bundler.
      • Для Android убедитесь, что Android SDK доступен и указан путь ANDROID_SDK_ROOT.
      • Запустите bundle install в [project]/android или [project]/ios.
      • Убедитесь, что Flutter SDK доступен и установлен в PATH.
    • На скриптовом этапе задачи CI:

      • Запустите приложение flutter build appbundle или flutter build ios --release --no-codesign, в зависимости от платформы.
      • cd android или cd ios
      • bundle exec fastlane [имя lane]

      Ссылки

      См. скрипт Cirrus для репозитория фреймворка Flutter.

      Другие службы


      Ниже приведены некоторые другие варианты, которые помогут автоматизировать развертывание вашего приложения.


      А здесь пример проекта
OTUS. Онлайн-образование
Цифровые навыки от ведущих экспертов

Похожие публикации

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое