Автоматическое Создание Приложений Ios В Разных Версиях Xcode С Использованием Jenkins.

Если к вам уже приходил кто-то с вопросом «Где взять свежую сборкуЭ», то вы прекрасно понимаете, зачем нужна автоматизация сборки и распространения.

Никто не хочет тратить лишнее время на рутинную работу.

Ранее мы использовали утилиту 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 также хорошо справляется со своей задачей, когда вы знаете, что хотите найти.

Архитектура нашей системы следующая:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

  • Jenkins установлен на машине под управлением Ubuntu 12.04 LTS. Он используется для различных проектов, поэтому Xcode устанавливается на отдельную машину.

    Если вам нужно только создавать проекты iOS, вы можете установить Jenkins на компьютер Mac OS X без необходимости настройки дополнительного агента.

  • Разработчики загружают код в репозиторий — в нашем примере это Git.
  • Дженкинс запускает агента (машину с Xcode и VCS).

  • Агент скачивает код, собирает проект и в случае успешного завершения сборки загружает его на сервер по FTP для распространения.

  • Дженкинс отправляет уведомления.

Для реализации этой системы нам понадобятся следующие плагины:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.



Настройка плагинов
Давайте рассмотрим на примере сборки конкретного приложения.

У нас есть проект, исходный код которого находится в репозитории Git: [email protected]:ShareKit/ShareKit.git Мы хотим собрать его и разместить на нашем внутреннем сервере для распространения через Интернет. Доступ Jenkins к серверу осуществляется через FTP, на сервере настроен Apache, и все, что мы публикуем, автоматически становится доступным нашему отделу контроля качества или клиентам на специальном сайте.

FTP Чтобы настроить FTP-плагин после его установки, вам необходимо открыть страницу настроек Jenkins: Дженкинс -> Управление Дженкинсом -> Настройка системы В настройках найдите раздел про FTP и введите данные для доступа к серверу.



Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Сохранять.

Гит Чтобы настроить Git, вам необходимо добавить описание установки Git на страницу.

Дженкинс -> Управление Дженкинсом -> Настройка системы

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Путь указывает, какая команда будет запускать Git на агенте.

Вы должны указать полный путь к git на компьютере, где установлен Xcode. Может появиться сообщение об ошибке, но не обращайте на него внимания, поскольку Дженкинс проверяет путь к Git на локальном компьютере, а не на удаленном, где мы будем его использовать.

Сохранять.

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

Дженкинс -> Управление Дженкинсом -> Управление учетными данными

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Вам также необходимо добавить открытый ключ компьютера, на котором установлен Jenkins, в папку авторизованных ключей компьютера, на котором установлен Xcode. Имя пользователя в форме должно совпадать с именем пользователя, под учетной записью которого будет запускаться Xcode. Путь к файлу с открытыми ключами в нашем случае будет такой: /Users/jenkins/.

ssh/authorizedKeys В нашем примере Xcode установлен на машине с IP-адресом 192.168.154.24. Чтобы добавить агент, который будет использоваться для сборки проекта, на странице списка узлов.

Дженкинс -> Управление Дженкинсом -> Управление узлами Нажмите «Новый узел», назовите наш узел «XcodeAgent», выберите «Dumb Slave», нажмите «ОК».



Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Возможна установка любого количества исполнителей в зависимости от мощности машины и нагрузки.

У нас не так много приложений, и один поток вполне справляется со своей задачей.

Каталог должен быть доступен пользователю, в нашем случае — /Users/jenkins/jenkinsCI. Указываем IP-адрес машины и выбираем свои Credentials:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

После того, как мы нажали «Сохранить», мы можем перейти к созданию задания.



Настройка сборки — новое задание
Создайте новую задачу: Дженкинс -> Новая работа

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Введите название задачи, выберите тип «Создать проект свободного программного обеспечения».

Нажмите ОК.

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

В разделе «Исходный код» выбираем Git, указываем адрес репозитория (ShareKit показан на картинке в качестве примера) и исполняемый файл Git, который мы настроили ранее:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Заполняем оставшиеся настройки:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Как часто мы хотим опрашивать систему контроля версий на наличие обновлений — устанавливаем «каждую минуту».

Как видите, Дженкинс предлагает использовать опцию H, что означает, что опрос будет происходить 1 раз в час в произвольную минуту, чтобы снизить нагрузку.



Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Добавление действия сборки: Xcode

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Конфигурация обычно довольно проста.

Мы используем профили AdHoc для создания приложений для тестирования и демонстрации заказчику.

Добавьте еще одно действие сборки.

На этот раз нас интересует публикация приложения на нашем сервере — по FTP:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.



Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.



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

Сначала на странице настроек Дженкинс -> Управление Дженкинсом -> Настройка системы Указываем адрес электронной почты, с которого пользователи будут получать письма:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Указываем адрес SMTP-сервера, порт и тот же email.

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Установленный нами плагин добавляет еще один раздел настроек:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Мы можем указать формат темы и используемый шаблон.

Все шаблоны расположены в файловой системе.

Подробности о шаблонах можно найти на странице плагина.

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin#Email-extplugin-TemplateExamples Кроме того, плагин позволяет задать список получателей и различные настройки для каждого статуса сборки: например, если приложение не собрано, разработчикам отправляется уведомление, если построено — тестировщикам.

На рисунке показан пример статусов неудачной сборки и исправления.

После этого добавляем в нашу сборку Post-build Action:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

и настройте:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Сохраняем, запускаем и радуемся!

Второй Xcode
Все хорошо, когда вы только начали делать проект и поддерживаете только последние версии iOS, но время идет, мир меняется, и Apple выпускает новую iOS и новый Xcode для нее.

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

Понятно, создаём новую ветку, добавляем теги и создаём новый адрес для публикации тестовой версии.

А как насчет Xcode? Плагин не поддерживает переключение между версиями Xcode, поэтому у нас есть два (может быть, кто-то сможет придумать больше — но мы не смогли) варианта:

  1. настройте вторую машину с помощью Xcode и добавьте агент в Jenkins
  2. заставить Дженкинса переключить 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

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Мы добавляем эту команду в форму «Шаг сборки» — «Выполнение оболочки» в качестве первого шага в разделе «Сборка» нашей задачи — перед Xcode. После запуска задачи Xcode изменится, и все остальные задачи, настроенные для старой версии Xcode, не будут собираться корректно.

Чтобы этого избежать, нужно вернуть Xcode, на что настроены другие проекты.

Можно было бы добавить ту же команду после выполнения Xcode, но если сборка прервется, выполнение последовательности шагов сборки будет прервано.

Нужно добавить Post-build action — Post build Task и вернуть всё на свои места:

Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Собираем.

Все работает отлично.

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



Заключение


Автоматическое создание приложений iOS в разных версиях Xcode с использованием Jenkins.

Теги: #iOS #xcode #jenkins #ci #objective-c #разработка iOS
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.