提交 3b544120 编写于 作者: N Nicolas De Loof

support variable expansion to define Java path

上级 2ca12ecb
......@@ -25,24 +25,23 @@ package hudson.os.windows;
import static hudson.Util.copyStreamAndClose;
import static org.jvnet.hudson.wmi.Win32Service.Win32OwnProcess;
import hudson.EnvVars;
import hudson.Extension;
import hudson.Util;
import hudson.lifecycle.WindowsSlaveInstaller;
import hudson.model.AbstractDescribableImpl;
import hudson.model.Computer;
import hudson.model.Descriptor;
import hudson.model.TaskListener;
import hudson.model.*;
import hudson.os.windows.ManagedWindowsServiceAccount.AnotherUser;
import hudson.os.windows.ManagedWindowsServiceAccount.LocalSystem;
import hudson.remoting.Channel;
import hudson.remoting.Channel.Listener;
import hudson.remoting.SocketInputStream;
import hudson.remoting.SocketOutputStream;
import hudson.slaves.ComputerLauncher;
import hudson.slaves.SlaveComputer;
import hudson.slaves.*;
import hudson.tools.JDKInstaller;
import hudson.tools.JDKInstaller.CPU;
import hudson.tools.JDKInstaller.Platform;
import hudson.util.DescribableList;
import hudson.util.IOUtils;
import hudson.util.Secret;
import hudson.util.jna.DotNet;
......@@ -233,10 +232,12 @@ public class ManagedWindowsServiceLauncher extends ComputerLauncher {
if(!remoteRoot.exists())
remoteRoot.mkdirs();
String java = resolveJava(computer);
try {// does Java exist?
logger.println("Checking if Java exists");
WindowsRemoteProcessLauncher wrpl = new WindowsRemoteProcessLauncher(name,auth);
Process proc = wrpl.launch(StringUtils.defaultIfEmpty(javaPath,"java") + " -fullversion","c:\\");
Process proc = wrpl.launch("\"" +java + "\" -fullversion","c:\\");
proc.getOutputStream().close();
IOUtils.copy(proc.getInputStream(),logger);
proc.getInputStream().close();
......@@ -304,7 +305,7 @@ public class ManagedWindowsServiceLauncher extends ComputerLauncher {
copySlaveJar(logger, remoteRoot);
// copy jenkins-slave.xml
String xml = createAndCopyJenkinsSlaveXml(id, logger, remoteRoot);
String xml = createAndCopyJenkinsSlaveXml(java, id, logger, remoteRoot);
// install it as a service
logger.println(Messages.ManagedWindowsServiceLauncher_RegisteringService());
......@@ -338,7 +339,7 @@ public class ManagedWindowsServiceLauncher extends ComputerLauncher {
}
slaveService = services.getService(id);
} else {
createAndCopyJenkinsSlaveXml(id, logger, remoteRoot);
createAndCopyJenkinsSlaveXml(java, id, logger, remoteRoot);
copySlaveJar(logger, remoteRoot);
}
......@@ -385,6 +386,52 @@ public class ManagedWindowsServiceLauncher extends ComputerLauncher {
}
}
private String resolveJava(SlaveComputer computer) {
if (StringUtils.isNotBlank(javaPath)) {
return getEnvVars(computer).expand(javaPath);
}
return "java";
}
// -- duplicates code from ssh-slaves-plugin
private EnvVars getEnvVars(SlaveComputer computer) {
final EnvVars global = getEnvVars(Jenkins.getInstance());
final EnvVars local = getEnvVars(computer.getNode());
if (global != null) {
if (local != null) {
final EnvVars merged = new EnvVars(global);
merged.overrideAll(local);
return merged;
} else {
return global;
}
} else if (local != null) {
return local;
} else {
return new EnvVars();
}
}
private EnvVars getEnvVars(Hudson h) {
return getEnvVars(h.getGlobalNodeProperties());
}
private EnvVars getEnvVars(Node n) {
return getEnvVars(n.getNodeProperties());
}
private EnvVars getEnvVars(DescribableList<NodeProperty<?>, NodePropertyDescriptor> dl) {
final EnvironmentVariablesNodeProperty evnp = dl.get(EnvironmentVariablesNodeProperty.class);
if (evnp == null) {
return null;
}
return evnp.getEnvVars();
}
private void checkPort135Access(PrintStream logger, String name, InetAddress host) throws IOException {
Socket s = new Socket();
try {
......@@ -409,10 +456,10 @@ public class ManagedWindowsServiceLauncher extends ComputerLauncher {
}
}
private String createAndCopyJenkinsSlaveXml(String serviceId, PrintStream logger, SmbFile remoteRoot) throws IOException {
private String createAndCopyJenkinsSlaveXml(String java, String serviceId, PrintStream logger, SmbFile remoteRoot) throws IOException {
logger.println(Messages.ManagedWindowsServiceLauncher_CopyingSlaveXml());
String xml = WindowsSlaveInstaller.generateSlaveXml(serviceId,
StringUtils.defaultIfEmpty(javaPath,"java")+"w.exe", vmargs, "-tcp %BASE%\\port.txt");
java+"w.exe", vmargs, "-tcp %BASE%\\port.txt");
copyStreamAndClose(new ByteArrayInputStream(xml.getBytes("UTF-8")), new SmbFile(remoteRoot,"jenkins-slave.xml").getOutputStream());
return xml;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册