Во-первых, иди Дженкинс ! ;)
Во-вторых, вы правы & mdash; код выполняется на мастере. Это поведение по умолчанию для плагина Hudson / Jenkins.
Если вы хотите запустить код на удаленном узле, вам нужно получить ссылку на VirtualChannel
этого узла, например через Launcher
, который, вероятно, передается в основной метод вашего плагина.
Код для запуска на удаленном узле должен быть заключен в Callable
& mdash; эта часть должна быть сериализуемой, так как Jenkins будет автоматически сериализовать ее, передать ее узлу через его канал, выполнить и вернуть результат.
Это также скрывает различие между хозяином и рабом & mdash; даже если сборка фактически выполняется на главном сервере, вызываемый код будет прозрачно выполняться на правильном компьютере.
Например:
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher,
BuildListener listener) {
// This method is being run on the master...
// Define what should be run on the slave for this build
Callable<String, IOException> task = new Callable<String, IOException>() {
public String call() throws IOException {
// This code will run on the build slave
return InetAddress.getLocalHost().getHostName();
}
};
// Get a "channel" to the build machine and run the task there
String hostname = launcher.getChannel().call(task);
// Much success...
}
См. Также FileCallable
и ознакомьтесь с исходным кодом других плагинов Jenkins с аналогичными функциями.
Я бы порекомендовал заставить ваш плагин работать должным образом, а не использовать решение для общего доступа к сети ..:)