Сборка APK и IPA со сборкой phonegap, тепличным CI и Jenkins

В gfnork мы создаем приложения для ionic. Если оставить в стороне общую дискуссию о гибридных приложениях и ionic, то, что традиционно было головной болью для гибридных приложений, — это набор инструментов. Путаница config.xml vs package.json для плагинов Cordova, вероятно, скоро закончится, но когда мы начали разрабатывать ionic-приложения, мы были очень удивлены тем, что, хотя сама разработка шла гладко, цепочка инструментов сборки была вещью, которая пришла сразу. из ада.

Мы потратили дни на выяснение того, почему в 50% случаев плагины не устанавливались должным образом или выглядели так, будто устанавливались должным образом, но, в конце концов, не работали на реальных устройствах, почему XCode не позволял нам собрать решение или как разместить важные параметры в AndroidManifest.xml автоматически.

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

В этом посте мы рассмотрели олдскульного контестера Jenkins CI, Adobe Phonegap Build и недавно обнаруженный нами инструмент GreenhouseCI.

Сборка Adobe PhoneGap

Хорошие части:

Phonegap Build поставляется с удобным интерфейсом командной строки, который делает развертывание очень простым.

Просто беги

phonegap remote build android

а CLI позаботится обо всем остальном.

Adobe предлагает бесплатный уровень сборки Phonegap, который позволяет вам создать одно приложение, которого должно быть достаточно для большинства частных энтузиастов и даже для стартапов на ранней стадии. Сборка Phonegap позволяет создавать Android APK, IOS IPA и Windows XAP, поэтому она поможет вам, даже если у вас нет компьютера Mac или Windows.

Плохие части:

У Cordova и Phonegap довольно сложные отношения друг с другом. Phonegap основан на Cordova, что теоретически должно сделать приложение, созданное для Cordova, также совместимым с phonegap. На самом деле между ними существует множество крошечных, но очень раздражающих различий. Кордова и Phonegap управляют своими платформами и плагинами в config.xml по-разному, а это означает, что ваше приложение Cordova не будет работать с плагинами напрямую, если вы переключитесь на phonegap. Кроме того, заставки и значки обрабатываются по-разному в Cordova и PhoneGap, что добавляет путаницы. (Phonegap требует, чтобы вы добавляли изображения заставок и значков в папку www вашего приложения, в то время как Cordova отлично помещает их в папку, которая не попадет в вашу сборку.)

В заключение все это означает, что если вы решите использовать сборку phonegap, вы должны полностью перенести свой проект на phonegap.

Для науки я изменил файлы конфигурации с Cordova на сборку phonegap, чтобы я мог создать по крайней мере одну успешную сборку. Миграция плагинов и платформ уже была довольно болезненной, потому что по какой-то странной причине phonegap использует тег ‹param› для хранения переменных плагина, а Cordova использует тег ‹variable›. По какой-то причине блокировка ориентации экрана перестала работать после перехода на phonegap, и я не мог вернуть ее к работе без неоправданных усилий.

Осталось установить

<preference name="android-build-tool" value="gradle" />

в config.xml, чтобы указать сборке phonegap использовать gradle для сборки, тогда сборка прошла успешно. Заставка и значки по-прежнему не были установлены правильно, но после внесения упомянутых выше изменений они также появились в моем приложении.

Помимо этих неприятных различий между phonegap и cordova, мы обнаружили, что функций, предлагаемых в сборке Phonegap для автоматизации, также немного не хватает. Сборка Phonegap предлагает REST API, но не имеет встроенных функций для автоматической публикации в Google Play, Itunes Connect или других службах распространения. Вам нужно будет создать что-то самостоятельно, чтобы автоматизировать сборку Phonegap, например. создавать и распространять ночные сборки.

Теплица КИ

Ионная конфигурация в теплице выполняет следующие команды.

  • ионные крючки добавить
  • ионные платформы rm ‹android/ios›
  • ионные платформы добавляют ‹android/ios›
  • ионная сборка ‹android/ios›

Хорошие части:

Greenhouse CI имеет очень чистый пользовательский интерфейс, автоматическое определение платформы вашего проекта и отслеживание последних выполненных сборок с журналом изменений и проблемами сборки. Это продукт, который многое делает для вас и представляет то, что он делает, аккуратно.

Greenhouse CI позволяет создавать Android APK и IOS IPA, но не Windows XAP, но я думаю, что большинство разработчиков в наши дни могут обходиться без Windows.

