Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins

в 6:00, , рубрики: circleci, continuous delivery, continuous integration, devops, Jenkins, travis, Блог компании Southbridge, метки:

Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins - 1

Под катом вы найдете перевод статьи ознакомительного характера, в которой сравниваются три системы непрерывной интеграции: CircleCI, Travis CI и Jenkins.

Определение и назначение CI

Непрерывная интеграция (CI, Continuous Integration) — это практика разработки программного обеспечения, при которой изменения кода с высокой частотой интегрируются в общий репозиторий и проверяются с помощью автоматической сборки.

Непрерывная интеграция нацелена на ускорение и облегчение процесса выявления проблем, возникающих в процессе разработки программного обеспечения. При регулярной интеграции изменений единовременный объем проверок уменьшается. В результате на отладку тратится меньше времени, которое можно перераспределить на добавление новых функций. Также возможно добавить проверку стиля кода, цикломатической сложности (чем ниже сложность, тем легче тестировать) и другие виды контроля. Это упрощает рецензирование кода (code review), экономит время и улучшает качество кода.

Как это работает

Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins - 2

  • Разработчики проверяют код локально на своих компьютерах.
  • Затем изменения отправляются в общий репозиторий.
  • Репозиторий отправляет запрос (webhook) системе CI.
  • CI-сервер запускает задание (тесты, покрытие, проверку синтаксиса и т. д.).
  • CI-сервер сохраняет артефакты и выпускает релиз для тестирования.
  • В случае возникновения ошибок сборки или тестирования CI-сервер оповещает команду.
  • Команда исправляет проблему.

CircleCI vs Travis CI vs Jenkins

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

CircleCI

Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins - 3

Функции:

  • CircleCI — это облачная система, для которой не нужно настраивать отдельный сервер и которую не придется администрировать. Однако существует и локальная версия, которую вы можете развернуть в частном облаке.
  • Даже для коммерческого использования существует бесплатная версия.
  • С помощью REST API можно получить доступ к проектам, сборкам и артефактам. Результатом сборки является артефакт или группа артефактов. Артефактом могут быть скомпилированное приложение или исполняемые файлы (например, APK для Android) или метаданные (например, информация об удачно завершившемся тестировании).
  • CircleCI кэширует сторонние зависимости, что позволяет избежать постоянной установки необходимых окружений.
  • Существует возможность подключения к контейнеру по SSH. Это может потребоваться, если возникнут какие-то проблемы.
  • CircleCI — полностью готовое решение, требующее минимальной настройки.

CircleCI совместима с:

  • Python, Node.js, Ruby, Java, Go и т. д.;
  • Ubuntu (12.04, 14.04), Mac OS X (платные аккаунты);
  • Github, Bitbucket;
  • AWS, Azure, Heroku, Docker, выделенный сервер;
  • Jira, HipChat, Slack.

Достоинства CircleCI:

  • легкое и быстрое начало работы;
  • бесплатная версия для коммерческого использования;
  • небольшие и легко читаемые файлы конфигурации в формате YAML;
  • отсутствие необходимости в выделенном сервере CircleCI.

Недостатки CircleCI:

  • CircleCI в бесплатной версии поддерживает только Ubuntu 12.04 и 14.04. Для использования MacOS придется заплатить;
  • несмотря на то что CircleCI может работать с любыми языками программирования, из коробки поддерживаются только Go (Golang), Haskell, Java, PHP, Python, Ruby/Rails, Scala;
  • при желании подстроить систему под себя в некоторых случаях могут возникнуть проблемы, и тогда для достижения цели понадобится стороннее программное обеспечение.

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

Travis CI

Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins - 4

Travis CI и CircleCI очень похожи

Обе системы:

  • используют файлы конфигурации в формате YAML;
  • развернуты в облаке;
  • поддерживают Docker для запуска тестов.

Что есть в TravisCI и нет в CircleCI?

  • Запуск тестов одновременно под Linux и Mac OS X.
  • Поддержка большего количества языков «из коробки»:
    Android, C, C#, C++, Clojure, Crystal, D, Dart, Erlang, Elixir, F#, Go, Groovy, Haskell, Haxe, Java, JavaScript (with Node.js), Julia, Objective-C, Perl, Perl6, PHP, Python, R, Ruby, Rust, Scala, Smalltalk, Visual Basic.
  • Поддержка build matrix.

Build matrix

