Сначала мы собирали наш проект только для CentOS 6. Далее добавилась поддержка CentOS 5, и оказалось что зависимости от конкретных версий библиотек не дают работать тем же бинарникам под разными версиями CentOS, понадобилась сборка разных RPM. Это было решено добавлением в jenkins ноды с CentOS 5, которой служила виртуалка на VirtualBox. Потом добавилась поддержка Suse, а потом и Debian.
Количество оперативной памяти не резиновое, а использование виртуальных машин только для сборки это явный оверхед, и было решено переписать скрипты используя Docker.
Используя Jenkins для непрерывной интеграции можно подключить ноды с нужными операционками и назначить задачи на них, тут есть несколько вариантов:
- Арендовать инстансы/компьютеры и использовать их как ноды
- Использовать стандартную виртуализацию (гипервизор)
- Контейнеры (lxc, jail etc)
- Для сборки проекта запускается собственно скрипт сборки, и больше ничего. Тогда как при использовании виртуальной машины будут запущены все системные процессы и демоны, что отъедает ресурсы хоста.
- «Дешевое» создание большого количества независимых клонов машин — иногда для сборки проекта нужна изолированная среда для сборки.
Docker как нода в jenkins
Для jenkins-слейва нам нужны:- Java
- Точка входа — ssh
- Инструменты для сборки
Для сборки машины Docker предлагает использовать Dockerfile-файлы с инструкциями по сборке машины.
В этом репозитории: https://github.com/antigluk/docker-jenkins-slave сейчас доступны правила сборки для
- CentOS 5
- CentOS 6
- Suse 12
- Debian 6
Сборка и использование
Предполагается, что у вас установлен Docker и Jenkins1) Установите в Jenkins Swarm Plugin (он позволяет слейвам добавляться в Jenkins автоматически используя API)
2) $ git clone git@github.com:antigluk/docker-jenkins-slave.git; cd docker-jenkins-slave 3) Перейдите в папку с правилами для нужной системы $ cd centos6 4) $ sudo bash build.shКогда соберется образ, вы сможете добавлять сколько угодно нод данного типа:
sudo bash add_slave.sh SlaveNameПосле выполнения этой команды вы должны увидеть новую ноду на Jenkins-e. Теперь, для использования новой ноды достаточно указать в тегах для сборки нужной задачи «docker-tagname" — название тега это название системы с полной версией, список тегов можно посмотреть на специальной странице в вики
Пост был опубликован на Хабрахабре http://habrahabr.ru/post/200244/
Комментариев нет
Отправить комментарий