@Override public final boolean start(StepContext context) { try { FilePath ws = context.get(FilePath.class); assert ws != null : context.getClass() + " failed to provide a FilePath even though one was requested"; String remote = ws.getRemote(); String node = null; for (Computer c : Jenkins.getInstance().getComputers()) { if (c.getChannel() == ws.getChannel()) { node = c.getName(); break; } } if (node == null) { throw new IllegalStateException("no known node for " + ws); } register( context, task() .launch( context.get(EnvVars.class), ws, context.get(Launcher.class), context.get(TaskListener.class)), node, remote); } catch (Exception x) { context.onFailure(x); } return false; // TODO implement stop, however it is design (will need to call Controller.stop) }
/** Reports success or failure of step, outside synchronization block to avoid deadlocks. */ void report() { if (error != null) { context.onFailure(error); } else { context.onSuccess(result); } }