Jenkins:启动远程 VM 并保留它 运行

Jenkins: Start remote VM and keep it running

我正在尝试让 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

第二个命令显示虚拟机实际上已经启动并且运行,但是显然它又直接关闭了,因为我看不到虚拟机对应的节点在线。

Jenkins Slave 代理作为 Windows 服务安装在 VM 的主机上,并以域用户身份登录。

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

"C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "D:\VM\MyVM.vmx"

VM 启动,节点连接到 Jenkins。这是因为不知何故,批处理脚本在执行此命令后卡住了并且没有终止,因此 VM 保持开机状态。但是,如果我使用 Jenkins 服务使用的同一用户登录主机,我将看不到虚拟机 运行.

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

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

所以,总结一下: 我想创建一个启动 VM 的 Jenkins 作业,这样我就可以将它用作从属代理。即使在作业完成后,VM 也必须保持开启状态,我将根据需要使用不同的作业将其关闭。 但只有关闭作业按预期工作。

尝试使用 START 命令启动您的虚拟机:

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

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

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