Каков рекомендуемый способ балансировки нагрузки при настройке Jenkins с несколькими ведущими / несколькими ведомыми устройствами

Я хотел бы настроить ферму сборки / выполнения Jenkins N-master x M-slave.

Я хотел бы разрешить нескольким проектам запускать собственный главный сервер Jenkins, каждый из которых распределяет свои сборки в один и тот же пул подчиненных серверов Jenkins.

Таким образом, каждое ведомое устройство будет иметь отдельно настроенные рабочие области и так далее.

Каков рекомендуемый способ балансировки нагрузки между ведомыми устройствами? то есть, если мастер 1 запустил задание на ведомом 1, а мастер 2 приходит для выполнения задания, я бы хотел, чтобы он выбрал ведомое устройство, отличное от 1, для выполнения этого задания.

Каков рекомендуемый способ настройки?


person liamf    schedule 05.04.2011    source источник


Ответы (1)


Есть несколько способов сделать это. Вы можете создать задание для запуска на любом открытом исполнителе. Исполнитель - это то, над чем Дженкинс выполняет задания. Предполагая, что у каждого экземпляра Jenkins есть один исполнитель, если один мастер выполняет что-то на Slave1, он затем займет одного исполнителя. Таким образом, когда мастер-два пытается что-то запустить, он запускает это на Slave2 (или любом другом доступном исполнителе), поскольку Slave1 занят.

Это зависит от двух вещей:

  1. что все задания могут выполняться на любой доступной машине / исполнителе
  2. что у каждого Дженкинса есть один исполнитель.

Jenkins действительно управляет нагрузкой как можно лучше, но я бы рекомендовал иметь одного исполнителя для каждого ядра, доступного на машине, чтобы ваши машины не были перегружены, и пусть Jenkins справится с тем, где они на самом деле запущены. Вы даже можете привязать задания к определенным машинам.

Удачи.

person myusuf3    schedule 05.04.2011
comment
Звучит разумно ... мы настраиваем начальный пул из 4 или 5 ведомых машин, которых будет достаточно для тестирования этого подхода, и я сообщу, когда он будет проверен. Спасибо! - person liamf; 07.04.2011
comment
Вы также можете добиться этого, указав, где можно запускать проекты. т.е. Salve A и B - это машины Unix (помеченные именем «Unix»), а C и D - машины Windows (помеченные именем «Windows»). В своем проекте вы можете обеспечить, чтобы он строился только на подчиненных устройствах Unix, что ограничило бы его A и B. - person puug; 07.04.2011
comment
@puug, это правда, но я считаю, что он хочет, чтобы работа была более гибкой. - person myusuf3; 08.04.2011
comment
верный. Я не хочу, чтобы проекты заботились о том, где выполняются их задания, у нас просто будет постоянный пул практически идентичных подчиненных, но вместо одного мастера, и все будут отправлять задания по нему, это будет проще по нескольким причинам. чтобы позволить отдельным проектам иметь свой собственный главный сервер jenkins, и просто (один раз) настроить его так, чтобы он указывал на все подчиненные машины. Некоторые краткие сетевые проблемы мешают нам протестировать эту установку ... все еще работаем над первыми ... - person liamf; 10.04.2011
comment
Вы объяснили, что можно сделать, но не указали, как это сделать на самом деле ... - person Garen; 05.01.2012
comment
@Garen wiki.jenkins-ci.org/display/JENKINS/ - person myusuf3; 29.01.2012