Бойлерплейт для подготовки CI/CD для Android приложений через Fastlane
Мобильная разработка, как и любая другая разработка программного обеспечения, требует написания кода, который должен пройти через все возможные тесты. Чтобы исключить вероятность ошибок, которые, скорее всего, будут вызваны человеческим фактором, мы в Mad Devs сделали мобильный CI/CD пайплайн для автоматизации процессов проверки и доставки приложения в тестовую и производственную среду.
В частности, в этой статье вы найдете бойлер для построения CI/CD пайплайна для Android-приложений с помощью Fastlane и GitHub Actions.
Больше не нужно публиковать свои Android-приложения вручную. Это можно делать полностью автоматически на любом этапе.
Для чего нужен CI/CD пайплайн?
Прежде всего, CI/CD пайплайн позволяет повысить производительность за счет автоматизации.
С помощью CI/CD можно автоматизировать различные задачи по созданию приложения, создать артефакты (.apk, .aab) и развернуть их в производство. Что очень облегчает жизнь разработчикам, так как не надо делать это все вручную.
Что такое Fastlane?
Fastlane — это платформа с открытым исходным кодом, которая упрощает процесс сборки и выкладки мобильных Android и iOS приложений. Fastlane позволяет автоматизировать каждый аспект рабочего процесса разработки и выпуска приложений. Кроме того, она еще помогает настраивать типы сборки и варианты ваших приложений.
Помимо создания приложений, Fastlane выполняет различные утомительные задачи за вас, например, такие как генерирование скриншотов, запуск Unit/UI тестов и многое другое.
У платформы есть встроенная система плагинов позволяет легко расширить возможности. Различные инструменты/плагины позволяют создавать приложения, которые могут быть опубликованы в Google Play Store, Firebase App Distribution или Apple TestFlight.
Теперь пришло время рассмотреть наш бойлер. Зачем он нужен?
Как работает наш бойлер?
Схема компонентов:
И в этом есть следующие преимущества:
- Быстрый запуск CI/CD. С помощью этого бойлерплейта вы сможете легко создать CI/CD для вашего Android-приложения с помощью Fastlane.
- Простая адаптация к внешним инструментам CI/CD. Мы используем GitLab-ci или GitHub actions в качестве исполнителя команд Fastlane и построения процесса сборки и поставки.
- Уведомления. Вы можете настроить уведомления в Slack об успешных операциях или ошибках в процессе выполнения пайплайна.
- Нет необходимости в настройке специальной настройки машины для сборки. Мы собираем приложение внутри docker контейнера со всеми установленными зависимостями; это обеспечивает переносимость и возможность использования стандартных GitHub agents или GitLab runners.
Перед тем, как продолжить, мы рекомендуем сначала посмотреть наш видеообзор с подробным описанием:
А теперь давайте непосредственно перейдем к самому бойлеру.
Для начала:
Прежде всего, вам необходимо:
1. Создать аккаунт в облачной платформе Google;
2. Создать проект облака Google;
3. Создайте проект Firebase и активируйте распространение приложений;
4. Создайте аккаунт разработчика в Google Play;
Только после этого мы можем перейти к ключам для сборки и выпуска Android-приложений.
Подготовка ключей и переменных окружения
- Json-файл с конфигурацией для Firebase
Подготовьте json-файл с настройками проекта Firebase, закодированными в base64
https://firebase.google.com/docs/android/setup — Шаг 3base64 google-services.json > firebase_setting
- Сервис аккаунт с доступом к Firebase
Создайте сервис аккаунт для загрузки приложения на Firebase
Choose your Firebase account → Project Overview → Project setting → Service Account → create service account - Подготовьте ключ сервис аккаунта(SA), закодированный в base64
base64 sa.json > key_firebase
- Сервис аккаунт с доступом к Google Play
Создайте сервис аккаунт для загрузки приложения в Google Play
Добавьте ключ сервис аккаунта(SA), закодированный в base64base64 google_play.json > google_play
- Хранилище ключей для подписи приложения
Чтобы зарегистрировать приложение, необходим ключ, который можно сгенерировать с помощью команды.keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
- Добавьте хранилище ключей, закодированное в base64
base64 my-release-key.keystore > keystore
Обратите внимание на параметры, которые вы указываете при создании ключа. Эти параметры нужно будет добавить в переменные окружения.
Подготовим CI/CD к запуску
Если вам нужно подготовить CI/CD в GitLab, обратитесь к README.
GitHub Actions
Конечно, мы можем использовать окружения в GitHub Actions, но окружения доступны только в публичных репозиториях или корпоративных подписках.
Поэтому в этом бойлере мы не используем окружения в GitHub Actions.
Подготовим переменные окружения
GitHub → Settings → Secrets → Actions → New repository secret
- GOOGLE_SERVICES_JSON
В поле value вставьте ваш google-services.json, закодированный в base64. - SA_JSON_KEY
В поле value вставьте ваш sa.key, закодированный в base64. - SA_JSON_GP_KEY
В поле value вставьте ваш google_play.json, закодированный в base64. - KEYSTORE
В поле value вставьте ваш my-release-key.keystore в кодировке base64. - ALIAS
Alias имя - ALIAS_PW
Alias пароль - KEYSTORE_PW
Пароль хранилища ключей - APPROVERS
Список одабряющих для релиза Google Play, используется только в GitHub Actions - APP_PACKAGE_NAME
Имя пакета android по умолчанию, например, мы используем com.boiler.android.hello - APP_PACKAGE_NAME_STAGING
Имя пакета для среды стейджинга, например, мы используем com.boiler.android.hello.staging - APP_VERSION_NAME
Версия приложения - FIREBASE_APP_ID_PROD
Идентификатор приложения для production в Firebase - FIREBASE_APP_ID_STG
Идентификатор приложения для staging в Firebase - SLACK_WEBHOOK_URL
Slack вебхук
Более подробную информацию о переменных окружения вы можете найти на Github.
Когда вы завершите всю эту подготовку, можно приступать к сборке и выпуску приложения на Firebase. Вот и все!
Мы надеемся, что этот бойлер будет вам полезен, и он войдет в число тех инструментов, которыми вы будете пользоваться регулярно для построения CI/CD пайплана для Android-приложений.
И с нетерпением ждем ваших отзывов о нашем бойлерплейте.