Вы написали код. Что теперь?

Здорово! Вы создали репозиторий GitHub, добавили код и, возможно, даже провели несколько тестов. Но разве не было бы хорошо, если бы существовала служба, которая собирала, тестировала и развертывала репозиторий с открытым исходным кодом? Вы, мой друг, ищете непрерывную интеграцию, а TravisCI предоставляет отличный бесплатный сервис для репозиториев GitHub с открытым исходным кодом.

Чтобы настроить репо для TravisCI, вам сначала понадобится .travis.yml файл. Обычно файл .travis.yml может выглядеть примерно так:

И для большинства случаев это, вероятно, нормально; однако ни вы, ни я - «в большинстве случаев». Мы хотим улучшить наши сборки TravisCI и сделать так, чтобы они работали за нас автоматически.

1. Включите Docker.

Поработав некоторое время с TravisCI, я заметил, что некоторые системные пакеты очень старые. По умолчанию TravisCI использует Ubuntu 12.04 LTS (или 14.04), а последние версии GCC, CMake и Boost недоступны.

И да, я мог бы использовать PPA, но давайте будем честными: PPA воняют.

К счастью, поскольку виртуализация развивается как все более мощный инструмент, мы можем использовать его для контейнеризации нашего проекта.

Этот Dockerfile.dev файл содержит инструкции по установке кода построения зависимостей и созданию документации. В этом посте я не буду вдаваться в подробности о Docker, но для наших случаев использования Docker отлично подходит, потому что он абстрагирует ОС хоста, позволяя нам запускать все, что мы хотим, как мы хотим.

В этом файле Docker мы говорим Docker начать с образа Alpine Linux. Alpine - чрезвычайно минималистичный дистрибутив Linux, поэтому он отлично подходит для использования в качестве базы образов Docker.

Затем мы устанавливаем необходимые инструменты с помощью apk-менеджера пакетов Alpine. Вы можете легко искать различные программы и их версии здесь. В нашем случае мы будем использовать cmake и make для сборки нашего проекта, doxygen для создания документации из нашего кода, gtest в качестве среды тестирования C ++ и boost для некоторых дополнительных утилит C ++.

Чтобы использовать Docker в нашем .travis.yml, нам нужно сначала добавить sudo: required вверху и сообщить Трэвису, что мы хотим использовать Docker с:

services:
  - docker

В разделе before_script мы построим наш образ. В Docker создание образа выполняет все RUN команды. Команда сборки может выглядеть следующим образом.

docker build --tag development -f Dockerfile.dev

В разделе script мы запускаем тесты для нашего изображения. Мы хотим добавить флаг --rm, чтобы контейнер удалялся после выполнения скрипта, и указать в конце фактическую тестовую команду, если ваша тестовая команда отличается от инструкции CMD в Dockerfile. Вот пример:

docker run --rm development build/tests

Развертывание на страницах GitHub

Теперь, когда мы создали наши документы, мы хотим отправить их куда-нибудь, к чему мы можем получить доступ. Мы можем сделать это с помощью раздела Трэвиса deploy:

deploy:
  provider: pages
  skip_cleanup: true
  github_token: $GITHUB_TOKEN
  local_dir: docs
  on:
    branch: stable

Здесь мы говорим его развернуть на страницах GitHub. Обычно после запуска скриптов Трэвис полностью разрушает и удаляет среду. Чтобы предотвратить это, мы должны добавить часть skip_cleanup: true. Также не рекомендуется добавлять токены непосредственно в файл .travis.yml, поэтому вместо этого установите для вашего токена GitHub переменную среды, которую можно настроить в веб-интерфейсе Travis. Мы говорим процессу развертывания использовать папку docs.

Наконец, по крайней мере, в этом примере в ветке master может быть нестабильный код, поэтому мы не хотим развертывать общедоступную документацию из этой ветки. Вместо этого создайте стабильную ветку и разверните оттуда документы. Таким образом, ваши документы будут развернуты только тогда, когда мастер будет переведен в стабильную ветку.

Конечный продукт