- PVSM.RU - https://www.pvsm.ru -

Настройка Travis-CI для iOS проектов с открытым кодом

Непрерывная интеграция (continuous integration) — практика разработки, позволяющая добиться большей уверенности в стабильности и корректности работы любого проекта. Проекты с открытым кодом — не исключение.

Примерно два месяца назад, в апреле 2013 года комапания Sauce labs [1] объявила [2] о поддержке iOS / Mac для CI-сервера Travis. Сам сервис существует уже довольно давно, и пользуется довольно большой популярностью в open-source community благодаря поддержке большого количества языков [3] и удобству использования. Cервис бесплатен для любого пользователя github и открытых репозиториев. На Хабре уже имеется пост [4] о сервисе и его настройки для тестирования Ruby-проектов, поэтому в этой статье я хотел бы рассказать о более специфической стороне сервиса — настройке автоматической сборке билдов iOS проектов на Travis-CI. Основным фокусом этой статьи будет связка CocoaPods + Cedar + Travis CI, однако я постараюсь рассказать немного и о других связанных с темой вещах.

Итак, начнем.

Имеем проект на github [5], который не имеет никакого отношения к данной статье, однако хочет иметь отношение к Travis CI. На проекте используются CocoaPods, все тесты написаны с помощью фреймворка Cedar.

Шаг первый. Подключение github-репозитория

Заходим на сайт сервиса [6], логинимся с помощью github аккаунта. Заходим в настройки профиля [7], и включаем репозиторий, на котором мы хотим гонять билды и тесты.

Шаг второй. Настройка конфигурационного файла

Большая часть настройки осуществляется в файле .travis.yml, который необходимо положить в корневую папку вашего репозитория. В процессе может пригодиться travis-lint [8], руби гем, позволяющий валидировать этот файл на корректность.

Первым делом необходимо задать язык программирования, для которого будет осуществляться билд.

language: objective-c

Следующий шаг — настройка всех необходимых гемов, и зависимостей для проекта. Имеются следующие шаги работы воркера Travis:

  • before_install
  • before_script
  • script
  • after_success / after_failure
  • after_script

Успешность любой из этих команд(кроме after_success/after_failure и after/acript) определяется возвращаемым значением. Стандартный линуксовый код 0 означает, что билд прошел успешно. Все остальное считается фейлом. Для настройки необходимых зависимостей используем шаг before_install.

В частности, для запуска тестов на симуляторе мы будем использовать гем ios_sim. Удобно, что Travis имеет предустановленный Homebrew, так что установка гема имеет следующий вид

before_install:
		- brew install ios_sim

Забежим немного вперед. Недостаточно просто запустить билд на симуляторе, важно еще и получить результаты Cedar — тестов. В этом нам поможет гем ios_ci [9], позволяющий сбилдить проект, запустить его на симуляторе, и получить результаты тестирования. Ставим гем:

		- gem install ios_ci

Следующий шаг настройки опционален, и связан с конкретной структурой папок выбранного проекта. Файл проекта XCode находится не в корневой директории репозитория, а в директории Example. Поэтому изменяем текущую директорию на директорию с проектом:

		- cd Example

Последним шагом настройки должна была быть установка CocoaPods, однако Travis делает это автоматически, если находит в директории Podfile, так что настройка завершена, можно переходить к сборке.

Шаг третий. Билд проекта и запуск тестов

Переходим к скрипту, который будет непосредственно гонять наши тесты. Нужно понимать, что это не обязательно должен быть седаровский скрипт, или команда make. На самом деле, единственное требование, которое Travis CI выдвигает к шагу script — он должен вернуть значение. 0 — успех, все остальное — фейл. Соответственно можно собирать проект так, как вам это необходимо, и можно использовать любой тестовый фреймворк, включая встроенный OCUnit.

Одним из требований гема ios_ci является то, что для корректной работы ему нужно передать корневую директорию проекта с исходниками. Для этой цели мы будем использовать одну из переменных окружения Travis — $TRAVIS_BUILD_DIR, в которой содержится корневая папка репозитория (все доступные переменные окружения можно посмотреть здесь [10]).

Команда для сборки проекта и прогона тестов будет выглядеть достаточно лаконично

script: 
	ios_ci cedar --source-root $TRAVIS_BUILD_DIR/Example --workspace DTTableViewManager.xcworkspace --scheme CedarUnitTests --build-path Build/Products

Таким образом, полный файл .travis.yml будет выглядеть следующим образом:

language: objective-c

before_install:
    - gem install ios_ci
    - brew install ios-sim
    - cd Example

script: ios_ci cedar --source-root $TRAVIS_BUILD_DIR/Example --workspace DTTableViewManager.xcworkspace --scheme CedarUnitTests --build-path Build/Products

Шаг четвертый. Профит

Все, что осталось сделать, это сделать коммит в одну из веток, и запушить изменения на github. Travis-CI автоматически запланирует билд, и через минуту-две начнет собирать проект. Если все пройдет успешно — статус станет зеленым, если нет — красным. Одновременно на почту отправится сообщение об успешности или неудаче сборки.

Дополнительные плюшки Travis-CI

1. Возможность выбрать ветки репозитория, для которых будет запускаться билд.

branches:
only:
    - master
    - develop

Таким образом, Travis будет собирать билды только для коммитов, сделанных в эти две ветки. Аналогичным образом можно добавлять ветки в черный список:

branches:
except:
    - legacy
    - experimental

2. Возможность автоматического запуска билдов для пулл реквестов. Более того, статус билда будет отображаться прямо в пулл реквесте на страничке github.

image

3. Бейджик [11]!

image

Бейджик представляет из себя ничто иное, как ссылку следующего вида

https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png?branch=master,staging,production

Данная статья показывает лишь необходимый минимум для настройки билдов на Travis-CI. Возможности данного сервиса намного больше, например известный фреймворк RestKit использует Travis не только для сборки билдов и тестов, но также и для генерации документации с помощью appledoc [12].

Спасибо за внимание, и удачных open-source проектов!

Ссылки

1. Не имеющий отношения к данной статье, но хороший фреймворк [5]
2. Travis-CI [6]
3. Хабростатья про Ruby — тестирование на Travis-CI [4]
4. Документация по сервису Travis-CI [13]
5. CI — гем для тестирования iOS приложений [9]
6. Travis-lint [8]

Автор: DenHeadless

Источник [14]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ios-development/35939

Ссылки в тексте:

[1] Sauce labs: https://saucelabs.com/

[2] объявила: http://sauceio.com/index.php/2013/04/travis-ci-for-os-x-and-ios-powered-by-sauce/

[3] большого количества языков: http://about.travis-ci.org/docs/

[4] пост: http://habrahabr.ru/post/140344/

[5] проект на github: https://github.com/DenHeadless/DTTableViewManager

[6] сайт сервиса: https://travis-ci.org

[7] настройки профиля: https://travis-ci.org/profile

[8] travis-lint: https://github.com/travis-ci/travis-lint

[9] гем ios_ci: https://github.com/okolodev/ios_ci

[10] здесь: http://about.travis-ci.org/docs/user/ci-environment/

[11] Бейджик: http://about.travis-ci.org/docs/user/status-images/

[12] генерации документации с помощью appledoc: https://github.com/RestKit/RestKit/blob/master/Rakefile

[13] Документация по сервису Travis-CI: http://about.travis-ci.org/

[14] Источник: http://habrahabr.ru/post/182294/