Настройка 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

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 5 253 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 1

      0
      Спасибо за статью, хорошее решение для open source проектов! Не надо подымать полностью свой сервер, как в случае с Jenkins.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое