Наверняка многих, в своё время, не обошла стороной шумиха вокруг travis-ci. Это сервис для сборки и тестирования проектов на GitHub, относительно простой, но в принципе покрывающий большинство use case. По сравнению с тем же Jenkins, он выглядит малофункциональным, но тут преимущество в том, что за вас уже развёрнута инфраструктура, причём совершенно бесплатно.
Как же он работает? На каждый push в репозиторий, ваш проект ставится в очередь на сборку, до того момента, пока не появятся свободные ресурсы. Затем основываясь на конфигурационном файле travis-ci поднимает чистую виртуальную машину с предустановленными пакетами для указанного языка. Например для rust это будет компилятор rust и менеджер пакетов cargo. Заострю внимание на том, что состояние машины между сборками не сохраняется, она всегда будет "новой". Если нужны какие-то дополнительные пакеты, особые переменные окружения или другие настройки - это нужно указать в специальных секциях конфига. Дальше собственно выполняется сборка и прогон тестов для приложения. Если на этих этапах какая-либо команда завершилась с ошибкой, весь build помечается как "failing". В общем все стандартно.
Дополнительно после каждой сборки сохраняются подробные логи, для "разбора полётов", есть возможность выгружать артефакты в стороннее хранилище, есть интеграции с несколькими внешними сервисами. В общем ничего экстраординарного, только необходимый минимум. Единственное чего не хватает, это сборок на windows, это тем более странно, что osx они поддержали.
Наверное проще это объяснить на примере. В качестве оного возьму мой последний проект rust-software-render, который я описывал в предыдущей статье. Для начала необходимо в корень проекта добавить конфиг для travis-ci - .travis.yml:
И в качестве финального шага, можно на страницу вашего readme добавить иконку с текущим статусом сборки.
Выше я затронул далеко не все возможности приложения, для расширения кругозора стоит почитать документацию.
Как же он работает? На каждый push в репозиторий, ваш проект ставится в очередь на сборку, до того момента, пока не появятся свободные ресурсы. Затем основываясь на конфигурационном файле travis-ci поднимает чистую виртуальную машину с предустановленными пакетами для указанного языка. Например для rust это будет компилятор rust и менеджер пакетов cargo. Заострю внимание на том, что состояние машины между сборками не сохраняется, она всегда будет "новой". Если нужны какие-то дополнительные пакеты, особые переменные окружения или другие настройки - это нужно указать в специальных секциях конфига. Дальше собственно выполняется сборка и прогон тестов для приложения. Если на этих этапах какая-либо команда завершилась с ошибкой, весь build помечается как "failing". В общем все стандартно.
Дополнительно после каждой сборки сохраняются подробные логи, для "разбора полётов", есть возможность выгружать артефакты в стороннее хранилище, есть интеграции с несколькими внешними сервисами. В общем ничего экстраординарного, только необходимый минимум. Единственное чего не хватает, это сборок на windows, это тем более странно, что osx они поддержали.
Наверное проще это объяснить на примере. В качестве оного возьму мой последний проект rust-software-render, который я описывал в предыдущей статье. Для начала необходимо в корень проекта добавить конфиг для travis-ci - .travis.yml:
language: rust sudo: required rust: - beta - nightly - stable os: - linux install: - sudo add-apt-repository ppa:team-xbmc/ppa -y - sudo apt-get update -q - sudo apt-get install libsdl2-dev before_script: - rustc -V - cargo -V script: - cargo build --release -v - cargo test -v notifications: email: recipients: - name@mail.com on_success: never on_failure: always
- Секция "language" - указывает на то, что я хочу использовать виртуальную машину с предустановленным окружением для rust. Существует поддержка ещё около 30 языков.
- Секция "sudo" - в данном случае я говорю, что в скрипте развёртывания я использую команды с sudo, если от них отказаться то travis-ci будет использовать инфраструктуру на основе docker, что, как они утверждают, будет быстрее, но там есть несколько досадных ограничений.
- Секция "rust" - задаёт массив версий rust на которых нужно прогонять сборку. Фактически на каждый push тест сборка будет запущена 3 раза.
- Секция "os" - задаёт массив операционных систем для сборки, можно было бы дополнительно указать osx, но меня больше интересует windows, который не поддерживается.
- Секция "install" - настройка окружения для вашего приложения, мне достаточно установки библиотеки "sdl2"
- Секция "before_script" - что делает, понятно из названия, я в ней вывожу версии rust и cargo, что бы потом по логам было проще понять причину сбоя.
- Секция "script" - собственно сборка и запуск тестов.
- Секция "notifications" - тут настроена нотификация о результатах сборки на email, вообще существует довольно много и других видов нотификаций.
И в качестве финального шага, можно на страницу вашего readme добавить иконку с текущим статусом сборки.
Выше я затронул далеко не все возможности приложения, для расширения кругозора стоит почитать документацию.