Деплоим как профи: обзор инструментов для непрерывного развёртывания

Обложка поста

Непрерывная доставка (Continuous Delivery или просто CD) — подход к доставке программного обеспечения в продакшн, используемый IT-компаниями для предоставления пользовательских функций более быстрым, безопасным и непрерывным способом.

Идея заключается в создании надёжного и автоматизированного процесса, который доставляет программное обеспечение от разработчика к пользователю. Цель состоит в постоянном внесении изменений в продакшн. Такой подход известен как CD-пайплайн (конвейер непрерывной доставки).

Есть много программных инструментов, которые управляют этим потоком. Некоторые из них бесплатны, а за использование других придётся заплатить. Ниже кратко опишем 3 самых популярных.

Jenkins

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

Требуемое дополнительное ПО: Java Runtime Environment (JRE) версии 8.

Требования к «железу»:

  • минимальные — 256 Мбайт оперативной памяти, 1 Гбайт места на жёстком диске;
  • рекомендуемые — 1 Гбайт оперативной памяти, 50 Гбайт места на жёстком диске.

Архитектура основана на модели распределенных вычислений (Master/Slave).

master/slave

Jenkins Server — это базовая установка, отвечающая за хостинг GUI, организацию и выполнение сборки.

Jenkins Node/Slave/Build Server — устройства, которые могут быть настроены для выполнения функций по сборке от имени главного узла.

Пошаговая установка для Linux

Добавьте репозиторий Jenkins в систему.

cd /tmp && wget -q -O — https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
echo ‘deb https://pkg.jenkins.io/debian-stable binary/’ | sudo tee -a /etc/apt/sources.list.d/jenkins.list

Обновите репозиторий пакетов

sudo apt update

Установите Jenkins

sudo apt install jenkins

Теперь Jenkins должен быть доступен в вашей системе по умолчанию через порт 8080.

Перейдите в браузере по адресу http://localhost:8080. Вам будет предложено ввести начальный пароль пользователя с правами администратора. Найти его можно в файле /var/lib/jenkins/secrets/initialAdminPassword.

Теперь настройка выполнена и можно начать создавать свои потоки CI/CD. Вот несколько примеров того, как выглядит графический интерфейс.

Преимущества:

  • масштабируемость благодаря архитектуре Master/Slave;
  • включает в себя REST XML/JSON API;
  • подключение большого количества расширений, благодаря плагинам, которые добавляют множество функций;
  • большое и активное онлайн-сообщество, которое является хорошим ресурсом поддержки и примеров реализации.

Недостатки:

  • нет аналитики;
  • устаревший интерфейс по сравнению с другими инструментами.

TeamCity

Это коммерческий сервер для CI/CD от компании JetBrains. Он известен своей простой настройкой и красивым пользовательским интерфейсом. TeamCity имеет мощный набор функций прямо «из коробки» и растущую экосистему плагинов.

Требуемое дополнительное ПО: Java Runtime Environment (JRE) версии 8.

Имея относительно скромный сервер (3,2 Гбайта ОЗУ, двухъядерный процессор 3,2 ГГц, один жёсткий диск и сетевой адаптер с пропускной способностью 1 Гбайт), вы можете получить следующее:

  • 60 проектов и 300 конфигураций сборки;
  • более 300 сборок в день;
  • около 2 Мбайта log-журнала на сборку;
  • 50 агентов сборки (компоновки);
  • 50 пользователей web-версии и 30 пользователей IDE;
  • 100 возможных подключений внешней СКВ (в основном Perforce и Subversion с использованием проверки сервера), средний интервал проверки изменений составляет 120 секунд;
  • более 150 изменений в день;
  • база данных (MySQL) работает на той же машине;
  • серверный процесс TeamCity имеет следующие настройки JVM: -Xmx1100m -XX:MaxPermSize=120m.

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

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

Пошаговая установка для Linux

Используйте архив TeamCity<номер версии>.tar.gz, чтобы вручную установить TeamCity в комплекте с контейнером сервлета Tomcat. Архив можно скачать отсюда.

tar -xfz TeamCity<version number>.tar.gz
<TeamCity home>/bin /runAll.sh [start|stop]

При первом запуске TeamCity можно выбрать тип базы данных SQL, в которой будут храниться данные о сборке.

По умолчанию TeamCity работает на http://localhost:8111/ и имеет одного зарегистрированного агента сборки, который работает на той же машине.

Преимущества:

  • простота использования/настройки;
  • удобный интерфейс;
  • встроенные функции;
  • служба поддержки;
  • предлагает RESTful API;
  • хорошо задокументирован;
  • хорошая защищённость «из коробки»;
  • быстрая и простая установка/настройка.

Недостатки:

  • ограниченная интеграция;
  • является коммерческим инструментом;
  • маленькое сообщество, но оно растёт.

GoCD

Это ещё один инструмент CI/CD с открытым исходным кодом.

Требуемое ПО: Java Runtime Environment (JRE) версии 8.

Требования к «железу».

  • Сервер:
    • ОЗУ: минимум 1 Гбайт, рекомендуется 2 Гбайта;
    • Процессор: минимум 2 ядра, 2 ГГц;
    • Жёсткий диск: минимум 1 ГБ свободного места.
  • Агент:
    • ОЗУ: минимум 128 Мбайт, рекомендуется 256 Мбайт;
    • Процессор: минимум 2 ГГц.

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

Схема конвейера (Stages/Jobs/Tasks):

Пошаговая установка для Linux

echo “deb https://download.gocd.org /” | sudo tee /etc/apt/sources.list.d/gocd.list
curl https://download.gocd.org/GOCD-GPG-KEY.asc | sudo apt-key add -
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install -y openjdk-8-jre
apt-get install go-server
apt-get install go-agent
/etc/init.d/go-server [start|stop|status|restart]
/etc/init.d/go-agent [start|stop|status|restart]

По умолчанию GoCD работает на http://localhost:8153/.

Преимущества:

  • открытый исходный код;
  • простая установка;
  • подробная документация;
  • дружественный графический интерфейс;
  • Пошаговое отображение пути развёртывания в одном представлении;
  • хороший обзор структуры конвейера;
  • GoCD оптимизирует рабочий процесс CD в популярных облачных средах, таких как Kubernetes, Docker, AWS;
  • GoCD помогает устранять неисправности в конвейере, отслеживая каждое изменение от коммита до развертывания в режиме реального времени.

Недостатки:

  • вам нужно установить хотя бы одного агента;
  • нет главной консоли для отображения всех выполненных заданий;
  • в конфигурации конвейера вы должны создать по одной задаче для каждой команды, которую вы хотите выполнить;
  • чтобы установить плагин, нужно поместить файл .jar в <go-server-location>/plugins/external и перезапустить сервер;
  • небольшое сообщество.

Подведём итоги

Это всего лишь 3 примера, но есть и много других инструментов, связанных с CD. Выбор правильного для вас может быть непростым, поэтому обратить внимание стоит на важные аспекты, от которых и будет зависеть выбор.

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

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

Уделите больше внимание к особым требованиям вашего развёртывания. Их специфика может помочь сузить список подходящих инструментов и сэкономить время.

Перевод статьи «Continuous Deployment tools»