Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 詹金斯:启动远程虚拟机并保持其运行_Windows_Batch File_Jenkins_Vmware_Vmrun - Fatal编程技术网

Windows 詹金斯:启动远程虚拟机并保持其运行

Windows 詹金斯:启动远程虚拟机并保持其运行,windows,batch-file,jenkins,vmware,vmrun,Windows,Batch File,Jenkins,Vmware,Vmrun,我试图让Jenkins在Jenkins奴隶上启动一个虚拟机。虚拟机本身将充当詹金斯的奴隶。 为了做到这一点,我需要引导虚拟机并保持其运行,即使在Jenkins作业终止之后。我已尝试创建一个freestyle项目,该项目在从属服务器上运行批处理脚本,并检查VM是否正在运行: "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VM\MyVM.vmx" "C:\Program Files (x86

我试图让Jenkins在Jenkins奴隶上启动一个虚拟机。虚拟机本身将充当詹金斯的奴隶。 为了做到这一点,我需要引导虚拟机并保持其运行,即使在Jenkins作业终止之后。我已尝试创建一个freestyle项目,该项目在从属服务器上运行批处理脚本,并检查VM是否正在运行:

"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
第二个命令向我显示虚拟机实际上已启动并运行,但显然它再次直接关闭,因为我看不到与虚拟机对应的节点处于联机状态

Jenkins从属代理作为Windows服务安装在VM的主机上,并作为域用户登录

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

"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\VM\MyVM.vmx"
VM通电,节点连接到Jenkins。这是因为批处理脚本在执行此命令后会被卡住,并且不会终止,因此VM仍保持通电状态。但是,如果我使用Jenkins服务使用的同一用户登录主机,则无法看到VM正在运行

具有讽刺意味的是,通过使用batch命令创建一个项目,我实际上可以关闭我从Jenkins在主机上本地启动的任何虚拟机

"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws stop "D:\VM\MyVM.vmx" soft
因此,总结一下: 我想创建一个Jenkins作业,为VM供电,以便将其用作从属代理。虚拟机必须保持通电,即使作业完成后,我会根据需要使用不同的作业将其关闭。
但只有关机作业按预期工作。

尝试使用start命令启动VM:
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的值,它们不会在作业完成后被杀死。

为什么VM会停止?vmrun start应该启动它,然后正常运行-事件日志中是否有错误?是否将其配置为断电以节省电源?您的虚拟机主机设置为在空闲时挂起它吗?这是我目前不理解的。我猜是因为Jenkins在工作结束后关闭了会话。如果我从命令行本地运行上述命令,我可以很好地启动虚拟机。因此,基本上,当工作完成时,詹金斯似乎只是注销(如果可以这样说的话)。