Поднимаем Jenkins-ноды на FreeBSD
Jenkins CI используется в основном для непрерывного тестирования и деплоймента проекта. Однако его можно использовать вместо планировщика задач (crontab), при этом будут сохранены все логи происходящего, можно будет выдать пользователям доступ на задачи, которые они смогут запускать самостоятельно в веб-интерфейсе и конечно же, станет возможным выполнять задачи сразу на нескольких серверах, но для этого надо сначала настроить "Jenkins Nodes", что мы и будем делать в этой статье.
У меня две любимые серверные ОС, с которыми мне всегда приходится работать, это FreeBSD и Debian. Так как мы уже устанавливали Jenkins на Debian, то сегодня буду говорить о FreeBSD. Отличия будут только в установке самого Jenkins, в остальном настройка не отличаются.
В статье, выдуманный адрес slave-ноды с FreeBSD будет 203.0.113.44, а её hostname будет freebsd-server-1.
Установка Jenkins на FreeBSD
Я честно попробовал самостоятельно поставить Jenkins из портов:
cd /usr/ports/devel/jenkins/ make install clean
Но из-за Java у меня ничего не получилось, тогда я поручил это portupgrade и он справился:
cd /usr/ports/ports-mgmt/portupgrade make install clean portupgrade -NR jenkins
На одном из серверов (со старой FreeBSD), при установке зависимости /usr/ports/java/openjdk6, столкнулся с проблемой, что установленный tar не понимает архив "openjdk6-amd64-r316538.tar.xz":Посмотрел кто используется в качестве "tar", это был bsdtar:tar -tf openjdk6-amd64-r316538.tar.xz tar: Unrecognized archive format tar: Error exit delayed from previous errors.
Решил попробовать gtar:readlink /usr/bin/tar bsdtar
Он смог открыть файл и я решил заменить bsdtar на gtar:cd /usr/ports/archivers/gtar/ make install clean
После чего всё успешно заработало!tar -tf openjdk6-amd64-r316538.tar.xz ... list of some files ... ln -fs /usr/local/bin/gtar /usr/bin/tar
Генерация ключей для подключения к slave-ноде
Входим по ssh на сервер master-ноды (на которой установлен головной Jenkins) и генерируем ключи:
sudo su - jenkins ssh-keygen -t rsa ### Путь до файла ключа /var/lib/jenkins/.ssh/jenkins.freebsd-server-1
Добавляем ssh-конфиг, для этого открываем на редактирование "/var/lib/jenkins/.ssh/config":
Host freebsd-server-1 User jenkins Hostname 203.0.113.44 Port 22 IdentityFile ~/.ssh/jenkins.freebsd-server-1
Теперь скопируем публичный ключ на сервер freebsd-server-1
ssh-copy-id jenkins@freebsd-server-1
И пробуем соединиться:
ssh freebsd-server-1
Если соединились, то продолжаем дальше, иначе проверяйте свои настройки на корректность.
Добавление ноды в веб-интерфейсе Jenkins CI
Теперь войдите в веб-интерфейс master-ноды, далее "Manage Jenkins" > "Manage Nodes" > "New Node", введите имя ноды и нажмите OK. После этого, заполните следующие поля:
- # of executors - количество одновременных запусков задач на slave-ноде. Я обычно указываю "5";
- Remote FS root - путь на slave-ноде до рабочего каталога Jenkins. Я обычно указываю "/var/lib/jenkins/jenkins_fs";
- Launch method - выбираем "Launch slave agents on Unix machines via SSH":
- Host - укажите "203.0.113.44";
- Username - укажите "jenkins";
- Private Key File - приватный ключ, созданный нами ранее "/var/lib/jenkins/.ssh/jenkins.freebsd-server-1";
- Port - tcp-порт ssh-сервера, укажите "22".
В новых версиях Jenkins появились Credentials ("Manage Jenkins" > "Manage Credentials"), если у вас будет много нод со схожими ключами или паролями, то стоит создавать Credential и указывать его при создании ноды.
После настройки, запускаем агент Launch slave agent, он сам войдет на сервер по ssh, зальет файл "slave.jar" в каталог, указанный вами в "Remote FS root", и запустится.
Вы также можете указывать переменные окружения для вашей ноды в подразделе "Environment variables", далее при конфигурации задач вы можете использовать эти переменные в секции "Execute shell".
Плагин NodeLabel для параметризации задач
Для параметризации задач необходимо установить в Jenkins плагин NodeLabel Parameter Plugin. Переходим в "Manage Jenkins" > "Manage Plugins" > "Available" и выбираем "NodeLabel Parameter Plugin". Жмем на Install without restart. Во время установки плагинов выбираем "Restart Jenkins when installation is complete and no jobs are running".
После установки плагина и перезапуска Jenkins, вы сможете указывать в задачах ноды, на которых надо запускать задачу. Для этого, при настройке задачи активируйте чекбокс This build is parameterized, после чего нажмите на "Add Parameter" > "Node" и выберите из списка нод нужные в секциях Default nodes и Possible nodes.
Сохраните настройки. Теперь у вас всё должно работать, если нет - пишите комментарии с детальным описанием проблемы!
Комментарии
Михаил, а опыт с team city есть? Если есть, то какие впечатления. Jenkins ставил, но не понравилась работа в нем.
Нет, не пробовал, но конечно слышал.
Я пробовал в свое время Bamboo, тут упоминал http://adw0rd.com/2013/5/25/jenkins/
Не, ну с фряхой я не работаю, но на Lixun норм, только лицензию надо будет наверное купить)), если расширимся по серверам(агентам) teamCity. На Jenkins, что не мне лично, а админу который этим занимался не понравилось(я его мнение разделяю), так это процесс сборки нужных плагинов и т.п. К тому же плагины не всегда stable, ввиду некоммерческой вроде направленности Jenkins. + мне лично показалось некая ущербность во времени работы этой системы, и графики, хотя сервера достойные. Вообщем я перешел на Team City(это конечно не панацея, но и не реклама)), Спс.
P.S Пыха живет еще, уже года 2 там небыл))
Посмотрел ролик TeamCity http://www.jetbrains.com/teamcity/documentation/index.jsp и как-то не вдохновился, все это умеет Jenkins и выглядит последний проще.
Не знаю почему вашему админу не понравился процесс "сборки" плагинов, там же надо просто мышью ткнуть и все. Даже даунгрейды можно делать... Конечно в OpenSource среде всегда проблемы с качеством, но на себе я их не заметил.
Про графики видимо могу судить только если поставлю TeamCity, чтобы сравнивать, а на это не времени сейчас, так что так и не проверю :)
Вообще Jenkins визуально активно развивается, много чего поменялось от последних версий, может вы просто давно смотрели?
Пишется новая пыха на django, думаю в октябре запустимся по новой
Оставьте свой комментарий