Создайте конвейер сборки с Travis CI

Создайте конвейер сборки с Travis CI

1. Вступление

В современной разработке программного обеспечения часто используется терминpipeline. Но что это?

Вообще говоря,a build pipeline is a set of automated steps that move code from development to production.

Конвейеры сборки отлично подходят для реализации непрерывных рабочих процессов интеграции программного обеспечения. Они позволяют намbuild smaller changes with greater frequency, чтобы быстрее находить ошибки и снижать их влияние.

В этом руководстве мы рассмотрим создание простого конвейера сборки с использованиемTravis CI.

2. Шаги в построении конвейера

Сборочный конвейер может состоять из множества разных шагов, но, как минимум, он должен включать:

  • Compiling code: в нашем случае это означает компиляцию исходного кода Java в файлы классов

  • Executing tests: например, запуск модульных тестов и, возможно, интеграционных тестов

  • Deploying artifacts: упаковка выполненного кода в артефакты, скажем, в файлыjar, и их развертывание

Если приложение использует разные технологии, тоadditional steps can be included in the build pipeline. Например, у нас может быть дополнительный шаг, который минимизирует файлы JavaScript или публикует обновленную документацию API.

3. Что такое Трэвис CI?

Для нашего примера конвейера сборки мы будем использоватьTravis CI, a cloud-based continuous integration tool.

Это имеет ряд особенностей, которые делают его отличным выбором для начала работы с конвейерами сборки:

  • Быстро интегрируется с любым общедоступным репозиторием GitHub

  • Поддерживает все основные языки программирования

  • Развертывание на нескольких разных облачных платформах

  • Предлагает множество инструментов для обмена сообщениями и оповещения

На высоком уровне он работает путем мониторинга репозитория GitHub на предмет новых коммитов.

Когда создается новый коммит, он выполняет шаги конвейера сборки, как определено в файле конфигурации (подробнее об этом ниже). Если какой-либо шаг не удался, конвейер завершается, и он уведомляет нас.

Из коробки Travis CI требует очень мало конфигурации. The only required configuration is specifying the programming language.

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

3.1. Бесплатные и платные версии

Важно знать, что Travis CI в настоящее время предлагает 2 предложения: бесплатную и платную версии.

Бесплатная версия, обозначенная доменным именем.org, предлагает полные возможностиfor any public GitHub repository. Нет ограничений на количество сборок или репозиториев, хотя существуют ограничения на ресурсы, когда работает ваш конвейер.

Платная версия, в которой используется доменное имя.com, требуется для частных репозиториев GitHub. Он также предлагает больше одновременных сборок и неограниченные минуты сборки по сравнению с бесплатным планом. Для первых 100 сборок существует бесплатная пробная версия для тестирования платной версии.

4. Создание конвейера сборки с помощью Travis CI

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

Все, что нам нужно сделать, это войти в Travis CI с нашей учетной записью GitHub и авторизовать его:

image

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

4.1. Настройка репозитория

Изначально все наши публичные репозитории считаются неактивными. Чтобы решить эту проблему,we need to enable our repository from the account settings page.

Здесь перечислены все наши общедоступные репозитории, а также кнопка переключения. Нажатие на кнопку-переключатель настроит Travis CI для запуска мониторинга этого репозитория на предмет новых коммитов, используя ветку по умолчаниюmaster:.

image

Обратите внимание, что в каждом репозитории также есть кнопкаSettings. Здесь мы можем настроить другое поведение конвейера:

  • Определите, какие события запускают конвейер (push-запросы, pull-запросы и т. Д.)

  • Установите переменные среды, которые передаются в конвейер

  • Автоматическая отмена сборок при запуске новых событий

Для этого урока настройки по умолчанию будут работать нормально. Позже мы увидим, как отменить некоторые действия по умолчанию.

4.2. Создание конфигурации Travis

Следующим шагом будет создание нового файла с именем.travis.yml в корневом каталоге нашего репозитория. Этот файл содержит всю информацию, необходимую для настройки конвейера. Without this file, the pipeline will not execute.

Для этого урока нам просто нужно включить минимальную конфигурацию, которая определяет язык программирования:

language: java

Это оно! Без предоставления дополнительной информации Travis CI выполнит простой конвейер, который:

  • Компилирует наш исходный код

  • Выполняет наши тесты

Как только мы зафиксируем файл.travis.yml, Трэвис начнет нашу первую сборку. Любая дальнейшая фиксация в ветвиmaster вызовет дополнительные сборки. Панель инструментов также позволяет нам вручную запускать конвейер в любое время, не требуя коммит или пулл-запрос.

5. Дополнительная конфигурация

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

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

5.1. Изменение команды сборки по умолчанию

Команда по умолчанию, используемая для создания проектов Maven:

mvn test -B

Мы можем изменить это на любую команду, установив директивуscript в.travis.yml:

script: mvn package -DskipTests

С помощью оператора&& можно объединить несколько команд в одну строкуscript.

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

In these cases, it’s recommended to place the build command in a stand-alone script и вызовите этот сценарий из файла конфигурации:

script: ./build.sh

5.2. Развертывание кода

