Управление Jenkins с помощью Rancher в Ubuntu 14.04

Продуктивная непрерывная интеграция (continuous integration,CI) является основой успешной разработки любого приложения.

Технология непрерывной интеграции делает процесс интеграции менее трудоёмким и более предсказуемым. Однако добавление сборок для pull запросов, автоматического развертывания, приемочных испытаний, загрузки контента, а также множество других задач может быстро истощить ресурсы машины; особенно это касается этапа перехода в производство, когда случается много коммитов и развертываний.

Данное руководство поможет построить распределенную систему Docker, предназначенную для создания и запуска образов Jenkins и оркестровки кластера при помощи Rancher. Jenkins – это одно из самых популярных открытых средств реализации непрерывной интеграции. Docker автоматизирует развёртывание приложений в контейнерах, а Rancher предоставляет полноценную платформу для управления Docker в производстве.

Эта статья охватывает только облачное развёртывание Jenkins. В качестве альтернативы можно использовать локальный master-сервер Jenkins и облачный сервер для обеспечения переполнения. В таком окружении Docker и Rancher особенно продуктивны: Docker может предоставить практически идентичные окружения на нескольких нодах, а Rancher позволяет соединять ноды различных облачных провайдеров или локальных серверов в единый кластер с собственной VPN.

Требования

Данное руководство выполняется на трёх серверах:

  1. Сервер Rancher (вместо IP-адреса в руководстве используется your_rancher_server_ip)
  2. Нода Rancher для master-сервера Jenkins (вместо IP-адреса – your_jenkins_master_ip).
  3. Нода Rancher для slave-сервера Jenkins (вместо IP-адреса – your_jenkins_slave_ip).

Примечание: Замените условные адреса в командах руководства IP-адресами соответствующих серверов.

1: Регистрация нод Rancher

Чтобы запустить развёртывание Jenkins, нужно зарегистрировать вычислительные ноды.

Примечание: Вычислительные ноды Rancher можно зарегистрировать без токена, если на сервере не настроена аутентификация. Однако это крайне не рекомендуется, поскольку это подвергает сервер опасности. Потому при регистрации все агенты должны предоставить специальный токен, чтобы добавиться в кластер.

В интерфейсе Rancher кликните Hosts (в левом меню) и Register a new host. Скопируйте команду Docker run, которая появится во всплывающем окне. Вернитесь в панель управления сервером и создайте два новых сервера (master-сервер и slave-сервер Jenkins) и установите Docker.

В качестве данных о пользователе на этих серверах добавьте #!/bin/bash и скопированную команду Docker run.

#!/bin/bash
sudo docker run -d --privileged
-v /var/run/docker.sock:/var/run/docker.sock rancher/agent
http://your_rancher_server_ip:8080/v1/scripts/A2DE06535002ECCAAFCD:1426622400000:iniUzPiTnjyFaXs9lCKauvoZOMQ

Примечание: Длинная последовательность цифр и букв в конце команды должна отличаться! Прежде чем нажать Register a new host, вы должны выбрать свой проект.

Через несколько минут обе ноды появятся в интерфейсе Rancher. Чтобы просмотреть ноды, откройте RancherAgent.

2: Запуск master-сервера Jenkins

Теперь можно запустить master-ноду Jenkins при помощи официального образа Jenkins.

Чтобы запустить контейнер, нажмите Add Container рядом с вычислительной нодой, которую нужно использовать для запуска, а затем добавьте следующие опции:

  • В поле Name введите имя Master.
  • В поле Select Image введите название исходного образа, jenkins.

Затем нажмите + рядом с Port Map. В предложенные поля введите номер пора (8080), в качестве протокола оставьте TCP. Теперь у вас будет доступ к веб-интерфейсу Jenkins. Снова нажмите + и добавьте в оба поля порт 50000, оставив протокол TCP. Теперь slave-сервер сможет подключиться к серверу master.

Кликните Advanced Options и откройте вкладку Volumes. Кликните + рядом с Volumes и введите в поле /var/jenkins_home. Это задаст домашний каталог Jenkins. Теперь вы можете сохранять настройки при перезагрузке контейнера, а также создавать резервные копии контейнера с использованием томов из другого контейнера.

Чтобы запустить контейнер Jenkins, нажмите Create.

3: Запуск slave-сервера Jenkins

Чтобы получить доступ к интерфейсу Jenkins, откройте ссылку:

http://your_jenkins_master_ip:8080

При помощи интерфейса создайте конфигурации ноды; откройте в левом меню Manage Jenkins → Manage Nodes → New Node. В появившемся меню введите в поле Node name имя slave-сервера, выберите тип Dumb Slave и нажмите OK.

Интерфейс откроет страницу с деталями этой ноды. В поле Remote root directory введите /var/jenkins. В меню Launch method выберите Launch slave agents via Java Web Start. Также можно обновить параметр # of executors, увеличив стандартное значение (1). Это позволит программе запускать больше параллельных сборок на этом slave-сервере. Остальные параметры можно оставить по умолчанию. Нажмите Save.

Теперь можно запустить контейнер slave. В интерфейсе Rancher нажмите Add Container и заполните следующие поля:

  • В поле Name укажите имя Slave 1.
  • В поле Select Image укажите usman/jenkins-slave.

Затем нажмите Advanced Options и откройте вкладку Command. Нажмите + рядом с Environment Vars и добавьте запись, указав в поле Name MASTER_HOST, и your_jenkins_master_ip в Value. Снова нажмите + и добавьте новую запись: укажите в поле Name NODE, а в поле Value – имя slave-сервера Jenkins, указанное ранее в поле New Node.

Откройте вкладку Volumes. Нажмите + рядом с Volumes и укажите /var/jenkins в предложенном поле.

Нажмите Create.

Контейнер jenkins-slave загрузит jar-файл с master-сервера и запустит slave-сервер Jenkins. После запуска ноды slave обновите страницу Manage Nodes и вы увидите текущее состояние новой ноды.

Заключение

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

Tags: , , ,

Добавить комментарий