我正在尝试让Jenkins在Jenkins奴隶上启动虚拟机。 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
第二个命令显示VM实际启动并运行,但显然它会再次直接关闭,因为我无法看到与VM对应的节点在线。
Jenkins Slave代理作为Windows服务安装在VM的主机上,并以域用户身份登录。
如果我将第一个命令切换到
"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\VM\MyVM.vmx"
VM启动,节点连接到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也必须保持通电状态,我将根据需要使用不同的作业将其关闭。 但只有关机工作按预期工作。
答案 0 :(得分:1)
尝试使用START命令启动VM:
START "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "D:\VM\MyVM.vmx"
答案 1 :(得分:0)
今天在与VM和Jenkins一起玩之后,我了解到如果Jenkins slave不作为Windows服务运行但是通过Java Webstart应用程序启动,vmrun可以正常工作。
此外,可以通过更改BUILD_ID env来防止进程被杀死。变量,因为Jenkins使用此变量来跟踪构建启动的进程。因此,通过在生成过程之前更改BUILD_ID的值,他们在作业完成后不会被杀死。