Wir haben ein benutzerdefiniertes Plugin für Hudson, das die Ausgabe eines Builds auf einen entfernten Rechner hochlädt. Wir haben gerade begonnen, einen Hudson-Slave zu verwenden, um den Durchsatz von Builds zu verbessern, aber die Projekte, die das benutzerdefinierte Plugin verwenden, können nicht mit FileNotFoundExceptions bereitgestellt werden.
Von dem, was wir sehen können, wird das Plugin auf dem Master ausgeführt, selbst wenn der Build auf dem Slave stattfindet. Die Datei, die nicht gefunden wird, existiert auf dem Slave, aber nicht auf dem Master.
Fragen:
Erstens, geh Jenkins ! ;)
Zweitens haben Sie Recht - der Code wird auf dem Master ausgeführt. Dies ist das Standardverhalten eines Hudson / Jenkins-Plugins.
Wenn Sie Code auf einem Remote-Knoten ausführen möchten, müssen Sie einen Verweis auf die co_de% , z über die VirtualChannel
, die wahrscheinlich in die Hauptmethode Ihres Plugins übernommen wurde.
Der Code, der auf dem Remote-Knoten ausgeführt werden soll, sollte in einem Launcher
- Dies ist der Teil, der serialisierbar sein muss, da Jenkins ihn automatisch serialisieren, über seinen Kanal an den Knoten übergeben, ausführen und das Ergebnis zurückgeben wird.
Dies verbirgt auch die Unterscheidung zwischen Master und Slave - selbst wenn der Build tatsächlich auf dem Master läuft, wird der "Callable" -Code transparent auf dem richtigen Rechner laufen.
Zum Beispiel:
%Vor% Siehe auch Callable
und sehen Sie sich den Quelltext von andere Jenkins Plugins mit ähnlicher Funktionalität.
Ich würde empfehlen, dass Ihr Plugin ordnungsgemäß funktioniert, anstatt die Netzwerkfreigabe-Lösung zu verwenden ..:)
Tags und Links hudson hudson-plugins