language: python  
python:  
  - "2.7"
  - "3.4"
  - "3.5"
env:  
  - DJANGO='django>=1.8,<1.9'
  - DJANGO='django>=1.9,<1.10'
  - DJANGO='django>=1.10,<1.11'
  - DJANGO='https://github.com/django/django/archive/master.tar.gz'
matrix:  
  allow_failures:
    - env: DJANGO='https://github.com/django/django/archive/master.tar.gz'

Build matrix — это инструмент, который дает возможность выполнять тесты, используя разные версии языков и пакетов. Он обладает богатыми возможностями по настройке. Например, при неудачных сборках в некоторых окружениях система может выдать предупреждение, но сборка целиком не будет считаться неудачной (это удобно при использовании dev-версий пакетов).

TOX

Если вы предпочитаете какую-либо другую CI-платформу, то Build Matrix можно создать с помощью Tox.

[tox]
envlist = py{27,34,35}-django{18,19,110,master}

[testenv]
deps =  
    py{27,34,35}: -rrequirements/test.txt
    django18: Django>=1.8,<1.9
    django19: Django>=1.9,<1.10
    django110: Django>=1.10,<1.11
    djangomaster: https://github.com/django/django/archive/master.tar.gz
commands = ./runtests.py

[testenv:py27-djangomaster]
ignore_outcome = True

Tox — это универсальный консольный инструмент по управлению пакетами и их тестированию в virtualenv. Его можно установить с помощью pip install tox или easy_install tox.

Достоинства Travis CI:

  • build matrix «из коробки»;
  • быстрый старт;
  • небольшие и легко читаемые файлы конфигурации в формате YAML;
  • бесплатная версия для opensource-проектов;
  • отсутствие необходимости в выделенном сервере.

Недостатки Travis CI:

  • по сравнению с CircleCI цены выше, нет бесплатной версии для коммерческого использования;
  • ограниченные возможности по настройке (для некоторых вещей может потребоваться сторонний софт).

Jenkins

Непрерывная интеграция: CircleCI vs Travis CI vs Jenkins - 5

Возможности:

  • Jenkins — это автономное приложение на Java, которое может работать под Windows, Mac OS X и другими unix-подобными операционными системами.
  • В Update Center можно найти сотни плагинов, поэтому Jenkins интегрируется практически с любым инструментом, относящимся к непрерывной интеграции и непрерывной поставке (continuous delivery).
  • Возможности Jenkins могут быть практически неограниченно расширены благодаря системе подключения плагинов.
  • Предусмотрены различные режимы: Freestyle project, Pipeline, External Job, Multi-configuration project, Folder, GitHub Organization, Multibranch Pipeline.
  • Jenkins Pipeline — это набор плагинов, поддерживающих создание и интеграцию в Jenkins цепочек непрерывной поставки. Pipeline предоставляет расширяемый набор инструментов по моделированию цепочек поставки типа "as code" различной степени сложности с помощью Pipeline DSL.
  • Позволяет запускать сборки с различными условиями.
  • Jenkins может работать с Libvirt, Kubernetes, Docker и др.
  • Используя REST API, можно контролировать количество получаемых данных, получать/обновлять config.xml, удалять задания (job), получать все сборки, получать/обновлять описание задания, выполнять сборку, включать/отключать задания.

Достоинства Jenkins:

  • цена (он бесплатен);
  • возможности по настройке;
  • система плагинов;
  • полный контроль над системой.

Недостатки Jenkins:

  • требуется выделенный сервер (или несколько серверов), что влечет за собой дополнительные расходы на сам сервер, DevOps и т. д.;
  • на настройку необходимо время.

Заключение

Какую систему CI выбрать? Это зависит от ваших потребностей и планируемого способа использования этого инструмента.

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

Travis CI рекомендуется в первую очередь для open-source проектов, которые необходимо тестировать в различных окружениях.

Jenkins я бы посоветовал для больших проектов, при работе над которыми потребуется серьезная настройка системы (в случае Jenkins выполняется с помощью плагинов). В Jenkins можно изменить практически что угодно, но на это потребуется время. Если вы хотите побыстрее запустить CI-цепочку, Jenkins может не подойти.

Ссылки:

  1. Оригинал: Continuous Integration. CircleCI vs Travis CI vs Jenkins.

Автор: olemskoi

Источник

Поделиться

* - обязательные к заполнению поля