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

в 19:46, , рубрики: cedar, continuous integration, iOS, ios development, mac os x, open source, travis-ci, разработка под iOS, метки: , , , ,

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

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

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

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

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

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

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

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

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

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, позволяющий сбилдить проект, запустить его на симуляторе, и получить результаты тестирования. Ставим гем:

		- gem install ios_ci

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

		- cd Example

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

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

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

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

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

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. Бейджик!

image

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

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

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

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

Ссылки

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

Автор: DenHeadless

Источник

Поделиться

* - обязательные к заполнению поля