Сборка 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 г.