jenkins:启动远程虚拟机并保持运行

我试图让jenkins在jenkins奴隶上启动一个虚拟机。 虚拟机本身将作为jenkins的奴隶。 为了做到这一点,我需要启动虚拟机并保持运行,即使在Jenkins作业终止之后。 我试图创build一个自由式项目,在从站上运行批处理脚本,并检查虚拟机是否正在运行:

"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VM\MyVM.vmx" "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" list 

第二个命令告诉我,虚拟机实际上已经启动并正在运行,但显然它直接closures,因为我看不到对应于该虚拟机的节点在线。

Jenkins从属代理作为Windows服务安装在虚拟机的主机上,并以域用户身份login。

如果我将第一个命令切换到

 "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\VM\MyVM.vmx" 

VM启动,节点连接到Jenkins。 这是因为批处理脚本在执行完这个命令后卡住了,不会终止,所以虚拟机保持开机状态。 但是,如果我使用Jenkins服务使用的同一用户login主机,则无法看到虚拟机正在运行。

具有讽刺意味的是,事实上,我可以通过使用批处理命令创build一个项目来closuresJenkins在本地启动的任何虚拟机

 "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws stop "D:\VM\MyVM.vmx" soft 

所以,总结一下:我想创build一个在虚拟机上启动的Jenkins作业,这样我就可以使用它作为一个奴隶代理。 即使作业完成后,虚拟机也必须保持开机状态,如果需要的话,我会用不同的工作closures虚拟机。 但是只有关机工作按预期工作。

尝试使用START命令启动您的虚拟机:

START "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VM\MyVM.vmx"

今天玩虚拟机和Jenkins后,我了解到,如果Jenkins从服务器不作为Windows服务运行,而是通过Java Webstart应用程序启动,则vmrun可以完美工作。

另外,可以通过修改BUILD_ID env来防止进程被杀死。 因为Jenkins正在使用此变量来跟踪构建启动的进程。 所以通过在产卵过程之前改变BUILD_ID的值,他们不会在Job完成后被杀死。