2 июня 2013 г. FreeBSD CI Jenkins

Поднимаем 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 -tf openjdk6-amd64-r316538.tar.xz
tar: Unrecognized archive format
tar: Error exit delayed from previous errors.
Посмотрел кто используется в качестве "tar", это был bsdtar:
readlink /usr/bin/tar
bsdtar
Решил попробовать gtar:
cd /usr/ports/archivers/gtar/
make install clean
Он смог открыть файл и я решил заменить bsdtar на gtar:
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 визуально активно развивается, много чего поменялось от последних версий, может вы просто давно смотрели?

P.S Пыха живет еще, уже года 2 там небыл))

Пишется новая пыха на django, думаю в октябре запустимся по новой

Оставьте свой комментарий

Markdown