Настройки сборки по умолчанию для проектов Java просто компилируют код и выполняют тесты. Получающиеся в результате артефакты (файлы .jar и т. Д.) Отбрасываются в конце конвейера, если только мы их не развернем.

Travis CI поддерживает множество известных сторонних сервисов. Артефакты можно копировать во многие популярные облачные системы хранения, такие как Amazon S3, Google Cloud Storage, Bintray и другие.

Он также можетdeploy code directly to most popular cloud computing platforms, например AWS, Google App Engine, Heroku и многие другие.

Ниже приведен пример конфигурации, показывающий, как мы можем выполнить развертывание в Heroku. Чтобы сгенерировать зашифрованные свойства, мы должны использоватьTravis CLI tool.

deploy:
  provider: heroku
  api_key:
    secure: "ENCRYPTED_API_KEY"

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

Например, мы могли бы написать сценарий оболочки, который безопасно копирует артефакты на частный FTP-сервер:

deploy:
  provider: script
  script: bash ./custom-deploy.sh

5.3. Управление тем, какие ветви запускают конвейер

По умолчанию конвейер будет выполняться для любой фиксацииmaster. Тем не менее, большинство крупных проектов используют некоторую форму git-ветвления для управления циклами разработки.

Travis CI supports both white and blacklisting of git branches, чтобы определить, какие коммиты должны запускать конвейер.

В качестве примера рассмотрим следующую конфигурацию:

branches:
  only:
  - release
  - stable
  except:
  - master
  - nightly

Это приведет к игнорированию коммитов в ветвяхmaster иnightly. Фиксации в ветвяхrelease иstable запустят конвейер. Обратите внимание, что директиваonly всегда имеет приоритет над директивойexcept.

Мы также можем использовать регулярные выражения для управления тем, какие ветви запускают конвейер:

branches:
  only:
  - /^development.*$/

Это запустит конвейер только для коммитов в ветвях, которые начинаются сdevelopment.

5.4. Пропуск определенных коммитов

We can use the git commit message to skip individual commits. Travis CI проверит сообщение на наличие следующих паттернов:

  • пропустить

  • пропустить

Где - любое из следующих значений:

  • ci

  • Трэвис

  • Трэвис Чи

  • Трэвис-CI

  • travisci

Если сообщение фиксации соответствует одному из этих шаблонов, конвейер не будет работать.

5.5. Использование разных сред сборки

Средой сборки по умолчанию для проектов Java является Ubuntu Linux. Конвейеры также могут выполняться в Mac OSX или Windows Server, добавив следующую конфигурацию в.travis.yml:

os: osx # can also be 'windows'

Даже с Linux есть 3 разных дистрибутива, из которых мы можем выбрать:

os: linux
  dist: xenial # other choices are 'trusty' or 'precise'

build platform documentation охватывает все доступные среды и их различия.

Просто помните, что если мы изменим платформу, нам также может потребоваться изменить любые пользовательские сценарииbuild илиdeploy для обеспечения совместимости. Есть несколько способов настройкиhandle multiple operating systems.

5.6. Использование разных версий JDK

Мы также можем протестировать конкретную версию JDK, установив следующую конфигурацию в файле.travis.yml:

jdk: oraclejdk8

Имейте в виду, что разные среды сборки, даже разные дистрибутивы Linux, могут иметь разные версии JDK. Обратитесь к документации для каждой среды, чтобы увидеть полный список версий JDK.

6. Матрицы сборки

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

Но одной из замечательных особенностей Travis CI является возможность создавать матрицу сборки. Это позволяет нам запускать несколько заданий для каждого коммита, используя разные значения для некоторых настроек, которые мы видели ранее.

Например, мы можем использовать матрицу сборки для запуска нашего конвейера как в Linux, так и в Mac OSX, или с обоими JDK 8 и 9.

There are two ways to create build matrices. Во-первых,we can provide an array of values для одной или нескольких конфигураций языка и среды, которые мы видели ранее. Например:

language: java
jdk:
  - openjdk8
  - openjdk9
os:
  - linux
  - osx

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

The second way to create a build matrix is to use the matrix.include directive. Это позволяет нам явно объявить, какие комбинации мы хотим запустить:

language: java
matrix:
  include:
  - jdk: openjdk8
    os: linux
  - jdk: openjdk9
    os: osx

Приведенный выше пример приведет к двум работам.

Еще раз, если мы строим на нескольких операционных системах, мы должны быть осторожны, чтобы наши сценарииbuild иdeployment работали во всех случаях. Сценарии оболочки не будут работать в Windows, например. Мы должны использовать соответствующие условные операторы для работы с различными операционными системами.

Естьmore options, которые обеспечивают более детальный контроль над тем, какие задания создавать и как обрабатывать отказы.

7. Заключение

В этой статье мы создали простой конвейер сборки с использованием Travis CI. Используя в основном готовую конфигурацию, мы создали конвейер, который создает код и запускает тесты.

Мы также увидели небольшой пример того, как настраивается Travis CI. Он работает с различными языками программирования и сторонними облачными платформами. Единственным недостатком является то, что в настоящее время он работает только с репозиториями GitHub.