2012-07-19 6 views
6

Ich versuche, ein Jenkins-System einzurichten, wo ein bestimmtes Programm auf einer Platine im Netzwerk ausgeführt werden muss, auf die über Telnet zugegriffen wird. Wir reden hier von Hunderten solcher Jobs, deshalb werden wir mehrere Boards einrichten. Daher muss jedem Job ein Board zugewiesen werden, aber der Haken ist, dass nur ein Job gleichzeitig ein bestimmtes Board haben kann, sonst schlägt das Programm fehl.Jenkins - Verwalten eines Pools von Ressourcen

Die Lösung, die ich gerade habe, ist eine Master-Slave-Einrichtung, bei der ich mich mit der gleichen Maschine über SSH verbinde (also einen Master und mehrere Slaves auf demselben Rechner). Jeder der Slave-Knoten hat dann eine Bezeichnung für die IP-Adresse, zu der das Programm telnet muss. Dies funktioniert schedulingstechnisch, aber es kann Probleme verursachen, da alle Knoten SSH mit demselben Computer verbinden. Eine Verbindung mit den Boards per SSH ist nicht möglich.

Gibt es eine Möglichkeit, die gleiche Funktionalität wie oben zu erhalten, aber dann ohne SSH, um eine Verbindung zu demselben Rechner herzustellen? Also möchte ich im Grunde sagen können: Wir haben n verfügbare Maschinen, wenn ein Auftrag eintrifft, geben Sie ihm einen dieser Maschinen und übergeben Sie ihm ein Etikett, das zu diesem Rechner gehört (in diesem Fall seine IP-Adresse); Jetzt sind n-1 Maschinen übrig. Gegenseitiger Ausschluss kommt zwar nahe, erlaubt jedoch nicht die oben genannte Funktionalität, und Jobs, die auf eine Ressource warten, beanspruchen einen der Executoren eines Knotens.

Vielen Dank!

+0

Ähnlich: http://stackoverflow.com/questions/10950439/resource-mange-external-nodes-in-jenkins-for-tests –

Antwort

0

Vielleicht sollten Sie sich das Lock and Latches Plugin ansehen. Sie können eine Ressource mit diesem Plugin sperren, wobei Sie nur den Job benötigen, um die gewünschte Karte zu sperren.

https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin

+1

Danke für die Antwort. Ich denke, das wird nicht funktionieren, hauptsächlich, weil ich möchte, dass Jenkins die Jobs dynamisch über die Boards verteilt, also einen Job einem Knoten zuweist, wenn einer verfügbar ist. Ich glaube, dass dieses Plugin so etwas nicht macht und Sie vorher festlegen müssen, auf welchem ​​Board es laufen soll. –

4

Ich weiß, Ihr Problem wahrscheinlich schon vor Jahren gelöst, aber falls jemand anderes für die Antwort sucht und läuft in diesen.

Sie können "Lockable Ressourcen" Plugin verwenden und legen Sie die IP-Adresse als Name der Ressource und verwenden Sie die Bezeichnung wie test-board-ip.Es ist einfach und einfach zu bedienen.

Eine weitere Möglichkeit ist das Plugin "External Resources Dispatcher". Es bietet ein bisschen mehr Möglichkeiten, aber es hat einen Fehler, der dazu führt, dass es manchmal hängt. Und es scheint, dass es keine Wartung mehr gibt (letzte Updates von 2013).