Вводная часть
Этот пост для тех, кто также как и я ничего не понимает в настройке ci/cd, но хочет подключить Azure к App Center.
Небольшое отступление
-
В компании, где я работаю, есть мобильное приложение, написанное на React Native и весь деплой работает напрямую в App Center, но так как App Center не поддерживает Flutter, то остается вариант деплоить android и ios приложения по отдельности.
-
Все процессы в компании завязаны на azure и было необходимо для сборки приложений и деплоя использовать именно его.
Настройка окружения
Первым делом займемся настройкой наших приложений.
Android
Никаких дополнительных настроек не требуется
IOS
В папке ios вашего проекта необходимо создать файл exportOptions.plist. Здесь мы зададим настройки для экспорта нашего приложения, а главное установим профили.
Вот как должен выглядеть файл
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>destination</key> <string>export</string> <key>manageAppVersionAndBuildNumber</key> <true/> <key>method</key> <string>app-store</string> <key>provisioningProfiles</key> <dict> <key>*ru.someName</key> <string>*name provisioning profile*</string> <key>*ru.someNameForNotifications*</key> <string>*name provisioning profile for notifications</string> </dict> <key>signingCertificate</key> <string>Apple Distribution</string> <key>signingStyle</key> <string>manual</string> <key>stripSwiftSymbols</key> <true/> <key>teamID</key> <string>*Ваш id*</string> <key>uploadBitcode</key> <false/> <key>uploadSymbols</key> <false/> </dict> </plist>
Обратите внимание на provisioningProfiles и teamID
-
provisioningProfiles — это профили, которые вам надо создать на сайте apple. Далее необходимо в key указать Bundle Identifier, а в string имя в строке provisioning profile.
-
teamID — это id сертификата, его можно увидеть, либо на сайте apple, либо в xcode на вкладке Signing & Capabilities
Profiles
На данном этапе нам необходимо установить профили в xcode.
-
Для этого вам необходимо открыть xcode перейти в targets/Signing & Capabilities* (предполагается, что профили и сертификат у вас уже есть)
-
Убрать галочку с автоматической подписи и установить ее вручную. Без этого действия этап установки сертификата в пайплайне просто не мог обнаружить нужный сертификат. А так нужный сертификат автоматически подтягивается при выборе нужного профиля.

-
Проделайте данную операцию для всех таргетов*( У каждого таргета должен быть свой профайл).
Pipeline
На данном этапе мы создадим пайплайн для сборки наших приложений.
-
Создаем новый pipeline
-
Нажимаем на последнюю ссылку

-
Выбираем Azure Repose Git
-
Скачиваем плагин Flutter — Visual Studio Marketplace
Android
Так в конечном счете будет выглядеть стек задач для android.

А теперь чуть подробнее про каждую задачу.
Добавляем задачи в pipeline —
-
Flutter install
-
оставляем дефолтные настройки

-
-
Flutter Build apk
-
Это все стандартные настройки, но все же продублирую
-
Target platform — Android (apk)
-
Path to the project folder — .(ставим точку)
-
Build Flavour — prod
-
Опционально. У меня в проекте используются flavor, так уже если его у вас нет, то можете пропустить этот шаг.
-
-
-
-
Signing and aligning APK file(s) **/*.apk — Подписка сертификата
-
APK files — **/*.apk
-
Sign the APK — true
-
Keystore file — Здесь вам нужно загрузить ваш сертификат. Дальше идут пункты, касательно этого файла.
-
Keystore password, Alias, Key password — указываете в соответсвии с сертификатом
-
-
apksigner arguments — —verbose
-
-
Tag Build
-
Type — Build
-
Tags — android
-
-
Copy Publish Artifact: artifact
-
Contents — **/*.apk
-
Artifact Name — APK
-
Artifact Type — Server
-
IOS
В том же пайплайне добавляем еще один блок задач(Agent job). Так он будет выглядеть когда мы закончим.

-
Flutter Install — аналогично с android
-
Install an Apple provisioning profile — для каждого профиля вам необходимо добавить по одной задаче.
-
Provisioning profile location — Secure Files
-
Provisioning profile — Указываете сам профайл(его нужно загрузить по клику на шестеренку)
-
-
Install an Apple certificate
-
Certificate (P12) — по клику на шестеренку загружаете ваш сертификат
-
Certificate (P12) password — очевидно, что здесь вам надо вписать пароль от сертификата
-
Keychain — должен быть выбран Temporary Keychain
-
-
Flutter Build ipa
-
Target platform — iOS (IPA)
-
Path to the project folder — $(Build.SourcesDirectory)
-
Build Flavour — по аналогии с андроидом добавляем только при необходимости
-
Export Options Plist path — $(Build.SourcesDirectory)/ios/exportOptions.plist
-
Extra command arguments — —release
-
-
Tag Build
-
Type — Build
-
Tags — ios
-
-
Copy Publish Artifact
-
Copy Root — $(Agent.BuildDirectory)
-
Contents — **/ipa/*.ipa
-
Artifact Name — IPA
-
Artifact Type — Server
-
На данном этапе у нас должна проходить сборка без ошибок. Если перейти в детали сборки, то там мы должны наблюдать следующую картину

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

Релиз в App Center
-
Для начала нам необходимо создать приложения в App Center отдельно для android и ios.
-
Далее в настройках приложения нужно создать новый токен(он пригодится нам позже).
На данном этапе с App Center мы закончили, переходим в пайплайн.
Пайплайн для релиза будет выглядеть так

Android
-
Переходим на вкладку releases и создаем новый пайплайн

-
Первым делом нам предлагают выбрать шаблон для этапа. Спускаемся в самый низ и выбираем Empty job. На следующем шаге сразу обзовем его Published App Center Android(можете называть как хотите)
-
После создания пайплайна кликаем на поле Artifact и вставляем в поле Source alias название нашего артефакта. Я его так и назвал — artifact.
-
Далее переходим на вкладку Tasks
-
Добавляем таску под названием App Center distribute и прописываем ей следующие настройки
-
App Center service connection — здесь вам потребуется создать новое соединение. Нажимаете на кнопку ‘+New’. Как раз здесь пригодится токен, который вы генерировали для каждого приложения
-
App slug — на пометке справа от заголовка указана вся нужная информация
-
Binary file path — выбираете из артефактов нашу apk.
-
Symbols type — Android
-
Все что нам осталось, это добавить тригер для этапа. Кликаем по этой кнопке

и устанавливаем следующий тригер, указав нужную нам ветку и тег, который мы прописывали на этапе сборки apk

IOS
Аналогично с android
-
Создаем новый этап, где также устанавливаем в качестве тригера нужную ветку и в тегах прописываем ios.
-
В тасках все тоже самое, но подставляем уже значения для ios. Т.к. в App Center у нас два разных приложения, то и в App slug будут различные данные. Тоже касается Binary file path и Symbols type.
Все что нам осталось сделать, это указать тригер для артефакта.
На данном этапе у нас проходит полная сборка приложений и деплой в App Center. При успешном деплое в App Center в вашем приложении на вкладке Distribute/Releases вы увидите ваше приложение.
Останется только в самом App Center подключиться к сторам и отправить приложение на публикацию.
Надеюсь этот пост будет вам полезен и позволит сэкономить пару(десятков) человеко-часов.
Если вдруг что-то упустил или написал непонятно пишите в комментариях, обязательно отвечу.
ссылка на оригинал статьи https://habr.com/ru/articles/760258/




Добавить комментарий