우선, go Jenkins! ;)
두 번째로 올바른 코드는 —이며 마스터에서 코드가 실행 중입니다. 이것은 Hudson/Jenkins 플러그인의 기본 동작입니다.
원격 노드에서 코드를 실행하려면 해당 노드의 VirtualChannel
에 대한 참조를 가져와야합니다. 이 플러그인은 플러그인의 기본 메소드로 전달 된 Launcher
을 통해 전달됩니다.
코드
이 젠킨스가 자동적으로이를에는 직렬화 그 채널을 통해 노드에 전달, 그 대가를 실행하므로, serialisable되어야하는 부분 인
Callable
— 캡슐화되어야 원격 노드에서 실행될 결과.
빌드가 실제로 마스터에서 실행중인 경우에도 이것은 — 마스터와 슬레이브의 구분을 숨 깁니다. "호출 가능"코드는 올바른 컴퓨터에서 투명하게 실행됩니다. 예를 들어
:
@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
를 참조하고, 유사한 기능을 other Jenkins plugins의 소스 코드를 확인하십시오.
네트워크 공유 솔루션을 사용하는 대신 플러그인을 올바르게 작동시키는 것이 좋습니다. :)
+1 "자동" – Cole9350