Автоматическая публикация также дополняет основные включенные функции, публикация возможна через электронную почту, Google Play, Itunes Connect, HockeyApp, Crashlytics, Relution, TestFairy, Slack и Hipchat.

Во время нашего теста мы без проблем использовали Google Play, Itunes Connect, Slack и HockeyApp. Мы загрузили профили и сертификаты обеспечения, и все заработало.

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

Кроме того, поддержка через внутреннюю связь быстрая и компетентная, один из их разработчиков помог мне решить проблему, которую мы обнаружили при развертывании ionic, и потребовал много времени, чтобы все заработало.

Greenhouse также предлагает бесплатный план, который позволяет создавать 2 приложения, но без совместной работы в команде. К счастью, этого более чем достаточно для частных пользователей и небольших стартапов.

Плохие части:

Некоторые детали для проектов на основе кордовы все еще немного свежи. В настоящее время Greenhouse работает на узле v6.2.1, и эту версию нельзя настроить из пользовательского интерфейса, что привело к некоторым странным ошибкам в нашей системе CI, поскольку ionic по-прежнему не полностью совместим с nodejs 6. К счастью, команда поддержки теплицы помогла нам с этим, используя пользовательские сценарии сборки, мы смогли вручную установить версию nodejs на LTS.

Мы столкнулись с парой других небольших проблем в отношении ionic, особенно в отношении скриптов сборки, используемых ionic во время установки плагина, но смогли решить все проблемы с помощью пользовательских скриптов сборки, которые мы предоставили системе Greenhouse CI.

Наш скрипт выглядел так и работает во время GH_POST_CLONE_SCRIPT:

#!/bin/sh
npm install -g n
n 4.4.7
npm install -g gulp
cd $GREENHOUSE_BUILD_DIR/roadatlas_ionic
npm install
ionic state reset
gulp

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

Тестирование в настоящее время не поддерживается для ионных проектов, но, вероятно, будет включено в будущем.

Настройка ночных сборок немного сложна, так как в парнике нет встроенной функции для этого (в нашем случае мы хотели, чтобы устройства собирались только один раз в день), поэтому нам пришлось настроить скрипт на сервере, который будет пинговать Теплица один раз в день, чтобы начать сборку.

Дженкинс

Jenkins — это CI общего назначения, который может создавать множество вещей, от бэкэнда до внешнего интерфейса, теоретически все. Возможности Jenkins по созданию и развертыванию IOS зависят от платформы, на которой он развернут. Только компьютеры Mac могут создавать IOS, поэтому вам понадобится где-то сервер Mac, чтобы позволить jenkins создавать IOS IPA.

Хорошие части

Дженкинс очень настраиваемый. Нет ничего, что вы не могли бы сделать с jenkins или плагином для jenkins. Веб-хуки, публикации, еженощно — все это покрыто Дженкинсом. Вам нужно установить Android SDK в вашей среде сборки, nodejs и ionic CLI, и вы можете начать сборку. Мы даже настроили этап сборки, который будет публиковать наше ионное приложение на FTP-сервере, чтобы мы могли также тестировать новые сборки в браузере.

Если вы хотите настроить ночные сборки, просто установите флажок Poll SCM в триггерах сборки и введите

0 0 * * *

внутри текстового поля «расписание».

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

Плохие части

Вы должны приложить некоторые умственные усилия, и вы не можете запускать сборки IOS, если у вас нет доступного где-то сервера сборки Apple или вы используете jenkins в операционной системе Apple. Jenkins несколько сложен в настройке (по крайней мере, по сравнению с двумя другими размещенными решениями), но имеет то преимущество, что может запускать все в вашем помещении (если это требуется). Вам нужен сервер для размещения jenkins, но на Openshift доступен ограниченный бесплатный хостинг jenkins.

Подведение итогов

В целом, в этой статье представлен только краткий обзор трех возможных инструментов для запуска обычных сборок вашего ионного приложения. Phonegap Build и Greenhouse предлагают бесплатные сборки для IOS, и приятно видеть, что теперь у разработчиков больше выбора, когда дело доходит до создания инструментов для приложений ionic и Cordova.

Если есть какие-либо другие инструменты, предлагающие автоматизированные сборки для Cordova и Ionic, которые мы пропустили, пожалуйста, прокомментируйте и расскажите нам о них!

Первоначально опубликовано на gfnork.de 23 августа 2016 г.