我试图让詹金斯在詹金斯奴隶上启动一个虚拟机。然后,VM 本身将充当 Jenkins 从站。为此,我需要启动 VM 并使其保持运行,即使在 Jenkins 作业终止后也是如此。我试图创建一个自由式项目,它在从属设备上运行批处理脚本并检查 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 Slave 代理作为 Windows 服务安装在 VM 的主机上,并以域用户身份登录。
如果我将第一个命令切换到
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\VM\MyVM.vmx"
虚拟机开机,节点连接到 Jenkins。这是因为批处理脚本在此命令之后以某种方式卡住并且不会终止,因此 VM 保持开机状态。但是,如果我使用 Jenkins 服务使用的同一用户登录主机,我看不到 VM 正在运行。
具有讽刺意味的是,我实际上可以通过使用批处理命令创建一个项目来关闭我在 Jenkins 的主机上本地启动的任何虚拟机
"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws stop "D:\VM\MyVM.vmx" soft
所以,总结一下:我想创建一个启动 VM 的 Jenkins 作业,这样我就可以将它用作从代理。即使在作业完成后,VM 也必须保持开机状态,我将根据需要使用不同的作业将其关闭。但只有关闭作业按预期工作。