diff --git a/README.txt b/README.txt index ce66f05..8bb4070 100644 --- a/README.txt +++ b/README.txt @@ -1,3 +1,8 @@ -If you're wanting to make changes, please clone the git repository at +This plugin integrates Jenkins with the VirtualBox 4.x virtual machine. +This is a clone of the virtualbox 3.x plugin git://github.com/jenkinsci/virtualbox-plugin.git + +... and fixes JENKINS-8634 +"VirtualBox 4.0.2 web-server became incompatible with virtualbox plugin 0.2.1" +http://issues.jenkins-ci.org/browse/JENKINS-8634 diff --git a/client/pom.xml b/client/pom.xml index 4752502..9672db3 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -4,13 +4,13 @@ org.jvnet.hudson.plugins virtualbox-parent - 0.3-SNAPSHOT + 0.4-SNAPSHOT ../pom.xml virtualbox-client jar - Hudson VirtualBox Client + Jenkins VirtualBox Client diff --git a/client/src/main/java/hudson/plugins/virtualbox/Client.java b/client/src/main/java/hudson/plugins/virtualbox/Client.java index 0f61eea..ff16d4d 100644 --- a/client/src/main/java/hudson/plugins/virtualbox/Client.java +++ b/client/src/main/java/hudson/plugins/virtualbox/Client.java @@ -32,7 +32,7 @@ public void start() throws Exception { Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is); String url = dom.getElementsByTagName("url").item(0).getTextContent(); - System.out.println("Hudson: " + url); + System.out.println("Jenkins: " + url); hudson.remoting.Launcher.main("-jnlpUrl", getJnlp(url)); } diff --git a/lib/org/virtualbox/vboxws/3.1/vboxws-3.1-java15.jar b/lib/org/virtualbox/vboxws/3.1/vboxws-3.1-java15.jar deleted file mode 100644 index d03f35d..0000000 Binary files a/lib/org/virtualbox/vboxws/3.1/vboxws-3.1-java15.jar and /dev/null differ diff --git a/lib/org/virtualbox/vboxws/4.0/vboxws-4.0-java16.jar b/lib/org/virtualbox/vboxws/4.0/vboxws-4.0-java16.jar new file mode 100755 index 0000000..deb3ee3 Binary files /dev/null and b/lib/org/virtualbox/vboxws/4.0/vboxws-4.0-java16.jar differ diff --git a/lib/org/virtualbox/vboxws/3.1/vboxws-3.1.pom b/lib/org/virtualbox/vboxws/4.0/vboxws-4.0.pom similarity index 94% rename from lib/org/virtualbox/vboxws/3.1/vboxws-3.1.pom rename to lib/org/virtualbox/vboxws/4.0/vboxws-4.0.pom index 0327438..a3995e5 100644 --- a/lib/org/virtualbox/vboxws/3.1/vboxws-3.1.pom +++ b/lib/org/virtualbox/vboxws/4.0/vboxws-4.0.pom @@ -5,6 +5,6 @@ 4.0.0 org.virtualbox vboxws - 3.1 + 4.0 POM was created from install:install-file diff --git a/lib/org/virtualbox/vboxws/maven-metadata-local.xml b/lib/org/virtualbox/vboxws/maven-metadata-local.xml index d0cf412..90dddc3 100644 --- a/lib/org/virtualbox/vboxws/maven-metadata-local.xml +++ b/lib/org/virtualbox/vboxws/maven-metadata-local.xml @@ -2,10 +2,10 @@ org.virtualbox vboxws - 3.1 + 4.0 - 3.1 + 4.0 20100416025301 diff --git a/plugin/pom.xml b/plugin/pom.xml index f7d3982..8e608ba 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -4,21 +4,21 @@ org.jvnet.hudson.plugins virtualbox-parent - 0.3-SNAPSHOT + 0.4-SNAPSHOT ../pom.xml - virtualbox + virtualbox4 hpi - Hudson VirtualBox Plugin - http://wiki.hudson-ci.org/display/HUDSON/VirtualBox+Plugin + Jenkins VirtualBox Plugin + http://wiki.jenkins-ci.org/display/JENKINS/VirtualBox+Plugin org.virtualbox vboxws - 3.1 - java15 + 4.0 + java16 diff --git a/plugin/src/main/java/hudson/plugins/virtualbox/VirtualBoxUtils.java b/plugin/src/main/java/hudson/plugins/virtualbox/VirtualBoxUtils.java index b44ddeb..a1d94b8 100644 --- a/plugin/src/main/java/hudson/plugins/virtualbox/VirtualBoxUtils.java +++ b/plugin/src/main/java/hudson/plugins/virtualbox/VirtualBoxUtils.java @@ -1,46 +1,41 @@ package hudson.plugins.virtualbox; -import com.sun.xml.ws.commons.virtualbox_3_1.*; - import java.util.ArrayList; import java.util.List; +import org.virtualbox_4_0.IMachine; +import org.virtualbox_4_0.IProgress; +import org.virtualbox_4_0.ISession; +import org.virtualbox_4_0.MachineState; +import org.virtualbox_4_0.VirtualBoxManager; + /** - * @author Evgeny Mandrikov + * @author Evgeny Mandrikov, Lars Gregori */ public final class VirtualBoxUtils { private VirtualBoxUtils() { } - static class ConnectionHolder { - IWebsessionManager manager; - IVirtualBox vbox; - - public void disconnect() { - manager.disconnect(vbox); - } - } - - private static ConnectionHolder connect(VirtualBoxCloud host) { - IWebsessionManager manager = new IWebsessionManager(host.getUrl()); - ConnectionHolder holder = new ConnectionHolder(); - holder.manager = manager; - holder.vbox = manager.logon(host.getUsername(), host.getPassword()); - return holder; + private static VirtualBoxManager connect(VirtualBoxCloud host) { + VirtualBoxManager mgr = VirtualBoxManager.createInstance("Unter Null - The Failure Epiphany - You Have Fallen From Grace"); + mgr.connect(host.getUrl(), host.getUsername(), host.getPassword()); + return mgr; } /** + * Get virtual machines installed on specified host. + * * @param host VirtualBox host * @return list of virtual machines installed on specified host */ public static List getMachines(VirtualBoxCloud host) { List result = new ArrayList(); - ConnectionHolder holder = connect(host); - for (IMachine machine : holder.vbox.getMachines()) { + VirtualBoxManager mgr = connect(host); + for (IMachine machine : mgr.getVBox().getMachines()) { result.add(new VirtualBoxMachine(host, machine.getName())); } - holder.disconnect(); + mgr.disconnect(); return result; } @@ -52,23 +47,31 @@ public static List getMachines(VirtualBoxCloud host) { * @return result code */ public static long startVm(VirtualBoxMachine vbMachine, String type) { - ConnectionHolder holder = connect(vbMachine.getHost()); - ISession session = holder.manager.getSessionObject(holder.vbox); - IMachine machine = holder.vbox.findMachine(vbMachine.getName()); + VirtualBoxManager mgr = connect(vbMachine.getHost()); + IMachine machine; + try { + machine = mgr.getVBox().findMachine(vbMachine.getName()); + } catch (Exception e) { + try { + // try again ("idea" taken from VirtualBox 3.x example) + machine = mgr.getVBox().findMachine(vbMachine.getName()); + } catch (Exception e2) { + return -1; + } + } + // check virtual machine state - if started, then do nothing // TODO actually this should be in VirtualBoxComputerLauncher - if (org.virtualbox_3_1.MachineState.RUNNING == machine.getState()) { + if (MachineState.Running == machine.getState()) { return 0; } - IProgress progress = holder.vbox.openRemoteSession( - session, - machine.getId(), - type, // sessionType (headless, vrdp) - "" // env - ); + + ISession session = mgr.getSessionObject(); + String env = ""; + IProgress progress = machine.launchVMProcess(session, type, env); progress.waitForCompletion(-1); long result = progress.getResultCode(); - holder.disconnect(); + mgr.disconnect(); return result; } @@ -79,31 +82,38 @@ public static long startVm(VirtualBoxMachine vbMachine, String type) { * @return result code */ public static long stopVm(VirtualBoxMachine vbMachine) { - ConnectionHolder holder = connect(vbMachine.getHost()); - ISession session = holder.manager.getSessionObject(holder.vbox); - IMachine machine = holder.vbox.findMachine(vbMachine.getName()); + VirtualBoxManager mgr = connect(vbMachine.getHost()); + IMachine machine = mgr.getVBox().findMachine(vbMachine.getName()); // check virtual machine state - if not running, then do nothing // TODO actually this should be in VirtualBoxComputerLauncher - if (org.virtualbox_3_1.MachineState.RUNNING != machine.getState()) { + if (MachineState.Running != machine.getState()) { return 0; } - holder.vbox.openExistingSession(session, machine.getId()); + ISession session; + try { + session = mgr.openMachineSession(machine); + } catch (Exception e) { + return -1; + } + IProgress progress = session.getConsole().powerDown(); progress.waitForCompletion(-1); long result = progress.getResultCode(); - holder.disconnect(); + mgr.disconnect(); return result; } /** + * MAC Address of specified virtual machine. + * * @param vbMachine virtual machine * @return MAC Address of specified virtual machine */ public static String getMacAddress(VirtualBoxMachine vbMachine) { - ConnectionHolder holder = connect(vbMachine.getHost()); - IMachine machine = holder.vbox.findMachine(vbMachine.getName()); + VirtualBoxManager mgr = connect(vbMachine.getHost()); + IMachine machine = mgr.getVBox().findMachine(vbMachine.getName()); String macAddress = machine.getNetworkAdapter(0L).getMACAddress(); - holder.disconnect(); + mgr.disconnect(); return macAddress; } } diff --git a/plugin/src/main/resources/hudson/plugins/virtualbox/VirtualBoxBuildWrapper/config.jelly b/plugin/src/main/resources/hudson/plugins/virtualbox/VirtualBoxBuildWrapper/config.jelly index b3f4663..218541f 100644 --- a/plugin/src/main/resources/hudson/plugins/virtualbox/VirtualBoxBuildWrapper/config.jelly +++ b/plugin/src/main/resources/hudson/plugins/virtualbox/VirtualBoxBuildWrapper/config.jelly @@ -3,7 +3,7 @@ + onchange="updateListBox(document.getElementsByName('virtualMachineName')[0],'${rootURL}/plugin/virtualbox4/computerNameValues?hostName='+encode(this.value))">