Данное руководство содержит краткий обзор по сборке Flutter-приложений с помощью Codemagic CI/CD. Обновлено в июле 2021 г.
На конференции Flutter Live 2018 в Лондоне компания Nevercode в партнерстве с Google объявила о выходе CI/CD предназначенного для Flutter-приложений – CI/CD под названием Codemagic. С Codemagic вы можете тестировать и выпускать свои Flutter-приложения без каких-либо усилий, избежав процесса кофигурации.
Мы намного больше, чем просто эксперты по Flutter. Если вы хотите использовать все возможности CI/CD не только для Flutter-приложений, вы можете это сделать с помощью codemagic.yaml
. В этом конфигурационном файле вы можете настроить сборку нативных приложений для Android и iOS, а также приложений созданных с React Native, Ionic и Cordova. Если вам необходим еще больший контроль, Codemagic позволяет запускать пользовательские скрипты и создавать собственные рабочие процессы для ваших приложений. Быстрая разработка высококачественных приложений стала еще лучше!
В этой статье вы узнаете, как создавать, тестировать и доставлять Flutter-приложения с Codemagic.
Начало работы
Убедитесь, что ваше Flutter-приложение загружено на платформу для хостинга IT-проектов (например, GitHub, Bitbucket или GitLab), используя систему контроля версий. Чтобы начать сборку приложения с помощью Codemagic CI/CD, сначала вам нужно зарегистрироваться. Это можно сделать используя GitHub, Bitbucket или GitLab учетную запись, либо используя электронную почту. Следуйте инструкциям ниже, чтобы получить доступ к своему проекту на Codemagic:
- Авторизируйтесь в Codemagic. Если вы еще не пользовались Codemagic, зарегистрируйтесь:
На странице приложений нажмите Add application чтобы добавить приложение:
Выберите Git-провайдера, где ваше приложение размещено (или выберите Other, если вы хотите добавить приложение, используя URL-адрес репозитория):
Нажмите Next: Authorize integration, чтобы Codemagic мог видеть ваши репозитории. Если выбранный Git-провайдер уже авторизирован, нажмите Next: Select repository чтобы выбрать репозиторий с вашим приложением.
Если вы используете GitHub, то перед выбором репозитория нужно сделать еще один шаг. Нажмите Install GitHub App чтобы начать интеграцию. Подробнее о настройке интеграций GitHub-приложений смотрите здесь.
Теперь выберите нужный репозиторий (или добавьте URL-адрес, если вы используете Others) и тип проекта. Нажмите Finish: Add application чтобы завершить добавление приложения:
Теперь вы в настройках проекта. По умолчанию будет выбрана вкладка Workflow Editor - Редактор рабочего процесса.
Вы можете настроить рабочие процессы для вашего Flutter-приложения используя Workflow Editor либо в конфигурационном файле codemagic.yaml
.
Подробнее о редакторе рабочего процесса
Здесь мы покажем, как использовать редактор рабочего процесса, чтобы сконфигурировать рабочий процесс сборки и сгенерировать отладочные сборки (debug builds) для вашего Flutter-приложения.
С правой стороны вы найдете панель Workflow settings (Настройки рабочего процесса), на которой можете изменить имя рабочего процесса, установить максимальную продолжительность сборки, составить расписание сборок и многое другое. Вы также можете скачать файл конфигурации codemagic.yaml
здесь.
ПРИМЕЧАНИЕ: Скачанный файл конфигурации может не полностью соответствовать настройкам, определенным в Редакторе рабочего процесса. Может потребоваться корректировка. Подробнее о настройках рабочего процесса смотрите в документации.
Триггеры сборки
В разделе Builds triggers вы можете автоматизировать запуск своих сборок на Codemagic, указав триггеры сборки. Здесь вы можете настроить, когда какие события (отправка изменений в репозиторий (push), изменения в пулл-реквесте или создании тега) и на каких ветках запускают сборку.
Подробнее о триггерах сборки смотрите здесь.
Переменные среды
Вы можете хранить свои учетные данные, API-ключи или любого рода секретные файлы на Codemagic, указав их в разделе Environment variables (переменных среды). Поставьте галочку в графе Secure чтобы зашифровать данные.
Вы можете использовать множество стандартных переменных среды Codemagic, которые доступны только для чтения. Подробнее о них смотрите здесь.
Подробнее о добавлении переменных среды смотрите здесь.
Кеширование зависимостей
Вы можете ускорить сборку на Codemagic посредством кеширования зависимостей в разделе Dependency caching. Для начала, поставьте галочку в графе Enable dependency caching (Включить кеширование зависимостей). После этого укажите путь(и) к зависимостям, которые вы хотите кешировать.
Подробнее о кешировании зависимостей смотрите здесь.
Тестирование
В разделе Test вы можете настроить, какие типы тестов вы хотите запускать. Если вы запускаете интеграционное тестирование, то можете указать тип используемого устройства. Это может быть эмулятор, симулятор или физическое устройство (AWS Device Farm).
Подробнее о тестировании Flutter-приложений на Codemagic смотрите здесь.
Сборка
В разделе Build вы можете настроить версию Flutter, Xcode и CocoaPods. Кроме того, в этом разделе вы можете определить путь к корню проекта и режим сборки (debug, release или profile).
Подробнее о сборке Flutter-приложений на Codemagic смотрите здесь.
Распрастранение
В разделе Distribution вы можете настроить подписание кода (code signing) и публикацию (publishing) для своего Flutter-приложения. Codemagic позволяет автоматически публиковать ваше приложение в различных сервисах, таких как Google Play Store, App Store Connect и Firebase App Distribution. Для публикации веб-приложения Flutter вы можете использовать удобные в обращении статические страницы Codemagic.
В зависимости от выбранных платформ сборки вам предлагаются разные варианты распространения.
Подробнее о различных вариантах распространения смотрите здесь.
Уведомления
В разделе Notifications вы можете настроить уведомления по электронной почте и в Slack.
Пользовательские скрипты
Вы можете определить собственные скрипты, нажав любую из кнопок «+», расположенных перед различными разделами редактора рабочего процесса. Пользовательские скрипты могут быть добавлены после клонирования репозитория, до и после тестирования, до и после сборки, до и после распространения.
Вы можете определять собственные скрипты на любом языке. (Язык можно выбрать с помощью строки shebang.) Например, если вы используете Firebase в своем проекте, то вам необходимо расшифровать секретные файлы Firebase перед сборкой приложения. Для этого добавьте следующий скрипт перед сборкой:
#!/usr/bin/env sh
set -e # exit on first failed command
echo $ANDROID_FIREBASE_SECRET | base64 --decode > $CM_BUILD_DIR/android/app/google-services.json
echo $IOS_FIREBASE_SECRET | base64 --decode > $CM_BUILD_DIR/ios/Runner/GoogleService-Info.plist
Подробнее о пользовательских скриптах смотрите здесь.
Подробнее о codemagic.yaml
Вы также можете настроить рабочий процесс Flutter с помощью файла codemagic.yaml
. YAML-файл можно просмотреть, перейдя на вкладку codemagic.yaml. Если ваш YAML-файл находится в корне репозитория, он должен быть виден. Если это не так, то вы увидите ссылки на документацию по созданию этого YAML-файла.
Для лучшего понимания мы рекомендуем прочитать эту статью, но если у вас уже есть опыт использования файла
codemagic.yaml
, то здесь вы можете взять шаблон для Flutter-приложеия.
Пример рабочего процесса по сборке debug Android-приложения выглядит следующим образом:
workflows:
simple-android-workflow:
name: Simple Android Workflow
instance_type: mac_mini
max_build_duration: 60
environment:
flutter: stable
scripts:
- name: Set up debug keystore
script: |
rm -f ~/.android/debug.keystore
keytool -genkeypair \
-alias androiddebugkey \
-keypass android \
-keystore ~/.android/debug.keystore \
-storepass android \
-dname 'CN=Android Debug,O=Android,C=US' \
-keyalg 'RSA' \
-keysize 2048 \
-validity 10000
- name: Set up local properties
script: echo "flutter.sdk=$HOME/programs/flutter" > "$CM_BUILD_DIR/android/local.properties"
- name: Get Flutter packages
script: flutter packages pub get
- name: Build debug apk
script: flutter build apk --debug
artifacts:
- build/**/outputs/**/*.apk
- build/**/outputs/**/*.aab
- build/**/outputs/**/mapping.txt
- flutter_drive.log
publishing:
email:
recipients:
- name@gmail.com
Пример рабочего процесса по сборке debug iOS-приложения выглядит следующим образом:
workflows:
simple-ios-workflow:
name: Simple iOS Workflow
instance_type: mac_mini
max_build_duration: 60
environment:
flutter: stable
xcode: latest
cocoapods: default
scripts:
- name: Set up local properties
script: echo "flutter.sdk=$HOME/programs/flutter" > "$CM_BUILD_DIR/android/local.properties"
- name: Get Flutter packages
script: flutter packages pub get
- name: Install Podfiles
script: find . -name "Podfile" -execdir pod install \;
- name: Build debug iOS app
script: flutter build ios --debug --no-codesign
artifacts:
- build/**/outputs/**/mapping.txt
- build/ios/ipa/*.ipa
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
publishing:
email:
recipients:
- name@gmail.com
Далее мы рассмотрим основные разделы файла codemagic.yaml
подробнее.
Переменные среды
В разделе environment
вы можете определить учетные данные (в зашифрованном формате) и указать версии различных инструментов, таких как Flutter, Xcode, CocoaPods и т. д.
environment:
flutter: stable
xcode: latest
cocoapods: default
Скрипты
В разделе scripts
вы можете определить команды, которые будут использоваться в этом рабочем процессе.
Чтобы получить пакеты Flutter, используйте следующее:
- name: Get Flutter packages
script: flutter packages pub get
Чтобы запустить Flutter анализ, можете использовать следующее:
- name: Flutter analyze
script: flutter analyze
Flutter юнит-тесты можно запустить, используя:
- name: Flutter unit tests
script: flutter test
Для сборки debug-версии приложения используйте следующее:
# Build debug Android .apk
- name: Build debug apk
script: flutter build apk --debug
# Build debug iOS .app
- name: Build debug iOS app
script: flutter build ios --debug --no-codesign
Артефакты
Вы можете получить сгенерированный файл .apk или .app, добавив путь к нему под artifacts
. Обычно пути выглядят так:
# For Android
artifacts:
- build/**/outputs/**/*.apk
- build/**/outputs/**/*.aab
- build/**/outputs/**/mapping.txt
- flutter_drive.log
# For iOS
artifacts:
- build/**/outputs/**/mapping.txt
- build/ios/ipa/*.ipa
- /tmp/xcodebuild_logs/*.log
- flutter_drive.log
Публикация
Чтобы получить отчет о сборке вместе со сгенерированными артефактами по электронной почте, укажите следующее:
publishing:
email:
recipients:
- name@example.com # ваш адрес электронной почты
Для получения дополнительной информации о публикации перейдите по этой ссылке.
Подписание кода
Чтобы опубликовать свое Android-приложение в Google Play Store или iOS/macOS-приложение в App Store Connect, вам необходимо подписать его код.
Для настройки подписания кода вы можете выполнить приведенные здесь шаги:
Если вы используете Редактор рабочего процесса, перейдите в раздел Publishing и настройте подписание кода для соответствующих платформ.
Если вы используете файл codemagic.yaml
для создания release-сборок Flutter-проектов, то можете использовать следующие команды:
# For Android release build
- name: Build release APK with Flutter (automatic versioning)
script: |
flutter build apk --release --build-name=1.0.0 --build-number=$(($(google-play get-latest-build-number --package-name "$PACKAGE_NAME" --tracks="$GOOGLE_PLAY_TRACK") + 1))
# For iOS release build
- name: Build ipa with Flutter (automatic versioning)
script: |
flutter build ipa --release \
--build-name=1.0.0 \
--build-number=$(($(app-store-connect get-latest-testflight-build-number "$APP_STORE_ID") + 1)) \
--export-options-plist=/Users/builder/export_options.plist
В этих командах используется несколько переменных среды. Чтобы узнать подробнее об этих командах перейдите по ссылкам на приведенные выше статьи о подписании кода.
Выпуск приложения
Codemagic позволяет автоматически публиковать Android-приложения в Google Play Store или iOS/macOS-приложения в App Store Connect.
Для выпуска своего приложения вы можете следовать шагам, приведенным в статьях ниже:
- Выпуск приложения для Android в Google Play Store
- Выпуск приложения для iOS в App Store Connect
- Выпуск приложения для macOS в App Store Connect
Ознакомьтесь с документацией по публикации Codemagic.
Сборка на Codemagic
Если вы используете файл codemagic.yaml
для определения конфигураций сборки, убедитесь, что он находится в корне репозитория. Если вы используете Редактор рабочего процесса, то вы уже можете приступить к выполнению шагов по сборке.
Чтобы начать сборку следуйте инструкциям ниже:
Войдите в настройки своего проекта. Если вы используете редактор рабочего процесса, убедитесь, что выбрали правильные платформы и машину, на которой будет запускаться сборка. Далее нажмите Start new build (начать новую сборку) или Start your first build (если вы запускаете впервые).
Выберите рабочий процесс и нажмите Start new build.
Сборка вашего Flutter-проекта запущена.
Поздравляем! 🎉 Ваша первая сборка Flutter на Codemagic CI/CD завершена!
Информация, которую следует иметь в виду, если вы создаете desktop-приложения:
- macOS-приложения можно создавать только на машинах Mac
- Linux-приложения можно создавать только на машинах Linux (платные минуты)
- desktop и мобильные приложения нельзя создавать одновременно
Веб-хуки
Для автоматического запуска сборок в ответ на события вам необходимо настроить веб-хуки. Вы можете ознакомиться с инструкциями по настройке веб-хуков с помощью Codemagic здесь.
Вы можете получить URL-адрес, необходимый для добавления веб-хуков вручную, во вкладке Webhooks в настройках приложения. Кроме того, на этой странице в разделе Recent deliveries находится список всех сборок запущенных с помощью веб-хуков.
Заключение
Хотя Codemagic изначально разрабатывался как официальное CI/CD решение, предназначенное исключительно для Flutter-приложений, теперь он поддерживает любые мобильные проекты. С помощью магии Codemagic вы можете собирать, тестировать и публиковать Flutter-приложения избежав процесса конфигурации и запускать сборки в контролируемых средах, используя индивидуальные рабочие процессы. Если у вас есть нативное Android или iOS приложение, или React Native приложение, Codemagic всегда поможет вам. Просто используйте файл codemagic.yaml
, и все будет готово для старта!
Успешных сборок!