В этой статье мы создадим лазурный трубопровод для ионного приложения, используя новые шаблоны YAML-трубопроводов Azure. Мы также охватим подписи выпуска сборки опубликованных артефактов (подписание APK). Я кратко известел целы этого блога на диаграмме ниже.
Одна картинка стоит тысячи слов. Любые пункты для моих навыков сработителя? 💯😅.
Наши основные цели должны;
- Леса ионное приложение
- Создайте приложение Android
- Настройка лазурных трубопроводов
- Подписать релиз APKS
💡 Вы можете следовать вместе с моим завершенным репозиторием проекта в здесь Отказ
Леса ионное приложение
Давайте получим начальную настройку из пути! Ионные документы уже есть отличный Начало работы Руководство Отказ На этом этапе мы не собираемся делать что-то фантазии на обосновании вещей ионной. Мы просто будем просто настроить базовое приложение и использовать конденсатор для создания приложения Android. Если вы уже получили существующее ионное приложение, вы можете пропустить раздел «Создать лазурный трубопровод».
1. Создание пустого ионного приложения
ionic start sampleapp blank --capacitor --type=ionic-angular
Как видите, здесь здесь ничего нет. Просто пустой ионный угловой проект с интеграцией конденсатора.
2. Установите ID проекта (необязательно) — Вам не нужно менять APID для этого руководства, но мне нравится все равно настроить.
{
...
"appId": "com.sahan.sampleapp",
...
}
Откройте Capacitor.config.json Файл и изменить appid Имущество к тому, что вам подходит.
3. Добавить конденсатор — Android Project
Если вы не создали свою среду для разработки Android, пожалуйста, следуйте этому Руководство сделать это.
ionic build && ionic cap add android
Обратите внимание на Ионическая сборка Команда здесь. Нам сначала нужно выдать Ионическая сборка Команда перед добавлением проекта Android впервые. С начальным Ionic Cap Добавить Android Команда это будет скопировать необходимые веб-активы в нативный проект.
💡 Это сейчас Рекомендуется сохранить ваши родные проекты в контроле источника.
Если вы внесите какие-либо изменения в свой ионный проект, вы можете использовать Копировать ионные шапки Команда для копирования любых измененных веб-активов или Ionic Cap Sync. Если вы используете/обновили какие-либо собственные зависимости.
После этих шагов ваша структура проекта должна выглядеть следующим образом.
Создайте лазурный трубопровод
Для этого учебника я создадим один Azure-Pipelines.yml Файл и сборки-опубликовать два приложения для Android, один из отладочных конфигураций и другой для выпуска.
1. Создание начальной структуры Azure-Pipelines.yml.yml.yml.
Давайте сначала создадим папку под названием Инфраструктура В корне структуры нашего решения. Мы будем использовать эту папку, чтобы сохранить все наши файлы Line Azure Pipeline. Затем мы добавим два дополнительных файла YAML под названием Ionic-Android-debug-build.yml и Ionic-Android-Release-build.yml Отказ Я объясню, почему мы делаем это через секунду. Ваша структура файлов должна выглядеть так.
Для нашего начального шага мы создадим структуру Barebones наших лазурных трубопроводов .yml file
trigger:
- main
variables:
vmImageName: 'windows-latest'
projectName: 'SampleApp'
stages:
- stage: Build
displayName: Build Ionic - Android projects
jobs:
# Debug build
- job: Build_Ionic_Android_Debug
variables:
- name: buildConfiguration
value: Debug
displayName: Build Debug
pool:
vmImage: $(vmImageName)
steps:
- template: ionic-android-debug-build.yml
# Release build
- job: Build_Ionic_Android_Release
variables:
- name: buildConfiguration
value: Release
displayName: Build Release
pool:
vmImage: $(vmImageName)
steps:
- template: ionic-android-release-build.yml
Вот грубое объяснение структуры вышеуказанного файла.
вызывать: Мы запускаем наш трубопровод всякий раз, когда изменение происходит сГлавнаяветвьПеременные: Мы определили две глобальные переменные, которые можно повторно использовать на наших этапах
стадии : Это где мы определяем наши этапы. Первоначально мы добавили Построить сцена. Позже мы добавим другой этап под названием Развертывать
рабочие места: У нас есть две работы под названиемОтладкаиВыпускОтказРабота: Шаги: Обратите внимание, как мы даем наш путь шаблона сШаблонатрибут. Таким образом, нам не нужно держать все в одном файле ямла.
💡 Совет: Если вы используете Сценарий Задача, которую вы иногда обнаружите, что любые многоуровневые команды не будут работать. Только первый взял бы. Вы можете добавить ваши команды с && Или используйте задачу PowerShell, как показано в этом руководстве.
2. Создание Ionic-Android-debug-build.yml
steps:
- script: npm install -g @ionic/cli
displayName: 'Install Ionic CLI'
- task: Npm@1
inputs:
workingDir: '$(Build.SourcesDirectory)/$(projectName)'
command: install
displayName: 'NPM Install'
- powershell: |
ionic cap build android --no-open
npx cap sync
cd android
./gradlew assemble$(buildConfiguration)
workingDirectory: $(Build.SourcesDirectory)/$(projectName)
displayName: 'Build Android Project'
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)'
contents: "**/app-$(buildConfiguration).apk"
targetFolder: "$(Build.ArtifactStagingDirectory)/$(projectName)"
displayName: "Copy unsigned APK to staging directory"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: "$(Build.ArtifactStagingDirectory)/$(projectName)"
ArtifactName: "$(projectName)"
publishLocation: "Container"
displayName: "Publish artifacts"
Мы используем Граделв Утилита, которая поставляется с проектом Android, чтобы построить его. Это обертка вокруг Грели, которая вызывает его с любыми параметрами, которые мы дали (в нашем случае Assembledebug или ассемассаесть ). Если в вашей системе не найден в вашей системе (или в агенте по сборке), он также скажет его с сервера распределения.
Ionic-Android-Release-build.yml Это в значительной степени той же конфигурации, за исключением некоторых дополнительных флагов, чтобы сделать сборку выпуска. Мы пройдем через этот файл на шаге подписания.
Теперь отпустите и совершите изменения. Возможно, вы захотите Создать новый лазурный трубопровод Если вы еще не сделали. После того, как трубопровод будет запущен, вы сможете увидеть все зеленые (надеюсь). 😀
Если вы посмотрите на артефакты сборки, вы найдете отладку и выпустить APKS все в одном месте сейчас. Далее мы посмотрим на подписание файлов APK.
Подписание APK
Если вы публикуете свое приложение в игровой магазин, нам нужно подумать о подписании наших APKS. Ionic’s Официальная документация Уже охватывает этот шаг, поэтому мы посмотрю на то, как мы можем автоматизировать этот шаг.
1. Создание файла .keystore
Если вы делаете это в первый раз, вам нужно создать частную .keystore Файл, используемый для подписания APK. Вы можете использовать keytool Файл, который поставляется с Android SDK:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Не забудьте принять к сведению следующее, когда вы генерируете этот файл.
- Пароль ключевого магазина
- Псевдоним ключей
- Ключевой пароль
Мы будем ставить их в переменные трубопроводы в качестве следующего шага.
2. Создание переменных трубопроводов
После того, как вы сгенерировали файл Keystore, вы можете перейти к разделу библиотеки вашего проекта в Azure DEVOPS.
Обязательно поставить в keystorepassword , Кейалиас и keypassword Переменные, которые мы создали на вышеуказанном шаге.
После этого вам необходимо загрузить файл Keystore в Secure файлы раздела. Позже мы получим доступ к этому файлу в задаче подписания Android.
3. Добавить задачу подписания
Мы будем использовать AndroidSigning @ 3 Задача подписать нашу сборку выпуска. Это довольно прямая задача для использования и параметры, которые нам нужно отправлять, следующие.
- task: AndroidSigning@3
inputs:
apkFiles: '$(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)/*.apk'
apksign: true
apksignerKeystoreFile: '${{ parameters.keystoreFileName }}'
apksignerKeystorePassword: '${{ parameters.keystorePassword }}'
apksignerKeystoreAlias: '${{ parameters.keyAlias }}'
apksignerKeyPassword: '${{ parameters.keyPassword }}'
apksignerArguments: --out $(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)/$(projectName)-$(buildConfiguration).apk --verbose
zipalign: true
displayName: 'Sign the APK'
Обратите внимание, как мы связываем переменные, которые мы создали в разделе библиотеки. Теперь наш финал Ionic-Android-Release-build.yml Файл будет выглядеть как следующее.
parameters:
- name: keystoreFileName
displayName: "The keystore file name for signing the apk"
type: string
- name: keystorePassword
displayName: "Password for the keystore"
type: string
- name: keyAlias
displayName: "Key alias"
type: string
- name: keyPassword
displayName: "Key password"
steps:
- script: npm install -g @ionic/cli
displayName: 'Install Ionic CLI'
- task: Npm@1
inputs:
workingDir: '$(Build.SourcesDirectory)/$(projectName)'
command: install
displayName: 'NPM Install'
- powershell: |
ionic cap build android --prod --no-open
npx cap sync
cd android
./gradlew assemble$(buildConfiguration)
workingDirectory: $(Build.SourcesDirectory)/$(projectName)
displayName: 'Build Android Project'
- task: AndroidSigning@3
inputs:
apkFiles: '$(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)/*.apk'
apksign: true
apksignerKeystoreFile: '${{ parameters.keystoreFileName }}'
apksignerKeystorePassword: '${{ parameters.keystorePassword }}'
apksignerKeystoreAlias: '${{ parameters.keyAlias }}'
apksignerKeyPassword: '${{ parameters.keyPassword }}'
apksignerArguments: --out $(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)/$(projectName)-$(buildConfiguration).apk --verbose
zipalign: true
displayName: 'Sign the APK'
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.SourcesDirectory)/$(projectName)/android/app/build/outputs/apk/$(buildConfiguration)'
contents: "**/$(projectName)-$(buildConfiguration).apk"
targetFolder: "$(Build.ArtifactStagingDirectory)/$(projectName)"
displayName: "Copy unsigned APK to staging directory"
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: "$(Build.ArtifactStagingDirectory)/$(projectName)"
ArtifactName: "$(projectName)"
publishLocation: "Container"
displayName: "Publish artifacts"
💡 Совет: я обнаружил, что не могу сделать имя файла, исходящее из групповой переменной. Что означает, что вам нужно, чтобы он был жесткозедирован в лазурных трубопроводах.yml файл
Во-первых, нам нужно сказать Azure-Pipeline.yml, какую переменную группу использовать. Вот небольшой выдержка этого.
# other tasks removed for brevity
- job: Build_Ionic_Android_Release
variables:
- group: SampleApp-Release
- name: buildConfiguration
value: Release
💡 Обратите внимание, что обозначение для Определение переменной может принимать два варианта. Если вы не используете группу, вы могли бы просто написать ее как BuildConfiguration: Release Отказ Если вы используете Группа Атрибут, вам нужно использовать нотацию, которую я показал на приведенном выше фрагменте. Я должен был узнать это трудный путь 😂
Вы бы также заметили, что мы используем Параметры здесь. Они будут введены в Azure-Pipeline.yml файл.
# other tasks removed for brevity
steps:
- template: ionic-android-release-build.yml
parameters:
keystoreFileName: 'sampleapp-release-key.keystore'
keystorePassword: $(keystorePassword)
keyAlias: $(keyAlias)
keyPassword: $(keyPassword)
После того, как вы нажимаете изменения в репо, Azure DEVOPS попросит вас разрешить вашу конвейер получить доступ к безопасному файлу, который мы добавили на вышеуказанном шаге. Нажмите на вид и позвольте ему. В качестве альтернативы вы также можете использовать Azure KeyVault для хранения секретов.
Завершенные файлы YAML можно найти в моем репо над здесь Отказ После завершения трубопровода вы можете взглянуть на артефакты. Вуаля! У нас есть подписанные аппликаты
Заключение
Таким образом, мы создали пустое ионное приложение, настроили файлы трубопроводов Azure DevOps YAML и опубликовали подписанные артефакты. Вы можете использовать ту же структуру, чтобы добавить проект iOS. Тем не менее, шаги сборки могут быть более вовлечены и громоздкими, чтобы получить правильно первоначально. В моей следующей статье мы посмотрим, как мы можем интегрировать с Microsoft App Center для распространения.
Если у вас есть какие-либо отзывы или вопросы, дайте мне знать в комментариях ниже. До скорого 👋
использованная литература
- https://docs.microsoft.com/en-us/azure/devops/pipelines/process/templates?view=azure-devops
- https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch
- https://ionicframework.com/docs/developing/android
Оригинал: «https://dev.to/sahan/multi-stage-builds-for-ionic-apps-with-azure-pipeline-templates-501n»