Самый простой CI/CD пайплайн для flutter приложения с Codemagic. Часть 1

Допустим, вы являетесь разработчиком на каком-нибудь небольшом проекте. Есть только ограниченный доступ в App Store Connect и Google Play. Это такие ограничения, как подписание сборок, публикация в маркеты.

Их, конечно, можно обойти, если почитать документацию и сделать необходимые сертификаты и профайлы (в случае с iOS) или используя оригинальный jks файл и пароли к нему (в случае с Android). Для этого, как правило, нужно пнуть владельца этих аккаунтов.

Данная статья будет вам полезна, если вы увидите себя хотя бы в одном из перечисленных случаев:

  1. Процесс сборки под iOS или Android занимает слишком много времени и ресурсов вашего компьютера

  2. На проекте есть другой разработчик, который активно занят проектом и день через день вносит какие-то изменения, но только вы можете сделать сборку

  3. Ваш проджект менеджер попросил отправить очередную сборку тестировщикам, но вы не имеете доступ к своему компьютеру

Это будет подробный туториал с множеством скриншотов.

Минимальные требования, общие для iOS и Android

Ключ подписи релизной сборки — нужен для того, чтобы в целом иметь возможность собрать валидную сборку, которую дальше можно отправить в сторы:

  • iOS: сертификат с расширением .p12 (Distribution или iOS Distribution) и пароль к нему; профайл с расширением .mobileprovision (App Store Connect Distribution)

  • Android: ключ подписи обычно с расширением .jks и пароли к нему

Доступ к API сторов — нужен для того, чтобы в целом организовать процесс отправки в сторы через сторонние сервисы типа Codemagic, GitHub Actions, Fastlane и другие:

  • App Store Connect API: IssuerID и App Store Connect API Key с расширением .p8

  • Google Play Android Developer API: json файл сервис аккаунта из проекта в Google Cloud Console

Регистрация в Codemagic

Начальные необходимые условия:

  • Есть аккаунт в GitHub, GitLab или BitBucket

  • Есть доступ к репозиторию проекта

Первое, нужно создать аккаунт в Codemagic, если его еще нет:

CI/CD for Android, iOS, Flutter and React Native projects

codemagic.io

Это интуитивно понятные шаги, где нужно нажимать на самые яркие кнопки

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

В конце должен быть примерно такой вид:

Codemagic.io

Codemagic.io

Теперь приступим к настройке под платформы.

Настройка Codemagic для Android. Релизная сборка с подписью

Это, на мой взгляд, самое простое.

Для этого потребуются:

  1. jks файл для подписи релизной сборки

  2. Password и Key Alias

Настройка проекта

У меня на проектах папка android обычно выглядит примерно так:

VSCode

VSCode

VSCode

VSCode

Для упрощения копипаста

if (System.getenv()["CI"]) { // CI=true is exported by Codemagic
    storeFile file(System.getenv()["CM_KEYSTORE_PATH"])
    storePassword System.getenv()["CM_KEYSTORE_PASSWORD"]
    keyAlias System.getenv()["CM_KEY_ALIAS"]
    keyPassword System.getenv()["CM_KEY_PASSWORD"]
} else {
    keyAlias keystoreProperties['keyAlias']
    keyPassword keystoreProperties['keyPassword']
    storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
    storePassword keystoreProperties['storePassword']
}
  • andoid/key.properties — здесьобычно хранятся все секреты, они, как правило, нужны для доступа к ключу подписи релизной сборки. Эти данные нужны при настройке Codemagic

VSCode

VSCode

На всякий случай напомню, что этот файл не следует хранить в открытом доступе тем более, если проект публичный!

Настройка Codemagic

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

Codemagic.io

В целом, этого достаточно, чтобы уже собирать сборки не у себя на компьютере. После нажатия на Start new build останется только выбрать ветку, с которой нужно собрать сборку.

После успешного окончания будет такой примерно вид:

Codemagic.io

Codemagic.io

Можно вручную скачать артефакты и отправить их по месту назначения.

Настройка Codemagic для Android. Автоматическая публикация в Google Play

На этом этапе, как я уже говорил, требуется настройка доступа к Google Play Android Developer API

Сначала нужно открыть существующий проект в Google Cloud Console либо создать новый. Можно, например, использовать проект Firebase

Google Cloud Console

Google Cloud Console

  • Включить Google Play Android Developer API, это можно сделать по ссылке

Google Cloud Console

Google Cloud Console

  • Создать сервис аккаунт (ссылка), дать ему пермишн Service Account User и сохранить на будущее email.
    В этом примере это codemagic@tsitser-game.iam.gserviceaccount.com
    У вас может быть, например, blabla@your-project.iam.gserviceaccount.com

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Google Cloud Console

Codemagic.io

Codemagic.io

Внимание! Для следующих шагов необходимы прав администратора в Google Play Console

Google Play Console

Google Play Console

Google Play Console

Google Play Console

  • Далее зайти в секцию Users and Permissions, добавить сохраненный email сервис аккаунта из Cloud Console
    В нашем примере это codemagic@tsitser-game.iam.gserviceaccount.com
    Разрешения можно оставить те, которые выбраны по умолчанию (я на всякий случай даю админские права, но это не обязательно)

Google Play Console

Google Play Console

Google Play Console

Google Play Console

Если все настроено верно, то после запуска сборки будет такой примерно результат:

Codemagic.io

Codemagic.io

А в Google Play будет сразу так:

Google Play Console

Google Play Console

Заключение

Сегодня детально рассмотрели, как очень просто организовать CI/CD для сборки и публикации flutter приложения в Google Play с помощью сервиса Codemagic

Кратко, что требуется разработчику для настройки под Android:

  1. Доступ к репозиторию проекта

  2. Ключ подписи релизной сборки и пароли к нему

  3. Админские права в Google Play

Что требуется сделать владельцу аккаунта в Google Play:

В следующей статье будет про настройку CI/CD для iOS и публикацию в App Store Connect (TestFlight), а также коротко расскажу про ограничения этого сервиса и другие важные моменты.

© Habrahabr.ru