1

我试图让詹金斯在詹金斯奴隶上启动一个虚拟机。然后,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 也必须保持开机状态,我将根据需要使用不同的作业将其关闭。但只有关闭作业按预期工作。

4

2 回答 2

1

尝试使用 START 命令启动 VM:

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

于 2015-03-23T14:34:53.720 回答
0

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

此外,可以通过更改 BUILD_ID 环境来防止进程被杀死。变量,因为 Jenkins 使用此变量来跟踪构建启动的进程。因此,通过在生成进程之前更改 BUILD_ID 的值,它们不会在作业完成后被杀死。

于 2015-07-02T12:35:33.293 回答