Если к вам уже приходил кто-то с вопросом «Где взять свежую сборкуЭ», то вы прекрасно понимаете, зачем нужна автоматизация сборки и распространения.
Никто не хочет тратить лишнее время на рутинную работу.
Ранее мы использовали утилиту iOSBetaBuilder ( http://www.hanchorllc.com/betabuilder-for-ios/ ).
Это приложение предназначено для упрощения распространения AdHoc-сборок iOS-приложения: вам просто нужно ввести имя и версию проекта, адрес (URL), по которому вы хотите опубликовать сборку, и вы получите сгенерированный index.html. и манифест.plist. Для первого раза этого достаточно.
Но когда проект доходит до стадии исправления ошибок, QA не хочет и не имеет времени тратить лишние 5 минут на сборку и переиздание.
А когда проектов много, и их сборка занимает больше времени.
Внутри компании затраченное время, помноженное на количество проектов, становится слишком значительным, и приходит время автоматизации.
В этой статье мы расскажем, как настроить автоматическую сборку iOS-приложений, отправку уведомлений по почте и публикацию приложения на FTP-сервере для тестирования и демонстрации заказчику.
Для тех, кто уже в теме, в конце статьи есть интересный раздел: как настроить сборки с разными версиями Xcode на одной машине.
Как настроить автоматическую сборку приложений iOS с помощью Jenkins?
Вам необходимо установить Jenkins, добавить и настроить несколько плагинов, добавить агент сборки и настроить распространение OTA. Если вы хотите получать больше уведомлений на почту, вам необходимо настроить дополнительный плагин.Так.
Что такое Дженкинс? Jenkins — это сервер непрерывной интеграции.
Jenkins написан на Java и имеет большое количество плагинов для расширения его функциональности.
Всю необходимую информацию для установки можно найти здесь https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins Для поиска плагинов - https://wiki.jenkins-ci.org/display/JENKINS/Plugins , но Google также хорошо справляется со своей задачей, когда вы знаете, что хотите найти.
Архитектура нашей системы следующая:
- Jenkins установлен на машине под управлением Ubuntu 12.04 LTS. Он используется для различных проектов, поэтому Xcode устанавливается на отдельную машину.
Если вам нужно только создавать проекты iOS, вы можете установить Jenkins на компьютер Mac OS X без необходимости настройки дополнительного агента.
- Разработчики загружают код в репозиторий — в нашем примере это Git.
- Дженкинс запускает агента (машину с Xcode и VCS).
- Агент скачивает код, собирает проект и в случае успешного завершения сборки загружает его на сервер по FTP для распространения.
- Дженкинс отправляет уведомления.
Настройка плагинов
Давайте рассмотрим на примере сборки конкретного приложения.У нас есть проект, исходный код которого находится в репозитории Git: [email protected]:ShareKit/ShareKit.git Мы хотим собрать его и разместить на нашем внутреннем сервере для распространения через Интернет. Доступ Jenkins к серверу осуществляется через FTP, на сервере настроен Apache, и все, что мы публикуем, автоматически становится доступным нашему отделу контроля качества или клиентам на специальном сайте.
FTP Чтобы настроить FTP-плагин после его установки, вам необходимо открыть страницу настроек Jenkins: Дженкинс -> Управление Дженкинсом -> Настройка системы В настройках найдите раздел про FTP и введите данные для доступа к серверу.
Гит Чтобы настроить Git, вам необходимо добавить описание установки Git на страницу.
Дженкинс -> Управление Дженкинсом -> Настройка системы
Путь указывает, какая команда будет запускать Git на агенте.
Вы должны указать полный путь к git на компьютере, где установлен Xcode. Может появиться сообщение об ошибке, но не обращайте на него внимания, поскольку Дженкинс проверяет путь к Git на локальном компьютере, а не на удаленном, где мы будем его использовать.
Сохранять.
Xcode-агент Чтобы запустить любой агент Jenkins на удаленном компьютере, вам необходимо добавить учетные данные для доступа к удаленному компьютеру на странице настроек.
Дженкинс -> Управление Дженкинсом -> Управление учетными данными
Вам также необходимо добавить открытый ключ компьютера, на котором установлен Jenkins, в папку авторизованных ключей компьютера, на котором установлен Xcode. Имя пользователя в форме должно совпадать с именем пользователя, под учетной записью которого будет запускаться Xcode. Путь к файлу с открытыми ключами в нашем случае будет такой: /Users/jenkins/.
ssh/authorizedKeys В нашем примере Xcode установлен на машине с IP-адресом 192.168.154.24. Чтобы добавить агент, который будет использоваться для сборки проекта, на странице списка узлов.
Дженкинс -> Управление Дженкинсом -> Управление узлами Нажмите «Новый узел», назовите наш узел «XcodeAgent», выберите «Dumb Slave», нажмите «ОК».
Возможна установка любого количества исполнителей в зависимости от мощности машины и нагрузки.
У нас не так много приложений, и один поток вполне справляется со своей задачей.
Каталог должен быть доступен пользователю, в нашем случае — /Users/jenkins/jenkinsCI.
Указываем IP-адрес машины и выбираем свои Credentials:
После того, как мы нажали «Сохранить», мы можем перейти к созданию задания.
Настройка сборки — новое задание
Создайте новую задачу: Дженкинс -> Новая работаВведите название задачи, выберите тип «Создать проект свободного программного обеспечения».
Нажмите ОК.
В дальнейшем для создания задач, аналогичных уже существующим, лучшим вариантом будет «Копировать существующее задание».
В разделе «Исходный код» выбираем Git, указываем адрес репозитория (ShareKit показан на картинке в качестве примера) и исполняемый файл Git, который мы настроили ранее:
Заполняем оставшиеся настройки:
Как часто мы хотим опрашивать систему контроля версий на наличие обновлений — устанавливаем «каждую минуту».
Как видите, Дженкинс предлагает использовать опцию H, что означает, что опрос будет происходить 1 раз в час в произвольную минуту, чтобы снизить нагрузку.
Добавление действия сборки: Xcode
Конфигурация обычно довольно проста.
Мы используем профили AdHoc для создания приложений для тестирования и демонстрации заказчику.
Добавьте еще одно действие сборки.
На этот раз нас интересует публикация приложения на нашем сервере — по FTP:
Добавление уведомлений по электронной почте
Если у вас есть почтовый сервер, вы можете настроить Jenkins для отправки электронных писем на основе результатов сборки.
Сначала на странице настроек
Дженкинс -> Управление Дженкинсом -> Настройка системы
Указываем адрес электронной почты, с которого пользователи будут получать письма:
Указываем адрес SMTP-сервера, порт и тот же email.
Установленный нами плагин добавляет еще один раздел настроек:
Мы можем указать формат темы и используемый шаблон.
Все шаблоны расположены в файловой системе.
Подробности о шаблонах можно найти на странице плагина.
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin#Email-extplugin-TemplateExamples Кроме того, плагин позволяет задать список получателей и различные настройки для каждого статуса сборки: например, если приложение не собрано, разработчикам отправляется уведомление, если построено — тестировщикам.
На рисунке показан пример статусов неудачной сборки и исправления.
После этого добавляем в нашу сборку Post-build Action:
и настройте:
Сохраняем, запускаем и радуемся!
Второй Xcode
Все хорошо, когда вы только начали делать проект и поддерживаете только последние версии iOS, но время идет, мир меняется, и Apple выпускает новую iOS и новый Xcode для нее.Заказчик просит поддержать то, что было и что есть, и возникает вопрос о необходимости исправления ошибок в старой версии, пока разрабатывается новая.
Понятно, создаём новую ветку, добавляем теги и создаём новый адрес для публикации тестовой версии.
А как насчет Xcode? Плагин не поддерживает переключение между версиями Xcode, поэтому у нас есть два (может быть, кто-то сможет придумать больше — но мы не смогли) варианта:
- настройте вторую машину с помощью Xcode и добавьте агент в Jenkins
- заставить Дженкинса переключить Xcode с помощью сценария оболочки
Вы можете изменить Xcode, используя довольно простой скрипт: sudo xcode-select -switch $XCodePathToDeveloperFolder — для переключения установленного Xcode необходимы root-права Однако при запуске команд по ssh возникают трудности с паролем и может появиться следующая ошибка: sudo: нет терминала и не указана программа Askpass Это происходит потому, что команды агента Jenkins выполняются через ssh, который не предоставляет терминал.
Чтобы решить эту проблему, вам необходимо создать файл, например, /Users/jenkins/pass, в который поместить пароль нашего пользователя.
Нам нужно добавить в скрипт переключения Xcode команду для вывода содержимого нашего файла паролей через конвейер:
кот/Пользователи/Дженкинс/пароль | sudo xcode-select -switch /Applications/XcodeVX.X.app/Contents/Developer
Мы добавляем эту команду в форму «Шаг сборки» — «Выполнение оболочки» в качестве первого шага в разделе «Сборка» нашей задачи — перед Xcode.
После запуска задачи Xcode изменится, и все остальные задачи, настроенные для старой версии Xcode, не будут собираться корректно.
Чтобы этого избежать, нужно вернуть Xcode, на что настроены другие проекты.
Можно было бы добавить ту же команду после выполнения Xcode, но если сборка прервется, выполнение последовательности шагов сборки будет прервано.
Нужно добавить Post-build action — Post build Task и вернуть всё на свои места:
Собираем.
Все работает отлично.
Стоит отметить, что количество исполнителей, которое мы указали при настройке агента, может повлиять на сборку, если мы зададим больше 1. Тогда для всех сборок придется добавить переключение Xcode на нужную версию.
Заключение
Теги: #iOS #xcode #jenkins #ci #objective-c #разработка iOS
-
Харгривз, Джеймс
19 Oct, 24 -
Чили
19 Oct, 24 -
Повышение Стабильности Внешнего Интерфейса
19 Oct, 24 -
Углекислый Газ На Мкс
19 Oct, 24 -
Smspod.ru - Мобильные Группы
19 Oct, 24 -
Полезность Kindle 3
19 Oct, 24 -
Google Закрывает Notebook И Другие Сервисы
19 Oct, 24