- PVSM.RU - https://www.pvsm.ru -
Всем привет!
В этом посте мы хотим поделиться опытом создания автоматизированной системы сборки мобильных приложений, в нашем случае – игр для платформы iOS.
Мы столкнулись с необходимостью автоматизировать сборку и деплоймент на тестовые устройства, когда размер парка устройств превысил два десятка, а количество проектов, одновременно находящихся в QA достигло 30+. При таких объемах деплоймент билда на тестовые устройства с помощью “Build & Run” в XCode начал заметно затормаживать процесс прохождения QA. Было принято решение об автоматизации процесса сборки и заливки билдов на устройства.
Наша обновленная билд-система состоит из трех основных компонентов:
Процесс прохождения версии проекта от разработчиков до тестировщиков выглядит следующим образом:
Остановимся чуть подробнее на каждом из основных компонентов.
В качестве хранилища исходных кодов мы используем Subversion, эта СКВ проста в использовании, клиент есть на маке у любого iOS-разработчика «из коробки». С SVN-ом есть всего два тонких момента:
Ядром сервера сборки мы выбрали Jenkins, развернутый на Mac-сервере. Jenkins открыт, бесплатен, прост в установке и настройке, легко расширяется сторонними плагинам и активно поддерживается.
Собственно сборка проекта заключается в чекауте исходного кода и вызове команды xcodebuild с соответствующими параметрами.
Основная (сборочная) часть – это bash-скрипт, который выглядит следующим образом:
# сборка проекта
xcodebuild -target "${TARGET}" -configuration "{$CONFIGURATION}" -project "${XCODEPROJ}" CODE_SIGN_IDENTITY="${CERTIFICATE}" PROVISIONING_PROFILE="${PROVISIONING_ID}" CONFIGURATION_BUILD_DIR="${CONFIGURATION_BUILD_DIR}"
# Здесь параметры $XCODEPROJ, $TARGET и $CONFIGURATION задаются в настройках проекта сборки
# Параметр $CONFIGURATION_BUILD_DIR задает путь, по которому будет расположена собранная app
# В параметрах $CERTIFICATE и $PROVISIONING_ID мы передаем гарантированно правильные (наши) сертификат и провижен профиль
# упаковка в IPA
xcrun -sdk iphoneos PackageApplication -v "${APPLICATION_NAME}.app" -o "${WORKSPACE}/orig_${APP_NAME}.ipa"
# заливка на сервер раздачи
curl -f -k --form "data[email]=${AIRONAPP_USER}" --form "data[password]=${AIRONAPP_PASSWORD}" --form "data[application]=${AIRONAPP_ID}" --form "data[ipa_file]=@${IPA_FILE}" ${AIRONAPP_URL}/api/1.0/http/uploadIPA
Учитывая, что наши разработчики работают на разных версиях XCode, мы поддерживаем сборку четырьмя разными версиями (по состоянию на момент написания поста): 4.2.1, 4.3.1, 4.5.1 и 4.5.2. По умолчанию используется последняя, с возможностью задать конкретную версию для конкретного проекта.
Эта возможность оказалась особенно актуальна в тот момент, когда игровой движок Unity3D имел известный баг совместимости с iOS SDK 6.0 и XCode 4.5.x. (фикс был выпущен в версии Unity3D 3.5.6)
После сборки полученный app пакуется в ipa с помощью утилиты PackageApplication, и итоговый ipa-файл отправляется на сервер раздачи билдов.
Если же сборка «разваливается» по какой-то причине, разработчик получает по почте полный лог консоли со всеми сообщениями об ошибках.
К Jenkins имеют доступ как релиз-менеджеры Alawar (для возможности запустить сборку какого-либо проекта вручную), так и внешние разработчики, например, для того, чтобы получить dSYM-файлы для анализа крэш-логов.
В качестве «железки» мы используем Mac Mini Server (Core i7 4*2.7GHz, 16Gb RAM, 1Tb HDD), данная конфигурация уверенно справляется с одновременной сборкой четырех игровых проектов. Средняя продолжительность сборки не превышает 15 минут (для проектов жанра «поиск предметов», где размер итогового ipa-файла составляет 400-600Mb). Jenkins сконфигурирован на работу в 1 мастер с 4-мя сборщиками. Из установленных плагинов можно отметить:
В качестве сервиса раздачи ipa-файлов мы используем готовое решение от компании Arello Mobile – сервис AirOnApp [1]. По сути, это аналог TestFlight с дополнительными «плюшками», такими как:
Помимо сервера раздачи билдов мы используем небольшое приложение-клиент, на которое в случае успешной сборки отправляется push-уведомление содержащее ссылку на установку билда.
На сегодняшний день мы получили:
В дальнейшем мы планируем реализовать поддержку системой автоматической сборки приложений для всех основных платформ, с которыми мы работаем (MacOS, Android, Windows, Windows 8 и тд), создав кластер из сборщиков на нескольких физических машинах под управлением соответствующих ОС с единой админ-панелью Jenkins.
Буду рад ответить на Ваши вопросы в комментариях или услышать истории о том, как подобные задачи решаются в вашей компании.
Автор: alexportnoy
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/it-infrastruktura/24941
Ссылки в тексте:
[1] AirOnApp: http://www.aironapp.com
[2] Источник: http://habrahabr.ru/post/165881/
Нажмите здесь для печати.