Автоматизация запуска тестов с помощью Travis CI

Наверняка, вы уже не раз встречали на Гитхабе вот такую зелёную кнопку:

Travis CI

Это Travis CI — бесплатный сервис непрерывной интеграции для Гитхаба. При каждом изменении репозитория Трэвис прогоняет все тесты проекта. И если что-то пошло не так (например, забыли закоммитить файл), вы сразу же получаете письмо.

Для подключения Трэвиса нужно сделать три вещи:

  1. Авторизоваться на сайте Трэвиса с помощью OAuth Гитхаба.
  2. Добавить Git-хук.
  3. Добавить в проект файл конфигурации: .travis.yml.

Git-хук

Просто «поверните» переключатель напротив вашего проекта в профиле Трэвиса. Трэвис сам добавит нужный хук в репозиторий на Гитхабе.

Конфигурация

Трэвис поддерживает множество языков. Я покажу, как работать с Node. Остальные языки вы найдёте в документации.

Простейший файл .travis.yml выглядит примерно так:

language: node_js
node_js:
  - '0.8'
  - '0.10'

При каждом изменении репозитория Трэвис сделает следующее (отдельно для Node 0.8 и 0.10):

  1. склонирует репозиторий;
  2. установит зависимости (npm install);
  3. запустит тесты (npm test).

Команды в шагах 2 и 3 зависят от указанного выбранного языка.

Но это совсем простой случай. Часто у проекта есть более сложные зависимости, которые нужно устанавливать вручную. Это делается с помощью скриптов.

Например, тестирование плагина для Гранта:

language: node_js
node_js:
  - '0.8'
  - '0.10'
before_script:
  - npm install -g grunt-cli

Скрипт before_script будет запускаться между шагами 2 и 3. Команды можно писать прямо в .travis.yml (как в примере), а можно указать внешний файл.

Пример посложнее:

language: node_js
node_js:
  - '0.8'
  - '0.10'
before_script:
  - sudo apt-get install fontforge eot-utils
  - wget http://people.mozilla.com/~jkew/woff/woff-code-latest.zip
  - unzip woff-code-latest.zip -d sfnt2woff && cd sfnt2woff && make && sudo mv sfnt2woff /usr/local/bin/ && cd ..
  - npm install -g grunt-cli

Тут устанавливается fontforge и другие утилиты, необходимые для генерации веб-шрифтов. Обратите внимание на первую команду скрипта — Трэвис создаёт для каждого прогона тестов виртуальную машину, к которой у вас есть безпарольный рут-доступ.

В документации описано ещё больше параметров (и остальные скрипты). А для проверки конфигурации можно использовать travis-lint.

One more thing

Трэвис позволяет тестировать не только основной репозиторий проекта, но и все пулреквесты:

Travis CI Pull Request

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