- PVSM.RU - https://www.pvsm.ru -
Непрерывная интеграция (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.
Заходим на сайт сервиса [6], логинимся с помощью github аккаунта. Заходим в настройки профиля [7], и включаем репозиторий, на котором мы хотим гонять билды и тесты.
Большая часть настройки осуществляется в файле .travis.yml, который необходимо положить в корневую папку вашего репозитория. В процессе может пригодиться travis-lint [8], руби гем, позволяющий валидировать этот файл на корректность.
Первым делом необходимо задать язык программирования, для которого будет осуществляться билд.
language: objective-c
Следующий шаг — настройка всех необходимых гемов, и зависимостей для проекта. Имеются следующие шаги работы воркера Travis:
Успешность любой из этих команд(кроме 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 автоматически запланирует билд, и через минуту-две начнет собирать проект. Если все пройдет успешно — статус станет зеленым, если нет — красным. Одновременно на почту отправится сообщение об успешности или неудаче сборки.
1. Возможность выбрать ветки репозитория, для которых будет запускаться билд.
branches:
only:
- master
- develop
Таким образом, Travis будет собирать билды только для коммитов, сделанных в эти две ветки. Аналогичным образом можно добавлять ветки в черный список:
branches:
except:
- legacy
- experimental
2. Возможность автоматического запуска билдов для пулл реквестов. Более того, статус билда будет отображаться прямо в пулл реквесте на страничке github.
3. Бейджик [11]!
Бейджик представляет из себя ничто иное, как ссылку следующего вида
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/
Нажмите здесь для печати.