2014-07-06 7 views
7

Ich versuche Jenkins für eine große Organisation zu skalieren. Gibt es eine Möglichkeit, mehrere Jenkins-Master einen Slave-Pool teilen zu lassen? Zum Beispiel, wenn ich 200 Jenkins Masters hatte und ich möchte, dass sie denselben Satz von 50 Linux-Slaves teilen.Mehrere Jenkins Master verwenden einen freigegebenen Slave-Pool

Das heißt, wenn jeder Slave nur einen Executor hat, wenn Master A einen Job an den Slave-Pool übermittelt und dieser an Slave 1 läuft, würde Master B einen Job an den Slave-Pool übergeben einer der anderen freien Slaves, da Slave 1 bereits besetzt ist.

Ich weiß, mehrere Master könnten einen einzigen Slave teilen, wenn ich den Slave so konfiguriert habe, dass er für jeden Master einen neuen Arbeitsbereich und einen neuen Executor hat. Allerdings möchte ich in der Lage sein, den Slave einmal einzustellen, anstatt für jeden Master ein Slave.jar auf dem Slave laufen zu lassen.

Cloudbees Op Center scheint diese Funktionalität zu bieten, aber auf der Suche nach einer Möglichkeit, dies mit der Open Source-Version zu tun. Wenn nicht, wie schwer wäre es Ihrer Meinung nach, Jenkins um diese Funktionalität zu erweitern? Ich habe Java-Entwicklungserfahrung und habe ein wenig Arbeit mit Jenkins-Plugin-Entwicklung gemacht.

Danke,

Antwort

8

Wie Sie es ist nicht schwer zu teilen Sklaven zwischen Meister, nur Setup mehrere Arbeitsbereiche und jeden Master wird installieren habe festgestellt, es eigene Slave-Glas ist. Der Trick besteht darin, Ressourcen ordnungsgemäß zu teilen.

Ein solcher Ressourcenmanager ist Apache Mesos. Eine Jenkins Mesos plugin existiert, die das Erstellen von Slaves in einem verwalteten Cluster ermöglicht.

Dieser Ansatz ist sehr neu und Ebay haben gebloggt, wie sie ihre Jenkins Setup entwickelt haben Mesos zu verwenden:

Hoffnung, das hilft.

+0

Danke dafür sieht das sehr interessant aus. Ich habe noch nicht so viel gegraben, aber das scheint definitiv mit einer Menge von dem übereinzustimmen, was wir tun wollen. Werde sich weiter damit beschäftigen, danke nochmal. – mpstack

+0

@ mark-oconnor Können Sie nach zwei weiteren Jahren bestätigen, dass der Mesos-Ansatz immer noch funktioniert und in der Produktion gut skaliert? Irgendwelche Dinge, um die du dich sorgen musst? – sorin

+0

@sorin Zwei Jahre ist ein Leben in der Technologie :-) Heute betreibe ich Jenkins als Container auf Kubernetes, mit dem Kubernetes-Plugin, um Slave-Jobs zu betreiben. –

2

Es gibt eine Gearman Plugin, die von Open Stack entwickelt wurde, um die gemeinsame Nutzung von Slaves durch mehrere Master zu ermöglichen.

+2

Leider bietet es einen riesigen Overhead und unser Jenkins-Master mit ~ 2000 Jobs und 32 Slaves reagierte nicht mehr, als wir das Plugin angeschaltet haben. Es wird auch gesagt, dass es nicht mit Matrix-Projekten funktioniert. –

0

Wenn ich es wäre, würde ich alle Master mit einem Cloud-Plugin für Slaves einrichten. Zum Beispiel könnten Sie die kubernetes plugin oder die nomad plugin installieren und alle Master mit dem gleichen Kubernetes oder Nomad-Cluster verbinden. oder würde die Ressourcenverwaltung übernehmen, und die Master würden nur Jobs an einen gemeinsamen Ressourcenpool senden. Dieses Konzept kann leicht auf andere Cloud-Anbieter wie AWS angewendet werden, aber IMHO, wenn Sie nur einen On-Prem-Pool von Ressourcen für Ihre Jenkins-Master von Grund auf einrichten möchten, ist Nomad die einfachste Option.