Разработка мобильных приложений в большинстве случаев является весьма увлекательным занятием, особенно если вам самим нравится то, что вы создаете.Работая с приличным количеством внешних проектов (мы разрабатываем приложения и сайты на заказ), а также с растущим числом своих внутренних приложений, мы задумались о минимизации времени и сил затрачиваемых на подготовку тестовых и релизных сборок приложений.При наличии нескольких разработчиков, тестировщиков и приличного числа проектов, затраты на подготовку сборок становятся весьма существенными.Поэтому чтобы не тратить силы зря и заниматься тем, что действительно важно для ваших сервисов, предлагаем инструкцию по созданию системы автоматической сборки приложений.Описанный далее подход мы используем, в первую очередь, в своих приложениях, с которыми предлагаем вам познакомиться: Together, PhotoSuerte, Routes.Tips.
- Во-первых, для сборки приложений для iOS вам понадобится компьютер или ноутбук Mac
- Если вы используете VPS, то для экономии ресурсов желательно отключить на нем Spotlight (Settings > Spotlight > Privacy > + > Add the entire drive)
- Требования к машине минимальные — 512 МБ ОЗУ; чем быстрее ЦПУ, тем быстрее будет происходить сборка
- Можно собирать приложения либо на физическом устройстве Mac, либо на виртуальном хостинге (например, Hostmyapple, Gekkoit, Xcloud)
- Установить и настроить Jenkins
- Установить Java Runtime
- Включить SSH и подключиться к консоли
- Скачать последнюю версию Jenkins, используя следующую команду консоли:wget -O jenkins-latest.pkg http://mirrors.jenkins-ci.org/osx/latest
- Установить Jenkins командой:sudo installer -pkg jenkins-latest.pkg -target /
- В процессе установки создается пользователь jenkins с домашней директорией /Users/Shared/Jenkins
- Установить, при необходимости, JRE и Apache Ant
- Перезагрузить Mac и убедиться, что Jenkins работает и слушает порт 8080.
- В Jenkins открыть раздел Manage Jenkins/Manage Plugins и установить следующие плагины:
- Ant
- Xcode
- Git
- Publish Over SSH
- Publish Over FTP
- Email extension
- Testflight
- HockeyApp
- также можно установить другие необходимые плагины.
- Установить Xcode через App Store, используя Apple ID
- Установить Xcode Command Line Tools:
- Запустить Xcode
- Войти в меню Xcode/Preferences/Downloads
- Нажать Скачать справа от Command Line Tools
- Установить Homebrew, используя следующие команды консоли:
- ruby -e «$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)»
- brew doctor
- brew update
- Установить nodejs и phonegap/cordova, используя следующие команды консоли:
- brew install nodejs
- npm -global install phonegap
- npm -global install cordova
- Установить Android SDK, используя следующие команды консоли:
- Получить отсюда ссылку на скачивание SDK для версии Mac OS X 64-bit;выполнить команды:
- cd /Users/Shared/Jenkins/build_stuff
- wget http://dl.google.com/android/adt/adt-bundle-mac-x86_64-20131030.zip
- unzip adt-bundle-mac-x86_64-20131030.zip
- ln -s adt-bundle-mac-x86_64-20131030 adt-bundle
- Таким образом, Android SDK будет установлен в директории /Users/Shared/Jenkins/build_stuff/adt-bundle/sdk
- Запустить утилиту /Users/Shared/Jenkins/build_stuff/adt-bundle/sdk/tools/android update sdk —no-ui и установить все версии таргетов
Предположим, что собираемое приложение называется BlahApp.
Сборка Android-приложения
- Создать в Jenkins задачу BlahApp-Android-build
- Взять у разработчиков файлы ant.properties и BlahAppCertificate.keystroke, последний положить в /Users/Shared/Jenkins/build_stuff/keystrokes
- Настроить выгрузку кода проекта Git-плагином из репозитория в workspace
- Чтобы собирать приложение автоматически после пушей в Git, можно использовать любой из способов, описанных на странице Jenkins wiki
- Добавить шаг сборки Invoke Ant с параметрами:
- Targets: release (или как укажут разработчики, прописан в build.xml)
- Build file: platforms/android/build.xml
- Properties: эти параметры обычно находятся в файлах local.properties и ant.properties, тут они подставляются, как параметры командной строки при запуске Ant:
- sdk.dir=/Users/Shared/Jenkins/build_stuff/adt-bundle/sdk
- key.store=/Users/Shared/Jenkins/build_stuff/keystores/BlahAppCertificate.keystore
- key.alias=BlahApp
- key.store.password=********
- key.alias.password=********
- После этого можно проверять сборку и согласовывать с разработчиком различные параметры, версии SDK и прочее, если сборка не отрабатывает
- Доставка файлов собранного приложения
- Архивирование файлов, шаг Post-build action/Archive the artifact с параметрами:
- Files to archive: platforms/android/bin/*.apk
- Доставка по FTP, шаг Post-build action/Send build artifacts over FTP с параметрами:
- Создать предварительно FTP-аккаунт в глобальных настройках Jenkins
- FTP Server Name: выбрать нужный аккаунт
- Source files: platforms/android/bin/*.apk
- Remove prefix: platforms/android/bin/
- Remote directory: BlahApp/Android/${BUILD_ID}_${BUILD_NUMBER}
- Доставка по SSH, шаг Post-build action/Send build artifacts over SSH с параметрами:
- создать предварительно SSH-аккаунт в глобальных настройках Jenkins
- SSH Server Name: выбрать нужный аккаунт
- Source files: platforms/android/bin/*.apk
- Remove prefix: platforms/android/bin/
- Remote directory: BlahApp/Android/${BUILD_ID}_${BUILD_NUMBER}
- Архивирование файлов, шаг Post-build action/Archive the artifact с параметрами:
- Доставка в TestFlight
- Создать действующий аккаунт в Testflight
- Получить API token
- Получить Team token
- Создать Token Pair из обоих токенов в настройках Jenkins в разделе Test Flight
- Добавить шаг Post-build action/Upload to Testflight, с параметрами:
- Token Pair: выбрать созданный выше
- IPA/APK Files: platforms/android/bin/*.apk
- dSYM File: оставить пустым
- Включить параметр: Append changelog to build notes
- Доставка по электронной почте, шаг Post-build action/Editable Email Notification с параметрами:
- Attachments: platforms/android/bin/*.apk
- Attach Build Log: Compress and Attach Build Log
Сборка iOS приложения
- Настроить сертификаты и профили
- Получить у разработчиков сертификаты для подписи приложения и профиль
- В утилите Keychain Access создать xcode.keychain и задать пароль для его открытия
- Сложить в него сертификаты и снять для всех сертификатов ограничения по доступу приложений (см. в вики)
- В настройках Jenkins в секцию Xcode Builder добавить в список keychain’ов xcode.keychain, указав путь к файлу и пароль
- Файл профиля положить в директорию /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles
- Создать в Jenkins задачу BlahApp-build-iOS
- Настроить выгрузку кода проекта Git-плагином из репозитория в workspace.
- 4. Чтобы собирать приложение автоматически после пушей в Git, можно использовать любой из представленных в вики способов:
- Для того чтобы скачать вручную субмодули, надо:
- включить параметр для Git-плагина Disable submodules processing
- добавить первый шаг сборки Execute shell с кодом «git submodule update —init —recursive»
- Добавить шаг сборки Xcode с параметрами:
- Включить Clean before build
- Configuration: Release
- Включить: Pack application and build .ipa
- Code Signing Identity: имя подписанта, на чье имя выписан сертификат, например: iPhone Distribution: DENIVIP Media OOO (SQ12345678)
- Embedded Profile: путь к файлу профиля подписанта, например, /Users/Shared/Jenkins/build_stuff/profiles/4FF5AFF9-DD63-4881-9B69-941D166F1C37.mobileprovision
- Включить Unlock keychain и выбрать файл из п. 1
- Xcode Schema File: взять у разработчиков
- Xcode Project Directory: platforms/ios
- Build Output Directory: built-project
- Доставка файлов собранного приложения
- Архивирование файлов, шаг Post-build action/Archive the artifact с параметрами:
- Files to archive: built-project/*.ipa,built-project/*.zip
- Доставка по FTP, шаг Post-build action/Send build artifacts over FTP с параметрами:
- создать предварительно FTP-аккаунт в глобальных настройках Jenkins
- FTP Server Name: выбрать нужный аккаунт
- Source files: built-project/*.ipa
- Remove prefix: built-project/
- Remote directory: BlahApp/iOS/${BUILD_ID}_${BUILD_NUMBER}
- Доставка по SSH, шаг Post-build action/Send build artifacts over SSH с параметрами:
- создать предварительно SSH-аккаунт в глобальных настройках Jenkins
- SSH Server Name: выбрать нужный аккаунт
- Source files: built-project/*.ipa
- Remove prefix: built-project/
- Remote directory: BlahApp/iOS/${BUILD_ID}_${BUILD_NUMBER}
- Доставка в TestFlight
- Создать действующий аккаунт в Testflight
- Получить API token —
- Получить Team token
- Создать Token Pair из обоих токенов в настройках Jenkins в разделе Test Flight
- Добавить шаг Post-build action/Upload to Testflight, с параметрами:
- Token Pair: выбрать созданный выше
- IPA/APK Files: built-project/*.ipa
- dSYM File: оставить пустым
- Включить параметр: Append changelog to build notes
- Token Pair: выбрать созданный выше
- IPA/APK Files: built-project/*.ipa
- dSYM File: оставить пустым
- Включить параметр: Append changelog to build notes
- Архивирование файлов, шаг Post-build action/Archive the artifact с параметрами:
- Доставка в HockeyApp
- Создать действующий аккаунт в HockeyApp
- Получить API token и Public ID/App ID
- Добавить шаг Post-build action/Upload to HockeyApp, с параметрами:
- API Token: выбрать созданный выше
- Public ID/App ID: выбрать созданный выше
- App file: built-project/*.ipa
- Symbols: built-project/*-dsym.zip
- Доставка по электронной почте, шаг Post-build action/Editable Email Notification с параметрами:
- Attachments: built-project/*.ipa
- Attach Build Log: Compress and Attach Build Log