Windows 詹金斯:启动远程虚拟机并保持其运行
我试图让Jenkins在Jenkins奴隶上启动一个虚拟机。虚拟机本身将充当詹金斯的奴隶。 为了做到这一点,我需要引导虚拟机并保持其运行,即使在Jenkins作业终止之后。我已尝试创建一个freestyle项目,该项目在从属服务器上运行批处理脚本,并检查VM是否正在运行: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
"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在工作结束后关闭了会话。如果我从命令行本地运行上述命令,我可以很好地启动虚拟机。因此,基本上,当工作完成时,詹金斯似乎只是注销(如果可以这样说的话)。